From e0038dde84cc0ba56f7b7281a46f7cd693c1b342 Mon Sep 17 00:00:00 2001 From: liuzhaotian Date: Fri, 30 May 2025 14:19:16 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B5=84=E9=87=91=E7=AE=A1=E7=90=86=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=8CES=E7=B4=A2=E5=BC=95=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/enums/PlanStatusEnum.java | 3 +- .../executor/api/funds/ExecutorFundsApi.java | 29 + .../executor/enums/ErrorCodeConstants.java | 2 + .../api/funds/ExecutorFundsApiImpl.java | 36 ++ .../executor/api/plan/OrderPlanApiImpl.java | 18 +- .../BalanceDetailsController.java | 73 +++ .../vo/BalanceDetailsPageReqVO.java | 48 ++ .../vo/BalanceDetailsRespVO.java | 83 +++ .../admin/funds/bill/BillController.java | 69 +++ .../funds/bill/vo/BillDetailsRespVO.java | 77 +++ .../funds/invoice/InvoiceController.java | 140 +++++ .../funds/invoice/vo/InvoiceAmountRespVO.java | 23 + .../invoice/vo/InvoiceDetailsPageReqVO.java | 61 +++ .../invoice/vo/InvoiceDetailsRespVO.java | 28 + .../funds/invoice/vo/InvoiceFilePath.java | 17 + .../invoice/vo/InvoiceInvoicingReqVO.java | 31 ++ .../invoice/vo/InvoicePurchaseRecord.java | 38 ++ .../funds/invoice/vo/InvoiceRecordsReqVO.java | 27 + .../invoice/vo/InvoiceRecordsRespVO.java | 66 +++ .../funds/invoice/vo/InvoiceTitleInfo.java | 55 ++ .../funds/purchase/PurchaseController.java | 69 +++ .../purchase/vo/PurchaseRecordPageReqVO.java | 45 ++ .../purchase/vo/PurchaseRecordRespVO.java | 87 +++ .../admin/order/OrderController.java | 15 +- .../admin/plan/OptimizePlanController.java | 26 - .../admin/plan/vo/PlanSaveReqVO.java | 5 + .../admin/plan/vo/SavePlanPlateList.java | 4 + .../admin/plate/vo/NoPlanPlatePageReqVO.java | 10 + .../admin/plate/vo/OrderPlateIds.java | 3 + .../IncomeExpenseDetailsDO.java | 120 +++++ .../funds/invoice/InvoiceRecordsDO.java | 117 +++++ .../funds/purchase/PurchaseRecordDO.java | 153 ++++++ .../IncomeExpenseDetailsMapper.java | 39 ++ .../funds/invoice/InvoiceRecordsMapper.java | 37 ++ .../funds/purchase/PurchaseRecordMapper.java | 37 ++ .../executor/dal/mysql/plan/PlanMapper.java | 43 -- .../dal/mysql/planitem/PlanItemMapper.java | 2 + .../executor/dal/mysql/plate/PlateMapper.java | 13 +- .../enums/amount/IncomeExpenseTypeEnum.java | 51 ++ .../enums/amount/InvoiceStatusEnum.java | 63 +++ .../enums/amount/InvoiceTypeEnum.java | 36 ++ .../executor/enums/amount/IssueTypeEnum.java | 39 ++ .../executor/enums/amount/TradeTypeEnum.java | 52 ++ .../rpc/config/RpcConfiguration.java | 3 +- .../balancedetails/BalanceDetailsService.java | 17 + .../BalanceDetailsServiceImpl.java | 57 ++ .../service/funds/bill/BillService.java | 17 + .../service/funds/bill/BillServiceImpl.java | 70 +++ .../service/funds/invoice/InvoiceService.java | 37 ++ .../funds/invoice/InvoiceServiceImpl.java | 412 +++++++++++++++ .../funds/purchase/PurchaseService.java | 16 + .../funds/purchase/PurchaseServiceImpl.java | 53 ++ .../optimizeplan/OptimizePlanService.java | 18 - .../optimizeplan/OptimizePlanServiceImpl.java | 323 +++--------- .../service/order/OrderInputProcessor.java | 32 +- .../service/order/OrderServiceImpl.java | 39 +- .../order/OrderStatisticsServiceImpl.java | 18 +- .../intervalometer/OrderScheduledImpl.java | 12 +- .../service/plan/PlanServiceImpl.java | 236 +++++++-- .../service/plate/PlateServiceImpl.java | 132 +++-- .../src/main/resources/application-local.yaml | 7 + .../IncomeExpenseDetailsMapper.xml | 22 + .../funds/invoice/InvoiceRecordsMapper.xml | 17 + .../funds/purchase/PurchaseRecordMapper.xml | 51 ++ .../mapper/planitem/PlanItemMapper.xml | 25 +- .../resources/mapper/plate/PlateMapper.xml | 6 +- .../system/api/funds/SystemFundsApi.java | 47 ++ .../api/funds/dto/InvoiceTitleInfoDTO.java | 57 ++ .../system/api/funds/dto/OrganAmountDTO.java | 43 ++ .../module/system/api/organ/OrganApi.java | 18 +- .../system/api/organ/dto/OrganizationDTO.java | 32 ++ .../system/enums/ErrorCodeConstants.java | 26 +- .../AdvertisementStatusEnum.java | 31 +- .../enums/products/DurationUnitEnum.java | 6 +- .../enums/products/ProductStatusEnum.java | 8 +- .../system/SystemServerApplication.java | 2 + .../system/api/funds/SystemFundsApiImpl.java | 115 ++++ .../module/system/api/organ/OrganApiImpl.java | 22 + .../AdvertisementController.java | 106 ---- .../vo/AdvertisementPageReqVO.java | 65 --- .../AdvertisementController.java | 164 ++++++ .../advertisement/vo/AdImageFilePath.java | 17 + .../vo/AdvertisementPageReqVO.java | 29 + .../vo/AdvertisementPublishReqVO.java | 38 ++ .../advertisement/vo/AdvertisementRespVO.java | 22 +- .../vo/AdvertisementSaveReqVO.java | 37 +- .../funds/invoice/InvoiceController.java | 46 ++ .../funds/invoice/vo/InvoiceTitleReqVO.java | 63 +++ .../organamount/OrganAmountController.java | 58 ++ .../organamount/vo/AllOrganAmountRespVO.java | 22 + .../organamount/vo/OrganAmountRespVO.java | 30 ++ .../products/ProductsController.java | 22 +- .../products/ProductsDetailController.java | 22 +- .../products/vo/product/ProductPageReqVO.java | 2 +- .../products/vo/product/ProductRespVO.java | 2 +- .../products/vo/product/ProductSaveReqVO.java | 2 +- .../ProductDetailsPageReqVO.java | 2 +- .../productDetails/ProductDetailsRespVO.java | 2 +- .../ProductDetailsSaveReqVO.java | 8 +- .../recharge/RechargeActiveController.java | 22 +- .../recharge/vo/RechargePageReqVO.java | 2 +- .../recharge/vo/RechargeRespVO.java | 2 +- .../recharge/vo/RechargeSaveReqVO.java | 2 +- .../admin/parser/ParserController.java | 78 +++ .../parser/ParserTemplateController.java | 93 ++++ .../admin/parser/vo/ParserReqVO.java | 30 ++ .../admin/parser/vo/ParserRespVO.java | 27 + .../admin/parser/vo/ParserSimpleRespVO.java | 22 + .../admin/parser/vo/ParserTemplateReqVO.java | 31 ++ .../admin/parser/vo/ParserTemplateRespVO.java | 31 ++ .../admin/parser/vo/TemplateLimitReqVO.java | 22 + .../admin/parser/vo/TemplateSimpleRespVO.java | 23 + .../advertisement/AdvertisementDO.java | 8 +- .../advertisement/AdvertisementTaskDO.java | 2 +- .../funds/invoice/InvoiceTitleInfoDO.java | 93 ++++ .../funds/organamount/OrganAmountDO.java | 66 +++ .../{ => funds}/products/ProductsDO.java | 11 +- .../products/ProductsDetailDO.java | 2 +- .../recharge/GiftMoneyDetailsDO.java | 2 +- .../dal/dataobject/parser/ParserDO.java | 59 +++ .../dal/dataobject/parser/ParserLimitDO.java | 35 ++ .../dataobject/parser/ParserTemplateDO.java | 49 ++ .../advertisement/AdvertisementMapper.java | 73 --- .../advertisement/AdvertisementMapper.java | 78 +++ .../AdvertisementTaskMapper.java | 4 +- .../funds/invoice/InvoiceTitleInfoMapper.java | 13 + .../funds/organamount/OrganAmountMapper.java | 18 + .../products/ProductsDetailMapper.java | 34 +- .../{ => funds}/products/ProductsMapper.java | 6 +- .../recharge/GiftMoneyDetailsMapper.java | 6 +- .../dal/mysql/parser/ParserLimitMapper.java | 19 + .../system/dal/mysql/parser/ParserMapper.java | 14 + .../mysql/parser/ParserTemplateMapper.java | 19 + .../rpc/config/RpcConfiguration.java | 3 +- .../job/advertisement/UpdateAdStatus.java | 57 ++ .../advertisement/AdvertisementProducer.java | 3 +- .../advertisement/AdvertisementService.java | 56 -- .../AdvertisementServiceImpl.java | 251 --------- .../AdvertisementCompensateTask.java | 17 +- .../advertisement/AdvertisementService.java | 55 ++ .../AdvertisementServiceImpl.java | 494 ++++++++++++++++++ .../service/funds/invoice/InvoiceService.java | 12 + .../funds/invoice/InvoiceServiceImpl.java | 51 ++ .../funds/organamount/OrganAmountService.java | 18 + .../organamount/OrganAmountServiceImpl.java | 96 ++++ .../products/ProductsDetailService.java | 8 +- .../products/ProductsDetailServiceImpl.java | 265 ++++++++++ .../{ => funds}/products/ProductsService.java | 6 +- .../funds/products/ProductsServiceImpl.java | 117 +++++ .../recharge/RechargeActiveService.java | 8 +- .../recharge/RechargeActiveServiceImpl.java | 105 ++++ .../system/service/parser/ParserService.java | 32 ++ .../service/parser/ParserServiceImpl.java | 135 +++++ .../service/parser/ParserTemplateService.java | 34 ++ .../parser/ParserTemplateServiceImpl.java | 241 +++++++++ .../products/ProductsDetailServiceImpl.java | 253 --------- .../service/products/ProductsServiceImpl.java | 86 --- .../recharge/RechargeActiveServiceImpl.java | 75 --- .../src/main/resources/application-local.yaml | 4 + .../advertisement/AdvertisementMapper.xml | 52 ++ 160 files changed, 6636 insertions(+), 1670 deletions(-) create mode 100644 cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/api/funds/ExecutorFundsApi.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/api/funds/ExecutorFundsApiImpl.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/balancedetails/BalanceDetailsController.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/balancedetails/vo/BalanceDetailsPageReqVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/balancedetails/vo/BalanceDetailsRespVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/bill/BillController.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/bill/vo/BillDetailsRespVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/InvoiceController.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceAmountRespVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceDetailsPageReqVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceDetailsRespVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceFilePath.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceInvoicingReqVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoicePurchaseRecord.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceRecordsReqVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceRecordsRespVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceTitleInfo.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/purchase/PurchaseController.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/purchase/vo/PurchaseRecordPageReqVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/purchase/vo/PurchaseRecordRespVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/funds/balancedetails/IncomeExpenseDetailsDO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/funds/invoice/InvoiceRecordsDO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/funds/purchase/PurchaseRecordDO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/funds/balancedetails/IncomeExpenseDetailsMapper.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/funds/invoice/InvoiceRecordsMapper.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/funds/purchase/PurchaseRecordMapper.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/IncomeExpenseTypeEnum.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/InvoiceStatusEnum.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/InvoiceTypeEnum.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/IssueTypeEnum.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/TradeTypeEnum.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/balancedetails/BalanceDetailsService.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/balancedetails/BalanceDetailsServiceImpl.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/bill/BillService.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/bill/BillServiceImpl.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/invoice/InvoiceService.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/invoice/InvoiceServiceImpl.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/purchase/PurchaseService.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/purchase/PurchaseServiceImpl.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/funds/balancedetails/IncomeExpenseDetailsMapper.xml create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/funds/invoice/InvoiceRecordsMapper.xml create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/funds/purchase/PurchaseRecordMapper.xml create mode 100644 cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/funds/SystemFundsApi.java create mode 100644 cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/funds/dto/InvoiceTitleInfoDTO.java create mode 100644 cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/funds/dto/OrganAmountDTO.java create mode 100644 cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/organ/dto/OrganizationDTO.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/funds/SystemFundsApiImpl.java delete mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/advertisement/AdvertisementController.java delete mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/advertisement/vo/AdvertisementPageReqVO.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/AdvertisementController.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdImageFilePath.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdvertisementPageReqVO.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdvertisementPublishReqVO.java rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/{ => funds}/advertisement/vo/AdvertisementRespVO.java (63%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/{ => funds}/advertisement/vo/AdvertisementSaveReqVO.java (65%) create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/invoice/InvoiceController.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/invoice/vo/InvoiceTitleReqVO.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/OrganAmountController.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/vo/AllOrganAmountRespVO.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/vo/OrganAmountRespVO.java rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/{ => funds}/products/ProductsController.java (83%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/{ => funds}/products/ProductsDetailController.java (78%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/{ => funds}/products/vo/product/ProductPageReqVO.java (94%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/{ => funds}/products/vo/product/ProductRespVO.java (94%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/{ => funds}/products/vo/product/ProductSaveReqVO.java (91%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/{ => funds}/products/vo/productDetails/ProductDetailsPageReqVO.java (95%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/{ => funds}/products/vo/productDetails/ProductDetailsRespVO.java (96%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/{ => funds}/products/vo/productDetails/ProductDetailsSaveReqVO.java (83%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/{ => funds}/recharge/RechargeActiveController.java (79%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/{ => funds}/recharge/vo/RechargePageReqVO.java (96%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/{ => funds}/recharge/vo/RechargeRespVO.java (96%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/{ => funds}/recharge/vo/RechargeSaveReqVO.java (97%) create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/ParserController.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/ParserTemplateController.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserReqVO.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserRespVO.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserSimpleRespVO.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserTemplateReqVO.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserTemplateRespVO.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/TemplateLimitReqVO.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/TemplateSimpleRespVO.java rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/{ => funds}/advertisement/AdvertisementDO.java (89%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/{ => funds}/advertisement/AdvertisementTaskDO.java (93%) create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/invoice/InvoiceTitleInfoDO.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/organamount/OrganAmountDO.java rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/{ => funds}/products/ProductsDO.java (91%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/{ => funds}/products/ProductsDetailDO.java (96%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/{ => funds}/recharge/GiftMoneyDetailsDO.java (95%) create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/parser/ParserDO.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/parser/ParserLimitDO.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/parser/ParserTemplateDO.java delete mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/advertisement/AdvertisementMapper.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/advertisement/AdvertisementMapper.java rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/{ => funds}/advertisement/AdvertisementTaskMapper.java (91%) create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/invoice/InvoiceTitleInfoMapper.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/organamount/OrganAmountMapper.java rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/{ => funds}/products/ProductsDetailMapper.java (67%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/{ => funds}/products/ProductsMapper.java (77%) rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/{ => funds}/recharge/GiftMoneyDetailsMapper.java (93%) create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/parser/ParserLimitMapper.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/parser/ParserMapper.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/parser/ParserTemplateMapper.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/job/advertisement/UpdateAdStatus.java delete mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/advertisement/AdvertisementService.java delete mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/advertisement/AdvertisementServiceImpl.java rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/{ => funds}/advertisement/AdvertisementCompensateTask.java (87%) create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/advertisement/AdvertisementService.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/advertisement/AdvertisementServiceImpl.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/invoice/InvoiceService.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/invoice/InvoiceServiceImpl.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountService.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountServiceImpl.java rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/{ => funds}/products/ProductsDetailService.java (72%) create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/products/ProductsDetailServiceImpl.java rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/{ => funds}/products/ProductsService.java (78%) create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/products/ProductsServiceImpl.java rename cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/{ => funds}/recharge/RechargeActiveService.java (74%) create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/recharge/RechargeActiveServiceImpl.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/parser/ParserService.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/parser/ParserServiceImpl.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/parser/ParserTemplateService.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/parser/ParserTemplateServiceImpl.java delete mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/products/ProductsDetailServiceImpl.java delete mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/products/ProductsServiceImpl.java delete mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/recharge/RechargeActiveServiceImpl.java create mode 100644 cf-module-system/cf-module-system-biz/src/main/resources/mapper/funds/advertisement/AdvertisementMapper.xml diff --git a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/enums/PlanStatusEnum.java b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/enums/PlanStatusEnum.java index 652e32f15..7b5941c74 100644 --- a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/enums/PlanStatusEnum.java +++ b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/enums/PlanStatusEnum.java @@ -11,8 +11,7 @@ public enum PlanStatusEnum { NOCUTTING(0, "未开料/新单"), OPENING(1, "开料中"), - OPENED(2, "已开料"), - PUTINTOPRODUCTION(3,"已投产"); + OPENED(2, "已开料"); private Integer status; private String scheduling; diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/api/funds/ExecutorFundsApi.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/api/funds/ExecutorFundsApi.java new file mode 100644 index 000000000..624ebe9f0 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/api/funds/ExecutorFundsApi.java @@ -0,0 +1,29 @@ +package com.cf.imes.module.executor.api.funds; + + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.module.executor.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +import java.math.BigDecimal; + +/** + * @author 资金管理feign接口 + */ +@FeignClient(name = ApiConstants.NAME) // TODO 晨丰:fallbackFactory = +@Tag(name = "RPC 服务 - 资金管理") +public interface ExecutorFundsApi { + + String PREFIX = ApiConstants.PREFIX + "/funds"; + + + + @GetMapping(PREFIX +"/getInvoiceAmount") + @Operation(summary = "查询待审核的发票金额") + CommonResult getToExamineAmount(); + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java index 505d98037..872752b36 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java +++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java @@ -16,6 +16,8 @@ public class ErrorCodeConstants { public static final ErrorCode PLATE_ERROR = new ErrorCode(1_001_107_005, "当前新增的板材非同一类型的板材,禁止更改"); public static final ErrorCode PLAN_PLATE_IS_ALL_CUT = new ErrorCode(1_001_107_006, "排单号:{} 的板材已全部开料,禁止删除!"); public static final ErrorCode PLAN_NOT_DATA_EXISTS = new ErrorCode(1_001_107_007, "排单号:{} 不存在,无法进行操作,请检查排单数据"); + public static final ErrorCode PLAN_PLATE_IS_CUTTING = new ErrorCode(1_001_107_008, "当前排单已有板材开料,无法开启混单"); + public static final ErrorCode PLAN_IS_MIXED_ERROR = new ErrorCode(1_001_107_009, "当前排单为混单,无法开启混单配置"); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/api/funds/ExecutorFundsApiImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/api/funds/ExecutorFundsApiImpl.java new file mode 100644 index 000000000..9a39118e1 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/api/funds/ExecutorFundsApiImpl.java @@ -0,0 +1,36 @@ +package com.cf.imes.module.executor.api.funds; + + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.module.executor.dal.mysql.funds.invoice.InvoiceRecordsMapper; +import com.cf.imes.module.executor.enums.amount.InvoiceStatusEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.math.BigDecimal; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +@Slf4j +public class ExecutorFundsApiImpl implements ExecutorFundsApi{ + + + + @Resource + private InvoiceRecordsMapper invoiceRecordsMapper; + + + + @Override + public CommonResult getToExamineAmount() { + + BigDecimal examineAmount = invoiceRecordsMapper.selectToExamineAmount(InvoiceStatusEnum.PENDINGINVOICING.getStatus()); + + return CommonResult.success(examineAmount); + + } + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/api/plan/OrderPlanApiImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/api/plan/OrderPlanApiImpl.java index f3f0689d3..7293c7ee8 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/api/plan/OrderPlanApiImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/api/plan/OrderPlanApiImpl.java @@ -51,6 +51,7 @@ import java.util.List; import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR; import static com.cf.imes.framework.common.util.json.JsonUtils.toJsonString; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; +import static com.cf.imes.module.executor.enums.EsIndexEnum.*; @RestController // 提供 RESTful API 接口,给 Feign 调用 @Validated @@ -101,15 +102,6 @@ public class OrderPlanApiImpl implements OrderPlanApi{ public static final String SEPARATE = "select"; - public static final String ORDER_REMAIN_PLATE_MODEL = "imes_order_optimize_plate_model"; - - - public static final String ORDER_PLATE_MODEL = "imes_order_plate_model"; - - - public static final String ORDER_PARTS_REMARK_MODEL = "imes_order_parts_remark_model"; - - @Override public CommonResult getOrderPlan(Long machineId) { @@ -186,7 +178,7 @@ public class OrderPlanApiImpl implements OrderPlanApi{ public String getGoods(Long planId,String filed) { - List optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_REMAIN_PLATE_MODEL, 10); + List optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), 10); @@ -244,7 +236,7 @@ public class OrderPlanApiImpl implements OrderPlanApi{ List esData = new ArrayList<>(); - List optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_REMAIN_PLATE_MODEL, 99); + List optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), 99); for (OptimizeBoardModelDO optimizeBoardModelDO : optimizeBoardModelDOS) { List filedData = new ArrayList<>() ; @@ -317,7 +309,7 @@ public class OrderPlanApiImpl implements OrderPlanApi{ List plateIds = getPlateIds(planId); - List orderModelDOS = buildBoardByPlateIds(plateIds, ORDER_PLATE_MODEL, plateIds.size()); + List orderModelDOS = buildBoardByPlateIds(plateIds, ORDER_PLATE_MODEL.getIndex(), plateIds.size()); for (OrderModelDO orderModelDO : orderModelDOS) { @@ -425,7 +417,7 @@ public class OrderPlanApiImpl implements OrderPlanApi{ List esData = new ArrayList<>(); - List orderPartsRemarks = buildOrderPartsByOrderId(orderIds, ORDER_PARTS_REMARK_MODEL, partNum); + List orderPartsRemarks = buildOrderPartsByOrderId(orderIds, ORDER_PARTS_REMARK_MODEL.getIndex(), partNum); for (OrderPartsRemark orderPartsRemark : orderPartsRemarks) { diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/balancedetails/BalanceDetailsController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/balancedetails/BalanceDetailsController.java new file mode 100644 index 000000000..ed9a5fb14 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/balancedetails/BalanceDetailsController.java @@ -0,0 +1,73 @@ +package com.cf.imes.module.executor.controller.admin.funds.balancedetails; + + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.pojo.PageParam; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.framework.excel.core.util.ExcelUtils; +import com.cf.imes.framework.operatelog.core.annotations.OperateLog; +import com.cf.imes.module.executor.controller.admin.funds.balancedetails.vo.BalanceDetailsRespVO; +import com.cf.imes.module.executor.controller.admin.funds.balancedetails.vo.BalanceDetailsPageReqVO; +import com.cf.imes.module.executor.service.funds.balancedetails.BalanceDetailsService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + +import java.io.IOException; +import java.util.List; + +import static com.cf.imes.framework.common.pojo.CommonResult.success; +import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; + +/** + * @author 组织余额明细 + */ +@Tag(name = "管理后台 - 组织余额明细") +@RestController +@RequestMapping("/executor/balance") +@Validated +public class BalanceDetailsController { + + + @Resource + private BalanceDetailsService balanceDetailsService; + + + + @GetMapping("") + @Operation(summary = "获取组织余额明细") + public CommonResult> getBalanceDetailsPage(@Valid BalanceDetailsPageReqVO pageReqVO) { + + return success(balanceDetailsService.getBalanceDetailsPage(pageReqVO)); + + } + + + + + @GetMapping("/export") + @Operation(summary = "组织余额明细导出") + @OperateLog(type = EXPORT) + public void balanceDetailsExport(@Valid BalanceDetailsPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = balanceDetailsService.getBalanceDetailsPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "余额明细表.xls", "数据", BalanceDetailsRespVO.class, + BeanUtils.toBean(list, BalanceDetailsRespVO.class)); + + } + + + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/balancedetails/vo/BalanceDetailsPageReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/balancedetails/vo/BalanceDetailsPageReqVO.java new file mode 100644 index 000000000..1982807da --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/balancedetails/vo/BalanceDetailsPageReqVO.java @@ -0,0 +1,48 @@ +package com.cf.imes.module.executor.controller.admin.funds.balancedetails.vo; + + +import com.cf.imes.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; + +import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; + + +@Schema(description = "管理后台 - 组织余额明细分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@Builder +public class BalanceDetailsPageReqVO extends PageParam { + + + @Schema(description = "流水号") + private Long id; + + + @Schema(description = "组织名称") + private String organName; + + + @Schema(description = "交易类型") + private Integer tradeType; + + + @Schema(description = "收支类型") + private Integer incomeExpenseType; + + + @Schema(description = "创建时间", example = "[2022-07-01 ,2022-07-01]") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) + private LocalDate[] createTime; + + + @Schema(description = "组织ID") + private Long organId; + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/balancedetails/vo/BalanceDetailsRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/balancedetails/vo/BalanceDetailsRespVO.java new file mode 100644 index 000000000..e625d44c8 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/balancedetails/vo/BalanceDetailsRespVO.java @@ -0,0 +1,83 @@ +package com.cf.imes.module.executor.controller.admin.funds.balancedetails.vo; + + +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +public class BalanceDetailsRespVO { + + + @Schema(description = "流水号") + @ExcelProperty("流水号") + private Long businessNo; + + + @Schema(description = "交易类型,0充值 1软件购买") + @ExcelProperty("交易类型") + private Integer tradeType; + + + @Schema(description = "收支类型,0收入 1支出") + private Integer incomeExpenseType; + + + @Schema(description = "入账现金") + @ExcelProperty("入账现金") + private BigDecimal entryAmount; + + + @Schema(description = "入账赠送金") + @ExcelProperty("入账赠送金") + private BigDecimal entryGiftAmount; + + + @Schema(description = "支出现金") + @ExcelProperty("支出现金") + private BigDecimal expensesAmount; + + + @Schema(description = "支出赠送金") + @ExcelProperty("支出赠送金") + private BigDecimal expensesGiftAmount; + + + @Schema(description = "可用金额") + @ExcelProperty("可用金额") + private BigDecimal availableAmount; + + + @Schema(description = "现金金额") + @ExcelProperty("现金金额") + private BigDecimal amount; + + + @Schema(description = "赠送金额") + @ExcelProperty("赠送金额") + private BigDecimal giftAmount; + + + @Schema(description = "交易时间") + @ExcelProperty("交易时间") + private LocalDateTime createTime; + + + @Schema(description = "操作人") + @ExcelProperty("操作人") + private LocalDateTime creator; + + + @Schema(description = "支出/入账现金金额") + private BigDecimal cashAmountChange; + + + + @Schema(description = "支出/入账赠送金金额") + private BigDecimal bonusAmountChange; + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/bill/BillController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/bill/BillController.java new file mode 100644 index 000000000..f7ab55e31 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/bill/BillController.java @@ -0,0 +1,69 @@ +package com.cf.imes.module.executor.controller.admin.funds.bill; + + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.pojo.PageParam; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.excel.core.util.ExcelUtils; +import com.cf.imes.framework.operatelog.core.annotations.OperateLog; +import com.cf.imes.module.executor.controller.admin.funds.balancedetails.vo.BalanceDetailsPageReqVO; +import com.cf.imes.module.executor.controller.admin.funds.bill.vo.BillDetailsRespVO; +import com.cf.imes.module.executor.service.funds.bill.BillService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static com.cf.imes.framework.common.pojo.CommonResult.success; +import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; + +/** + * @author 账单/总额明细 + */ +@Tag(name = "管理后台 - 账单/总额明细") +@RestController +@RequestMapping("/executor/bill") +@Validated +public class BillController { + + + @Resource + private BillService billService; + + + + @GetMapping("") + @Operation(summary = "获取组织账单明细") + public CommonResult> getBillDetailsPage(@Valid BalanceDetailsPageReqVO pageReqVO) { + + return success(billService.getBillDetailsPage(pageReqVO)); + + } + + + + + @GetMapping("/export") + @Operation(summary = "组织账单明细下载") + @OperateLog(type = EXPORT) + public void billDetailsExport(@Valid BalanceDetailsPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = billService.getBillDetailsPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "余额明细表.xls", "数据", BillDetailsRespVO.class,list); + + } + + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/bill/vo/BillDetailsRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/bill/vo/BillDetailsRespVO.java new file mode 100644 index 000000000..70c28f5d8 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/bill/vo/BillDetailsRespVO.java @@ -0,0 +1,77 @@ +package com.cf.imes.module.executor.controller.admin.funds.bill.vo; + + +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +public class BillDetailsRespVO { + + + @Schema(description = "流水号") + @ExcelProperty("流水号") + private Long businessNo; + + + @Schema(description = "交易类型-枚举类-") + private Integer tradeType; + + + @Schema(description = "收支类型-枚举类") + private Integer incomeExpenseType; + + + + @Schema(description = "充值金额") + @ExcelProperty("充值金额") + private BigDecimal rechargeAmount; + + + @Schema(description = "产品金额") + @ExcelProperty("产品金额") + private BigDecimal productAmount; + + + + @Schema(description = "支出现金") + @ExcelProperty("支出现金") + private BigDecimal cashExpenditure; + + + + @Schema(description = "支出账户余额") + @ExcelProperty("支出账户余额") + private BigDecimal expenditureAccountBalance; + + + @Schema(description = "实际支出总费用") + @ExcelProperty("实际支出总费用") + private BigDecimal actualTotalExpenditure; + + + @Schema(description = "交易时间") + @ExcelProperty("交易时间") + private LocalDateTime createTime; + + + @Schema(description = "操作人") + @ExcelProperty("操作人") + private LocalDateTime creator; + + + @Schema(description = "支出/入账现金金额") + private BigDecimal cashAmountChange; + + + @Schema(description = "支出/入账赠送金金额") + private BigDecimal bonusAmountChange; + + + @Schema(description = "可用余额") + private BigDecimal availableAmount; + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/InvoiceController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/InvoiceController.java new file mode 100644 index 000000000..62ef2a4b6 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/InvoiceController.java @@ -0,0 +1,140 @@ +package com.cf.imes.module.executor.controller.admin.funds.invoice; + + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.operatelog.core.annotations.OperateLog; +import com.cf.imes.module.executor.controller.admin.funds.invoice.vo.*; +import com.cf.imes.module.executor.service.funds.invoice.InvoiceService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +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 static com.cf.imes.framework.common.pojo.CommonResult.success; +import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.IMPORT; + +/** + * @author 发票管理 + */ +@Tag(name = "管理后台 - 发票管理") +@RestController +@RequestMapping("/executor/invoice") +@Validated +public class InvoiceController { + + + @Resource + private InvoiceService invoiceService; + + + + @GetMapping("/{organId}") + @Operation(summary = "获取组织的开票金额信息") + @Parameter(name = "organId", description = "组织ID", required = true, example = "1") + public CommonResult getInvoiceAmount(@PathVariable("organId") Long organId) { + + return success(invoiceService.getInvoiceAmount(organId)); + + } + + + + + + @GetMapping("/details") + @Operation(summary = "获取组织可开票数据明细") + public CommonResult> getInvoiceDetails(@Valid InvoiceDetailsPageReqVO pageReqVO) { + + return success(invoiceService.getInvoiceDetails(pageReqVO)); + + } + + + + + + @GetMapping("/records") + @Operation(summary = "获取组织的开票记录") + public CommonResult> getInvoiceRecords(@Valid InvoiceDetailsPageReqVO pageReqVO) { + + return success(invoiceService.getInvoiceRecords(pageReqVO)); + + } + + + + + @GetMapping("/invoice") + @Parameter(name = "invoiceId", description = "发票ID", required = true) + @Operation(summary = "获取发票对应的购买记录和抬头信息") + public CommonResult getInvoiceIncome(@Valid @RequestParam("invoiceId") Long invoiceId) { + + return success(invoiceService.getInvoiceIncome(invoiceId)); + + } + + + + + + @PostMapping("") + @Operation(summary = "组织新增开票记录") + public CommonResult insetInvoiceRecords(@Valid @RequestBody InvoiceRecordsReqVO reqVO) { + + invoiceService.insetInvoiceRecords(reqVO); + + return success(Boolean.TRUE); + + } + + + + + + @PutMapping("") + @Operation(summary = "同意/拒绝开票") + public CommonResult invoicing(@Valid @RequestBody InvoiceInvoicingReqVO reqVO) { + + invoiceService.invoicing(reqVO); + + return success(Boolean.TRUE); + + } + + + + + @PostMapping("/upload") + @Operation(summary = "发票上传") + @Parameter(name = "invoiceId", description = "发票ID", required = true) + @OperateLog(type = IMPORT) + public CommonResult uploadInvoice(@RequestParam("file") MultipartFile file,@RequestParam("invoiceId") Long invoiceId) { + + invoiceService.uploadInvoice(file,invoiceId); + + return success(Boolean.TRUE); + + } + + + + + + @GetMapping("/download") + @Operation(summary = "发票文件下载") + @Parameter(name = "invoiceId", description = "发票ID", required = true) + public void downloadInvoice(@RequestParam("invoiceId") Long invoiceId, HttpServletResponse response) { + + invoiceService.downloadInvoice(invoiceId,response); + + } + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceAmountRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceAmountRespVO.java new file mode 100644 index 000000000..e0c693ca2 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceAmountRespVO.java @@ -0,0 +1,23 @@ +package com.cf.imes.module.executor.controller.admin.funds.invoice.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class InvoiceAmountRespVO { + + + @Schema(description = "可开票") + private BigDecimal invocable; + + + @Schema(description = "开票中") + private BigDecimal inTheInvoice; + + + @Schema(description = "已开票") + private BigDecimal invoiced; + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceDetailsPageReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceDetailsPageReqVO.java new file mode 100644 index 000000000..92a0a7f01 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceDetailsPageReqVO.java @@ -0,0 +1,61 @@ +package com.cf.imes.module.executor.controller.admin.funds.invoice.vo; + + +import com.cf.imes.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 组织可开票的数据明细 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@Builder +public class InvoiceDetailsPageReqVO extends PageParam { + + + @Schema(description = "组织ID") + private Long organId; + + + @Schema(description = "发票号") + private String invoiceNo; + + + @Schema(description = "发票状态,1待开票 2已开票 3开票失败") + private Integer status; + + + @Schema(description = "申请人") + private String creator; + + + @Schema(description = "开票人") + private String invoicePerson; + + + @Schema(description = "发票金额") + private BigDecimal[] invoiceAmount; + + + @Schema(description = "开票时间", example = "[2022-07-01 01:01:01 ,2022-07-01 01:01:01]") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] invoiceTime; + + + @Schema(description = "交易时间", example = "[2022-07-01 01:01:01 ,2022-07-01 01:01:01]") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + + @Schema(description = "交易金额") + private BigDecimal[] amount; + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceDetailsRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceDetailsRespVO.java new file mode 100644 index 000000000..02f23b00b --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceDetailsRespVO.java @@ -0,0 +1,28 @@ +package com.cf.imes.module.executor.controller.admin.funds.invoice.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class InvoiceDetailsRespVO { + + + @Schema(description = "发票对应的购买记录") + private List invoicePurchaseRecords; + + + @Schema(description = "发票抬头信息") + private InvoiceTitleInfo invoiceTitleInfo; + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceFilePath.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceFilePath.java new file mode 100644 index 000000000..06636f567 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceFilePath.java @@ -0,0 +1,17 @@ +package com.cf.imes.module.executor.controller.admin.funds.invoice.vo; + + +import lombok.Data; +import lombok.Getter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +@Getter +@Data +public class InvoiceFilePath { + + @Value("${invoice.filepath}") + private String filePath; + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceInvoicingReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceInvoicingReqVO.java new file mode 100644 index 000000000..9b947e4b9 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceInvoicingReqVO.java @@ -0,0 +1,31 @@ +package com.cf.imes.module.executor.controller.admin.funds.invoice.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class InvoiceInvoicingReqVO { + + + @Schema(description = "发票抬头ID") + private Long id; + + + @Schema(description = "是否开票") + private Boolean isInvoicing; + + + @Schema(description = "发票号") + private String invoiceNo; + + + @Schema(description = "发票附件") + private String invoiceAttachmentPath; + + + @Schema(description = "备注") + private String remark; + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoicePurchaseRecord.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoicePurchaseRecord.java new file mode 100644 index 000000000..0489bc99b --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoicePurchaseRecord.java @@ -0,0 +1,38 @@ +package com.cf.imes.module.executor.controller.admin.funds.invoice.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + + +@Data +public class InvoicePurchaseRecord { + + + @Schema(description = "流水号") + private Long businessNo; + + + @Schema(description = "购买记录ID") + private Long purchaseRecordId; + + + @Schema(description = "产品名称") + private String productName; + + + @Schema(description = "交易类型") + private Integer tradeType; + + + @Schema(description = "可开票金额") + private BigDecimal rechargeAmount; + + + @Schema(description = "交易时间") + private LocalDateTime createTime; + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceRecordsReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceRecordsReqVO.java new file mode 100644 index 000000000..c17df0af4 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceRecordsReqVO.java @@ -0,0 +1,27 @@ +package com.cf.imes.module.executor.controller.admin.funds.invoice.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + + +@Data +public class InvoiceRecordsReqVO { + + + @Schema(description = "购买记录ID") + private List purchaseRecordId; + + + @Schema(description = "发票金额") + private BigDecimal invoiceAmount; + + + @Schema(description = "发票抬头ID") + private Long invoiceTitleId; + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceRecordsRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceRecordsRespVO.java new file mode 100644 index 000000000..5ff8627f5 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceRecordsRespVO.java @@ -0,0 +1,66 @@ +package com.cf.imes.module.executor.controller.admin.funds.invoice.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +public class InvoiceRecordsRespVO { + + + @Schema(description = "发票ID") + private Long id; + + + @Schema(description = "组织ID") + private Long organId; + + + @Schema(description = "组织名称") + private String organName; + + + @Schema(description = "发票申请人ID") + private Long userId; + + + @Schema(description = "发票申请人名称") + private String creator; + + + @Schema(description = "发票号") + private String invoiceNo; + + + @Schema(description = "发票金额") + private BigDecimal invoiceAmount; + + + @Schema(description = "发票状态,1待开票 2已开票 3开票失败") + private Integer status; + + + @Schema(description = "发票附件保存路径") + private String invoiceAttachmentPath; + + + @Schema(description = "开票人") + private String invoicePerson; + + + @Schema(description = "开票人用户ID") + private Long invoicePersonId; + + + @Schema(description = "开票时间") + private LocalDateTime invoiceTime; + + + @Schema(description = "备注") + private String remark; + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceTitleInfo.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceTitleInfo.java new file mode 100644 index 000000000..023a80ca1 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/invoice/vo/InvoiceTitleInfo.java @@ -0,0 +1,55 @@ +package com.cf.imes.module.executor.controller.admin.funds.invoice.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class InvoiceTitleInfo { + + + @Schema(description = "发票抬头ID") + private Long id; + + + @Schema(description = "组织ID") + private Long organId; + + + @Schema(description = "发票抬头") + private String invoiceTitle; + + + @Schema(description = "开具类型,0企业 1个人") + private Integer issueType; + + + @Schema(description = "发票类型,0增值税普通发票 1增值税专用发票") + private Integer invoiceType; + + + @Schema(description = "纳税人识别号") + private String taxpayerId; + + + @Schema(description = "开户银行名称") + private String bankName; + + + @Schema(description = "开户银行账号") + private String bankAccount; + + + @Schema(description = "注册场所地址") + private String registeredAddress; + + + @Schema(description = "注册固定电话") + private String fixedPhone; + + + @Schema(description = "邮箱") + private String email; + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/purchase/PurchaseController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/purchase/PurchaseController.java new file mode 100644 index 000000000..6cfc67b74 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/purchase/PurchaseController.java @@ -0,0 +1,69 @@ +package com.cf.imes.module.executor.controller.admin.funds.purchase; + + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.pojo.PageParam; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.excel.core.util.ExcelUtils; +import com.cf.imes.framework.operatelog.core.annotations.OperateLog; +import com.cf.imes.module.executor.controller.admin.funds.purchase.vo.PurchaseRecordPageReqVO; +import com.cf.imes.module.executor.controller.admin.funds.purchase.vo.PurchaseRecordRespVO; +import com.cf.imes.module.executor.service.funds.purchase.PurchaseService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static com.cf.imes.framework.common.pojo.CommonResult.success; +import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; + +/** + * @author 软件购买 + */ +@Tag(name = "管理后台 - 软件购买") +@RestController +@RequestMapping("/executor/purchase") +@Validated +public class PurchaseController { + + + @Resource + private PurchaseService purchaseService; + + + @GetMapping("") + @Operation(summary = "获取软件的购买记录") + public CommonResult> getPurchaseRecord(@Valid PurchaseRecordPageReqVO pageReqVO) { + + return success(purchaseService.getPurchaseRecord(pageReqVO)); + + } + + + + + + @GetMapping("/export") + @Operation(summary = "导出软件购买记录") + @OperateLog(type = EXPORT) + public void billDetailsExport(@Valid PurchaseRecordPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = purchaseService.getPurchaseRecord(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "软件购买记录表.xls", "数据", PurchaseRecordRespVO.class, list); + + } + + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/purchase/vo/PurchaseRecordPageReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/purchase/vo/PurchaseRecordPageReqVO.java new file mode 100644 index 000000000..51dd20eca --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/purchase/vo/PurchaseRecordPageReqVO.java @@ -0,0 +1,45 @@ +package com.cf.imes.module.executor.controller.admin.funds.purchase.vo; + + +import com.cf.imes.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 组织购买记录明细 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@Builder +public class PurchaseRecordPageReqVO extends PageParam { + + + @Schema(description = "组织ID") + private Long organId; + + + @Schema(description = "产品名称") + private String productName; + + + @Schema(description = "购买月数") + private Integer purchaseMonths; + + + @Schema(description = "购买时间", example = "[2022-07-01 01:01:01 ,2022-07-01 01:01:01]") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + + @Schema(description = "操作人") + private String creator; + + + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/purchase/vo/PurchaseRecordRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/purchase/vo/PurchaseRecordRespVO.java new file mode 100644 index 000000000..107c5069c --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/funds/purchase/vo/PurchaseRecordRespVO.java @@ -0,0 +1,87 @@ +package com.cf.imes.module.executor.controller.admin.funds.purchase.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + + +@Data +public class PurchaseRecordRespVO { + + + @Schema(description = "购买记录ID") + private Long id; + + + @Schema(description = "组织ID") + private Long organId; + + + @Schema(description = "产品ID") + private Long productId; + + + @Schema(description = "产品明细ID") + private Long productDetailsId; + + + @Schema(description = "产品名称") + private String productName; + + + @Schema(description = "购买月数") + private Integer purchaseMonths; + + + @Schema(description = "赠送月数") + private Integer giftMonths; + + + @Schema(description = "支付方式") + private Integer paymentMethod; + + + @Schema(description = "订单总额") + private BigDecimal totalAmount; + + + @Schema(description = "现金余额支出") + private BigDecimal accountBalanceSpent; + + + @Schema(description = "支付宝支出") + private BigDecimal alipaySpent; + + + @Schema(description = "微信支出") + private BigDecimal wechatSpent; + + + @Schema(description = "赠送金") + private BigDecimal giftMoneySpent; + + + @Schema(description = "货币类型") + private Integer currency; + + + @Schema(description = "货币单位") + private String currencyUnit; + + + @Schema(description = "是否开票") + private Integer isInvocing; + + + @Schema(description = "购买时间") + private LocalDateTime createTime; + + + @Schema(description = "操作人") + private String creator; + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java index ea5ab814b..e78de2978 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java @@ -59,6 +59,7 @@ import static com.cf.imes.framework.common.pojo.CommonResult.error; import static com.cf.imes.framework.common.pojo.CommonResult.success; import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.IMPORT; +import static com.cf.imes.module.executor.enums.EsIndexEnum.*; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*; @@ -114,10 +115,6 @@ public class OrderController { private String errKey = "生产数据导入异常,{}"; - public static final String ORDER_PLATE_MODEL = "imes_order_plate_model"; -// public static final String ORDER_PLATE_MODEL_COMPRESS = "imes_order_plate_model_compress"; - public static final String ORDER_PARTS_REMARK_MODEL = "imes_order_parts_remark_model"; - @PostMapping("/create") @@ -254,9 +251,8 @@ public class OrderController { // 进行判断,为空,写入时出现了错误,数据库数据回滚,此时删除 ES 里的数据 OrderDO orderDO = orderMapper.selectById(orderId); if (orderDO == null) { - orderInputProcessor.deleteByOrderId(orderId, ORDER_PLATE_MODEL); -// orderInputProcessor.deleteByOrderId(orderId, ORDER_PLATE_MODEL_COMPRESS); - orderInputProcessor.deleteByOrderId(orderId, ORDER_PARTS_REMARK_MODEL); + orderInputProcessor.deleteByOrderId(orderId, ORDER_PLATE_MODEL.getIndex()); + orderInputProcessor.deleteByOrderId(orderId, ORDER_PARTS_REMARK_MODEL.getIndex()); } Throwable cause = e.getCause(); @@ -406,9 +402,8 @@ public class OrderController { // 进行判断,为空,写入时出现了错误,数据库数据回滚,此时删除 ES 里的数据 if (ObjectUtil.isNotNull(orderDO) && ObjectUtil.isNotNull(orderMapper.selectById(orderDO.getId()))) { Long deleteOrderId = orderDO.getId(); - orderInputProcessor.deleteByOrderId(deleteOrderId, ORDER_PLATE_MODEL); -// orderInputProcessor.deleteByOrderId(deleteOrderId, ORDER_PLATE_MODEL_COMPRESS); - orderInputProcessor.deleteByOrderId(deleteOrderId, ORDER_PARTS_REMARK_MODEL); + orderInputProcessor.deleteByOrderId(deleteOrderId, ORDER_PLATE_MODEL.getIndex()); + orderInputProcessor.deleteByOrderId(deleteOrderId, ORDER_PARTS_REMARK_MODEL.getIndex()); } } finally { diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/OptimizePlanController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/OptimizePlanController.java index f58fa14c5..e6e44e0de 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/OptimizePlanController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/OptimizePlanController.java @@ -18,7 +18,6 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; -import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.List; import java.util.Map; @@ -53,31 +52,6 @@ public class OptimizePlanController { } - @GetMapping("commit") - @Operation(summary = "开始开料") - @Parameter(name = "planId", description = "排单ID", required = true) - @Parameter(name = "goodsNo", description = "开料的大板编号", required = true) - @PreAuthorize("@ss.hasPermission('placeorder:optimize')") - public CommonResult commit(@RequestParam("planId") @NotNull(message = "排单ID不能为空") Long planId, - @RequestParam("goodsId") @NotNull(message = "实际开料的大板ID不能为空") String goodsId, - @RequestParam("planConfigId") @NotNull(message = "方案组的配置项ID") Long planConfigId, - @RequestParam("goodsNo") @NotEmpty(message = "排单异常,请重新优化或重新进入排单") List goodsNo) { - - return CommonResult.success(optimizePlanService.commit(planId,goodsId,planConfigId,goodsNo)); - } - - @GetMapping("/endCutting") - @Operation(summary = "结束开料") - @Parameter(name = "planId", description = "排单ID", required = true) - @Parameter(name = "planConfigId", description = "方案组的配置项ID", required = true) - @Parameter(name = "goodsNo", description = "开料的大板编号", required = true) - @PreAuthorize("@ss.hasPermission('placeorder:optimize')") - public CommonResult endCutting(@RequestParam("planId") @NotNull(message = "排单ID不能为空") Long planId, - @RequestParam("goodsId") @NotNull(message = "实际开料的大板ID不能为空") String goodsId, - @RequestParam("planConfigId") @NotNull(message = "方案组的配置项ID不能为空") Long planConfigId, - @RequestParam("goodsNo") @NotEmpty(message = "排单异常,请重新优化或重新进入排单") List goodsNo) { - return success(optimizePlanService.endCutting(planId,goodsId,goodsNo,planConfigId)); - } @PutMapping("/updateCuttingStatus") diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlanSaveReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlanSaveReqVO.java index 22c36ac99..1f808691b 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlanSaveReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/PlanSaveReqVO.java @@ -1,6 +1,7 @@ package com.cf.imes.module.executor.controller.admin.plan.vo; import com.cf.imes.module.executor.controller.admin.plate.vo.OrderPlateIds; +import com.cf.imes.module.executor.dal.dataobject.goods.PlanActualGoodsModelDO; import com.cf.imes.module.executor.validation.plan.PlanStatusValid; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -39,6 +40,10 @@ public class PlanSaveReqVO { private List insertOrderPlateIds; + @Schema(description = "添加小板时选择的实际的大板信息") + private PlanActualGoodsModelDO planActualGoodsModelDO; + + @Schema(description = "去除的小板ID") private List deleteOrderPlateIds; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/SavePlanPlateList.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/SavePlanPlateList.java index 658c45859..d9e54b662 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/SavePlanPlateList.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/SavePlanPlateList.java @@ -21,6 +21,10 @@ public class SavePlanPlateList { private MixConfig mixConfig; + @Schema(description = "排单ID") + private Long planId; + + @Schema(description = "小板的信息列表",requiredMode = Schema.RequiredMode.REQUIRED) @Valid private List plateItemList; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/NoPlanPlatePageReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/NoPlanPlatePageReqVO.java index 84402a795..972c3f03e 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/NoPlanPlatePageReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/NoPlanPlatePageReqVO.java @@ -30,12 +30,22 @@ public class NoPlanPlatePageReqVO extends PageParam { private Long planId; + @Schema(description = "是否开启混单,true 开启 false 关闭") + private Boolean isMixed; + + + @Schema(description = "混单方式 1 相同材质和厚度 2 相同厚度") + private Integer mixedType; + + @Schema(description = "板编号") private String plateNo; + @Schema(description = "大板") private List goodsIdList; + @Schema(description = "板号-小板ID") private String plateId; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderPlateIds.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderPlateIds.java index 3ae5c3e9c..a57aeea0f 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderPlateIds.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderPlateIds.java @@ -27,4 +27,7 @@ public class OrderPlateIds { private Long planId; + @Schema(description = "添加小板选择的混单方式 1 相同材质和厚度 2 相同厚度") + private Integer mixedType; + } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/funds/balancedetails/IncomeExpenseDetailsDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/funds/balancedetails/IncomeExpenseDetailsDO.java new file mode 100644 index 000000000..af56cc4f3 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/funds/balancedetails/IncomeExpenseDetailsDO.java @@ -0,0 +1,120 @@ +package com.cf.imes.module.executor.dal.dataobject.funds.balancedetails; + + +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; +import lombok.*; + +import java.math.BigDecimal; + +/** + * @author 收支明细表 + */ +@TableName("income_expense_details") +@KeySequence("income_expense_details_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class IncomeExpenseDetailsDO extends BaseDO { + + /** + * 主键 + */ + @TableId + private Long id; + + + /** + * 流水号 + */ + private String businessNo; + + + /** + * 组织ID + */ + private Long organId; + + + /** + * 充值-赠送金规则表 + */ + private Long giftMoneyId; + + + /** + * 购买-购买记录id + */ + private Long purchaseId; + + + /** + * 用户ID + */ + private Long userId; + + + /** + * 交易类型 + */ + private Integer tradeType; + + + /** + * 收支类型 + */ + private Integer incomeExpenseType; + + + /** + * 支出/入账现金金额 + */ + private BigDecimal cashAmountChange; + + + /** + * 支出/入账赠送金金额 + */ + private BigDecimal bonusAmountChange; + + + /** + * 可用余额 + */ + private BigDecimal availableAmount; + + + + /** + * 现金金额 + */ + private BigDecimal amount; + + + /** + * 赠送金额 + */ + private BigDecimal giftAmount; + + + /** + * 货币类型 + */ + private Integer currency; + + + /** + * 货币单位 + */ + private String currencyUnit; + + + + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/funds/invoice/InvoiceRecordsDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/funds/invoice/InvoiceRecordsDO.java new file mode 100644 index 000000000..1165f3bbf --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/funds/invoice/InvoiceRecordsDO.java @@ -0,0 +1,117 @@ +package com.cf.imes.module.executor.dal.dataobject.funds.invoice; + + +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; +import lombok.*; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author 开票记录表 + */ +@TableName("invoice_records") +@KeySequence("invoice_records_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class InvoiceRecordsDO extends BaseDO { + + /** + * 主键 + */ + @TableId + private Long id; + + + /** + * 组织ID + */ + private Long organId; + + + /** + * 组织/发票抬头名称 + */ + private String organName; + + + /** + * 用户ID-发票申请人ID + */ + private Long userId; + + + /** + * 发票号 + */ + private String invoiceNo; + + + /** + * 购买记录单号 + */ + private String purchaseIds; + + + /** + * 发票金额 + */ + private BigDecimal invoiceAmount; + + + /** + * 发票状态,1待开票 2已开票 3开票失败 + */ + private Integer status; + + + /** + * 发票附件保存路径 + */ + private String invoiceAttachmentPath; + + + /** + * 开票人 + */ + private String invoicePerson; + + + /** + * 开票人用户ID + */ + private Long invoicePersonId; + + + /** + * 开票时间 + */ + private LocalDateTime invoiceTime; + + + + /** + * 抬头ID + */ + private Long invoiceTitleId; + + + /** + * 抬头 + */ + private String invoiceTitleInfo; + + + /** + * 备注 + */ + private String remark; + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/funds/purchase/PurchaseRecordDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/funds/purchase/PurchaseRecordDO.java new file mode 100644 index 000000000..de966043d --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/funds/purchase/PurchaseRecordDO.java @@ -0,0 +1,153 @@ +package com.cf.imes.module.executor.dal.dataobject.funds.purchase; + + +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; +import lombok.*; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + + +/** + * @author 购买记录表 + */ +@TableName("purchase_record") +@KeySequence("purchase_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PurchaseRecordDO extends BaseDO { + + + /** + * 主键 + */ + @TableId + private Long id; + + + /** + * 组织ID + */ + private Long organId; + + + /** + * 用户ID-发票申请人ID + */ + private Long userId; + + + /** + * 用户姓名 + */ + private Long userName; + + + /** + * 产品ID + */ + private Long productId; + + + /** + * 产品明细ID + */ + private Long productDetailsId; + + + /** + * 产品名称 + */ + private String productName; + + + /** + * 购买月数 + */ + private Integer purchaseMonths; + + + /** + * 赠送月数 + */ + private Integer giftMonths; + + + /** + * 产品开始时间 + */ + private LocalDateTime startTime; + + + /** + * 产品结束时间 + */ + private LocalDateTime endTime; + + + /** + * 支付方式 + */ + private Integer paymentMethod; + + + /** + * 订单总额 + */ + private BigDecimal totalAmount; + + + /** + * 现金余额支出 + */ + private BigDecimal accountBalanceSpent; + + + /** + * 支付宝支出 + */ + private BigDecimal alipaySpent; + + + /** + * 微信支出 + */ + private BigDecimal wechatSpent; + + + + /** + * 赠送金 + */ + private BigDecimal giftMoneySpent; + + + + /** + * 货币类型 + */ + private Integer currency; + + + + /** + * 货币单位 + */ + private String currencyUnit; + + + + /** + * 是否开票 + */ + private Integer isInvocing; + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/funds/balancedetails/IncomeExpenseDetailsMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/funds/balancedetails/IncomeExpenseDetailsMapper.java new file mode 100644 index 000000000..f7f1a48c2 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/funds/balancedetails/IncomeExpenseDetailsMapper.java @@ -0,0 +1,39 @@ +package com.cf.imes.module.executor.dal.mysql.funds.balancedetails; + + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.executor.controller.admin.funds.balancedetails.vo.BalanceDetailsPageReqVO; +import com.cf.imes.module.executor.controller.admin.funds.invoice.vo.InvoiceDetailsRespVO; +import com.cf.imes.module.executor.dal.dataobject.funds.balancedetails.IncomeExpenseDetailsDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface IncomeExpenseDetailsMapper extends BaseMapperX { + + + + default PageResult selectDetailsPage(BalanceDetailsPageReqVO pageReqVO,List organIds) { + return selectPage(pageReqVO, new LambdaQueryWrapperX() + .eqIfPresent(IncomeExpenseDetailsDO::getOrganId, pageReqVO.getOrganId()) + .inIfPresent(IncomeExpenseDetailsDO::getOrganId,organIds) + .eq(IncomeExpenseDetailsDO::getDeleted, false) + .likeIfPresent(IncomeExpenseDetailsDO::getId,pageReqVO.getId() == null ? "" : String.valueOf(pageReqVO.getId())) + .eqIfPresent(IncomeExpenseDetailsDO::getTradeType,pageReqVO.getTradeType()) + .eqIfPresent(IncomeExpenseDetailsDO::getIncomeExpenseType,pageReqVO.getIncomeExpenseType()) + .betweenIfPresent(IncomeExpenseDetailsDO::getCreateTime,pageReqVO.getCreateTime())); + + } + + + IPage selectOrganInvoicable(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper wrapper); + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/funds/invoice/InvoiceRecordsMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/funds/invoice/InvoiceRecordsMapper.java new file mode 100644 index 000000000..dc0295a7a --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/funds/invoice/InvoiceRecordsMapper.java @@ -0,0 +1,37 @@ +package com.cf.imes.module.executor.dal.mysql.funds.invoice; + + +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.executor.controller.admin.funds.invoice.vo.InvoiceDetailsPageReqVO; +import com.cf.imes.module.executor.dal.dataobject.funds.invoice.InvoiceRecordsDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.math.BigDecimal; + + +@Mapper +public interface InvoiceRecordsMapper extends BaseMapperX { + + + default PageResult selectInvoiceRecordsPage(InvoiceDetailsPageReqVO pageReqVO) { + return selectPage(pageReqVO, new LambdaQueryWrapperX() + .eq(InvoiceRecordsDO::getDeleted,false) + .eqIfPresent(InvoiceRecordsDO::getOrganId,pageReqVO.getOrganId()) + .likeIfPresent(InvoiceRecordsDO::getInvoiceNo,pageReqVO.getInvoiceNo()) + .eqIfPresent(InvoiceRecordsDO::getStatus,pageReqVO.getStatus()) + .likeIfPresent(InvoiceRecordsDO::getCreator,pageReqVO.getCreator()) + .likeIfPresent(InvoiceRecordsDO::getInvoicePerson,pageReqVO.getInvoicePerson()) + .betweenIfPresent(InvoiceRecordsDO::getInvoiceAmount,pageReqVO.getInvoiceAmount()) + .betweenIfPresent(InvoiceRecordsDO::getCreateTime,pageReqVO.getCreateTime()) + .betweenIfPresent(InvoiceRecordsDO::getInvoiceTime,pageReqVO.getInvoiceTime())); + } + + + + BigDecimal selectToExamineAmount(@Param("status") Integer status); + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/funds/purchase/PurchaseRecordMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/funds/purchase/PurchaseRecordMapper.java new file mode 100644 index 000000000..9500867d3 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/funds/purchase/PurchaseRecordMapper.java @@ -0,0 +1,37 @@ +package com.cf.imes.module.executor.dal.mysql.funds.purchase; + + +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.executor.controller.admin.funds.invoice.vo.InvoiceAmountRespVO; +import com.cf.imes.module.executor.controller.admin.funds.invoice.vo.InvoicePurchaseRecord; +import com.cf.imes.module.executor.controller.admin.funds.purchase.vo.PurchaseRecordPageReqVO; +import com.cf.imes.module.executor.dal.dataobject.funds.purchase.PurchaseRecordDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface PurchaseRecordMapper extends BaseMapperX { + + + InvoiceAmountRespVO selectOrganInvoice(@Param("organId") Long organId); + + + + default PageResult selectPage(PurchaseRecordPageReqVO pageReqVO) { + return selectPage(pageReqVO, new LambdaQueryWrapperX() + .eq(PurchaseRecordDO::getDeleted,false) + .eqIfPresent(PurchaseRecordDO::getOrganId,pageReqVO.getOrganId()) + .likeIfPresent(PurchaseRecordDO::getProductName,pageReqVO.getProductName()) + .eqIfPresent(PurchaseRecordDO::getPurchaseMonths,pageReqVO.getPurchaseMonths()) + .betweenIfPresent(PurchaseRecordDO::getCreateTime,pageReqVO.getCreateTime()) + .likeIfPresent(PurchaseRecordDO::getCreator,pageReqVO.getCreator())); + + } + + List selectPurchaseRecord(@Param("purchaseIdList") List purchaseIdList, @Param("organId") Long organId); + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plan/PlanMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plan/PlanMapper.java index 8304e350b..22db8c44a 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plan/PlanMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plan/PlanMapper.java @@ -31,49 +31,6 @@ public interface PlanMapper extends BaseMapperX { IPage selectPlanPageList(@Param("page") IPage page,@Param(Constants.WRAPPER) Wrapper wrapper); -// default PageResult selectPage(PlanPageReqVO reqVO) { -// if(StringUtils.isNotBlank(reqVO.getCustomer())) { -// return selectJoinPage(reqVO, PlanDO.class, new MPJLambdaWrapperX() -// .eq(PlanDO::getDeleted,false) -// .eq(PlanDO::getOrganId,getUserOrganId()) -// .eqIfPresent(PlanDO::getIsScheduled,reqVO.getIsScheduled()) -// .eqIfPresent(PlanDO::getId, reqVO.getId()) -// .eqIfPresent(PlanDO::getSort, reqVO.getSort()) -// .eqIfPresent(PlanDO::getType, reqVO.getType()) -// .inIfPresent(PlanDO::getStatus, reqVO.getStatus()) -// .eqIfPresent(PlanDO::getMachineId, reqVO.getMachineId()) -// .betweenIfPresent(PlanDO::getPlanTime, reqVO.getPlanTime()) -// .likeIfPresent(PlanDO::getOrderNos, reqVO.getOrderNos()) -// .eqIfPresent(PlanDO::getRemark, reqVO.getRemark()) -// .betweenIfPresent(PlanDO::getCreateTime, reqVO.getCreateTime()) -// .eqIfPresent(PlanDO::getOperator, reqVO.getOperator()) -// .betweenIfPresent(PlanDO::getProduceTime, reqVO.getProduceTime()) -// .leftJoin(PlanItemDO.class, PlanItemDO::getPlanId, PlanDO::getId) -// .leftJoin(OrderDO.class, OrderDO::getId, PlanItemDO::getOrderId) -// .like(OrderDO::getCustomer, reqVO.getCustomer()) -// .orderByDesc(PlanDO::getCreateTime) -// .distinct() -// ); -// } -// -// return selectPage(reqVO, new LambdaQueryWrapperX() -// .eq(PlanDO::getDeleted,false) -// .eq(PlanDO::getOrganId,getUserOrganId()) -// .eqIfPresent(PlanDO::getIsScheduled,reqVO.getIsScheduled()) -// .eqIfPresent(PlanDO::getId, reqVO.getId()) -// .eqIfPresent(PlanDO::getSort, reqVO.getSort()) -// .eqIfPresent(PlanDO::getType, reqVO.getType()) -// .inIfPresent(PlanDO::getStatus, reqVO.getStatus()) -// .eqIfPresent(PlanDO::getMachineId, reqVO.getMachineId()) -// .betweenIfPresent(PlanDO::getPlanTime, reqVO.getPlanTime()) -// .likeIfPresent(PlanDO::getOrderNos, reqVO.getOrderNos()) -// .eqIfPresent(PlanDO::getRemark, reqVO.getRemark()) -// .betweenIfPresent(PlanDO::getCreateTime, reqVO.getCreateTime()) -// .eqIfPresent(PlanDO::getOperator, reqVO.getOperator()) -// .betweenIfPresent(PlanDO::getProduceTime, reqVO.getProduceTime()) -// .orderByDesc(PlanDO::getCreateTime)); -// } - List selectPlateListByPlanId(@Param("planId") Long planId, @Param("organId") Long organId); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/planitem/PlanItemMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/planitem/PlanItemMapper.java index ad5f215d9..57027a9fe 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/planitem/PlanItemMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/planitem/PlanItemMapper.java @@ -99,4 +99,6 @@ public interface PlanItemMapper extends BaseMapperX { List selectLabelOrderPlateDataByPlanId(@Param("planId") Long planId, @Param("organId") Long organId); + List selectPlanGoodsList(@Param("planId") Long planId, @Param("organId") Long organId); + } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java index 1600aabd7..1e49d2a26 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java @@ -25,6 +25,7 @@ import com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.math.BigDecimal; import java.util.Arrays; @@ -127,16 +128,10 @@ public interface PlateMapper extends BaseMapperX { void deletedById(@Param("plateIds") List plateIds, @Param("organId") Long organId); - default List selectPlateNum(List orderId, Long organId) { - return selectList(new LambdaQueryWrapperX() - .eq(PlateDO::getOrganId,organId) - .eq(PlateDO::getDeleted,false) - .in(PlateDO::getOrderId, orderId) - .select(PlateDO::getId)); + @Select("select count(id) from order_plate where organ_id = #{organId} and deleted = false and order_id = #{orderId}") + Integer selectPlateNum(@Param("orderId") Long orderId,@Param("organId") Long organId); - } - default List selectPlateDeletedStatus(Long orderId,List goodsIds, Long organId) { return selectList(new LambdaQueryWrapperX() .eq(PlateDO::getOrganId,organId) @@ -179,7 +174,7 @@ public interface PlateMapper extends BaseMapperX { - List selectPlateListByGoodsIds(@Param("orderIds") List orderIds, @Param("organId") Long organId); + List selectPlateListByGoodsIds(@Param("orderId") Long orderId, @Param("organId") Long organId); List selectNoPlanPlate(@Param("orderIds") List orderIds, @Param("ids") List ids, @Param("organId") Long organId); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/IncomeExpenseTypeEnum.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/IncomeExpenseTypeEnum.java new file mode 100644 index 000000000..c1eb98a10 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/IncomeExpenseTypeEnum.java @@ -0,0 +1,51 @@ +package com.cf.imes.module.executor.enums.amount; + + +import cn.hutool.core.util.ObjectUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author 交易类型枚举类 + */ + +@Getter +@AllArgsConstructor +public enum IncomeExpenseTypeEnum { + + /** + * 收入 + */ + INCOME(0, "收入"), + /** + * 支出 + */ + EXPENSES(1, "支出"); + + + + /** + * 类型 + */ + private final Integer type; + + /** + * 名称 + */ + private final String name; + + + + public static IncomeExpenseTypeEnum fromType(Integer type) { + if (type == null) { + return null; + } + for (IncomeExpenseTypeEnum value : values()) { + if (ObjectUtil.equal(value.getType(), type)) { + return value; + } + } + return null; + } + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/InvoiceStatusEnum.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/InvoiceStatusEnum.java new file mode 100644 index 000000000..8afe30fc1 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/InvoiceStatusEnum.java @@ -0,0 +1,63 @@ +package com.cf.imes.module.executor.enums.amount; + + +import cn.hutool.core.util.ObjectUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author 发票状态枚举类型 + */ + +@Getter +@AllArgsConstructor +public enum InvoiceStatusEnum { + + + /** + * 可开票 + */ + INVOICABLE(0, "可开票"), + /** + * 待开票 + */ + PENDINGINVOICING(1, "待开票"), + /** + * 已开票 + */ + INVOICINGSUCCESSFUL(2,"已开票"), + /** + * 开票失败 + */ + INVOICINGFAILED(3,"开票失败"); + + + + /** + * 状态 + */ + private final Integer status; + + /** + * 名称 + */ + private final String name; + + + + public static InvoiceStatusEnum fromType(Integer status) { + if (status == null) { + return null; + } + for (InvoiceStatusEnum value : values()) { + if (ObjectUtil.equal(value.getStatus(), status)) { + return value; + } + } + return null; + } + + + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/InvoiceTypeEnum.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/InvoiceTypeEnum.java new file mode 100644 index 000000000..6b0bf2a4b --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/InvoiceTypeEnum.java @@ -0,0 +1,36 @@ +package com.cf.imes.module.executor.enums.amount; + + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author 发票类型枚举类 + */ +@Getter +@AllArgsConstructor +public enum InvoiceTypeEnum { + + /** + * 增值税普通发票 + */ + INCOME(0, "增值税普通发票"), + /** + * 增值税专用发票 + */ + EXPENSES(1, "增值税专用发票"); + + + + /** + * 类型 + */ + private final Integer type; + + /** + * 名称 + */ + private final String name; + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/IssueTypeEnum.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/IssueTypeEnum.java new file mode 100644 index 000000000..5792ce141 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/IssueTypeEnum.java @@ -0,0 +1,39 @@ +package com.cf.imes.module.executor.enums.amount; + + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author 发票开具类型枚举类 + */ + +@Getter +@AllArgsConstructor +public enum IssueTypeEnum { + + /** + * 企业 + */ + INCOME(0, "企业"), + /** + * 个人 + */ + EXPENSES(1, "个人"); + + + + /** + * 类型 + */ + private final Integer type; + + /** + * 名称 + */ + private final String name; + + + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/TradeTypeEnum.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/TradeTypeEnum.java new file mode 100644 index 000000000..b5472a3f9 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/amount/TradeTypeEnum.java @@ -0,0 +1,52 @@ +package com.cf.imes.module.executor.enums.amount; + + +import cn.hutool.core.util.ObjectUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author 交易类型枚举类 + */ + +@Getter +@AllArgsConstructor +public enum TradeTypeEnum { + + + /** + * 充值 + */ + INCOME(0, "充值"), + /** + * 软件购买 + */ + EXPENSES(1, "软件购买"); + + + + /** + * 类型 + */ + private final Integer type; + + /** + * 名称 + */ + private final String name; + + + + public static TradeTypeEnum fromType(Integer type) { + if (type == null) { + return null; + } + for (TradeTypeEnum value : values()) { + if (ObjectUtil.equal(value.getType(), type)) { + return value; + } + } + return null; + } + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/framework/rpc/config/RpcConfiguration.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/framework/rpc/config/RpcConfiguration.java index 5b1777709..a5b5d52ad 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/framework/rpc/config/RpcConfiguration.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/framework/rpc/config/RpcConfiguration.java @@ -5,6 +5,7 @@ import com.cf.imes.module.system.api.application.ApplicationApi; import com.cf.imes.module.system.api.customplateno.CustomPlateNoSeqApi; import com.cf.imes.module.system.api.dataSource.DataSourceApi; import com.cf.imes.module.system.api.dict.DictDataApi; +import com.cf.imes.module.system.api.funds.SystemFundsApi; import com.cf.imes.module.system.api.machine.MachineApi; import com.cf.imes.module.system.api.organ.OrganApi; import com.cf.imes.module.system.api.permission.PermissionApi; @@ -22,6 +23,6 @@ import org.springframework.context.annotation.Configuration; @Configuration(proxyBeanMethods = false) @EnableFeignClients(clients = {AdminUserApi.class, MachineApi.class, DictDataApi.class, FileApi.class, ProcessGroupApi.class, FileApi.class, DataSourceApi.class, ApplicationApi.class, - ProcessApi.class, OrganApi.class, SystemConfigApi.class, CustomPlateNoSeqApi.class, PermissionApi.class, SettingApi.class}) + ProcessApi.class, OrganApi.class, SystemConfigApi.class, CustomPlateNoSeqApi.class, PermissionApi.class, SettingApi.class, SystemFundsApi.class}) public class RpcConfiguration { } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/balancedetails/BalanceDetailsService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/balancedetails/BalanceDetailsService.java new file mode 100644 index 000000000..63fe56be0 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/balancedetails/BalanceDetailsService.java @@ -0,0 +1,17 @@ +package com.cf.imes.module.executor.service.funds.balancedetails; + + +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.module.executor.controller.admin.funds.balancedetails.vo.BalanceDetailsPageReqVO; +import com.cf.imes.module.executor.controller.admin.funds.balancedetails.vo.BalanceDetailsRespVO; + +/** + * @author 组织余额明细接口 + */ +public interface BalanceDetailsService { + + + PageResult getBalanceDetailsPage(BalanceDetailsPageReqVO pageReqVO); + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/balancedetails/BalanceDetailsServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/balancedetails/BalanceDetailsServiceImpl.java new file mode 100644 index 000000000..29a188051 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/balancedetails/BalanceDetailsServiceImpl.java @@ -0,0 +1,57 @@ +package com.cf.imes.module.executor.service.funds.balancedetails; + + +import cn.hutool.core.collection.CollUtil; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.module.executor.controller.admin.funds.balancedetails.vo.BalanceDetailsPageReqVO; +import com.cf.imes.module.executor.controller.admin.funds.balancedetails.vo.BalanceDetailsRespVO; +import com.cf.imes.module.executor.dal.dataobject.funds.balancedetails.IncomeExpenseDetailsDO; +import com.cf.imes.module.executor.dal.mysql.funds.balancedetails.IncomeExpenseDetailsMapper; +import com.cf.imes.module.executor.enums.amount.IncomeExpenseTypeEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * @author 组织余额明细接口 实现类 + */ +@Slf4j +@Service +public class BalanceDetailsServiceImpl implements BalanceDetailsService{ + + + @Resource + private IncomeExpenseDetailsMapper incomeExpenseDetailsMapper; + + + + @Override + public PageResult getBalanceDetailsPage(BalanceDetailsPageReqVO pageReqVO) { + + PageResult pageResult = incomeExpenseDetailsMapper.selectDetailsPage(pageReqVO,null); + + if(CollUtil.isNotEmpty(pageResult.getList())){ + return new PageResult<>(); + } + + PageResult result = BeanUtils.toBean(pageResult, BalanceDetailsRespVO.class); + + + result.getList().forEach(f->{ + if(f.getIncomeExpenseType().equals(IncomeExpenseTypeEnum.INCOME.getType())){ + f.setEntryAmount(f.getCashAmountChange()); + f.setEntryGiftAmount(f.getBonusAmountChange()); + }else { + f.setExpensesAmount(f.getCashAmountChange()); + f.setExpensesGiftAmount(f.getBonusAmountChange()); + } + + }); + + return result; + } + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/bill/BillService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/bill/BillService.java new file mode 100644 index 000000000..7a747e8f8 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/bill/BillService.java @@ -0,0 +1,17 @@ +package com.cf.imes.module.executor.service.funds.bill; + + +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.module.executor.controller.admin.funds.balancedetails.vo.BalanceDetailsPageReqVO; +import com.cf.imes.module.executor.controller.admin.funds.bill.vo.BillDetailsRespVO; + +/** + * @author 账单/总额明细 接口 + */ +public interface BillService { + + + PageResult getBillDetailsPage(BalanceDetailsPageReqVO pageReqVO); + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/bill/BillServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/bill/BillServiceImpl.java new file mode 100644 index 000000000..2c41e0dab --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/bill/BillServiceImpl.java @@ -0,0 +1,70 @@ +package com.cf.imes.module.executor.service.funds.bill; + + +import cn.hutool.core.collection.CollUtil; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.module.executor.controller.admin.funds.balancedetails.vo.BalanceDetailsPageReqVO; +import com.cf.imes.module.executor.controller.admin.funds.bill.vo.BillDetailsRespVO; +import com.cf.imes.module.executor.dal.dataobject.funds.balancedetails.IncomeExpenseDetailsDO; +import com.cf.imes.module.executor.dal.mysql.funds.balancedetails.IncomeExpenseDetailsMapper; +import com.cf.imes.module.executor.enums.amount.IncomeExpenseTypeEnum; +import com.cf.imes.module.executor.enums.amount.TradeTypeEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * @author 账单/总额明细接口 实现类 + */ +@Slf4j +@Service +public class BillServiceImpl implements BillService{ + + + @Resource + private IncomeExpenseDetailsMapper incomeExpenseDetailsMapper; + + @Override + public PageResult getBillDetailsPage(BalanceDetailsPageReqVO pageReqVO) { + + PageResult pageResult = incomeExpenseDetailsMapper.selectDetailsPage(pageReqVO,null); + + if(CollUtil.isNotEmpty(pageResult.getList())){ + return new PageResult<>(); + } + + PageResult result = BeanUtils.toBean(pageResult, BillDetailsRespVO.class); + + result.getList().forEach(f->{ + // 收支类型 + f.setIncomeExpenseType(IncomeExpenseTypeEnum.EXPENSES.getType()); + // 支出账户余额 + f.setExpenditureAccountBalance(f.getAvailableAmount()); + if(f.getTradeType().equals(TradeTypeEnum.INCOME.getType())){ + // 充值金额 + f.setRechargeAmount(f.getCashAmountChange()); + // 支出现金 + f.setCashExpenditure(f.getCashAmountChange()); + // 实际支出总费用 + f.setActualTotalExpenditure(f.getCashAmountChange()); + + }else if(f.getTradeType().equals(TradeTypeEnum.EXPENSES.getType())){ + // 产品金额 + f.setProductAmount(f.getCashAmountChange().add(f.getBonusAmountChange())); + // 支出现金 + f.setCashExpenditure(f.getCashAmountChange()); + // 实际支出总费用 + f.setActualTotalExpenditure(f.getCashAmountChange().add(f.getBonusAmountChange())); + + } + }); + + return result; + + } + + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/invoice/InvoiceService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/invoice/InvoiceService.java new file mode 100644 index 000000000..460c9f2bd --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/invoice/InvoiceService.java @@ -0,0 +1,37 @@ +package com.cf.imes.module.executor.service.funds.invoice; + + +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.module.executor.controller.admin.funds.invoice.vo.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; + +/** + * @author 发票管理接口 + */ +public interface InvoiceService { + + + InvoiceAmountRespVO getInvoiceAmount(Long organId); + + + PageResult getInvoiceDetails(InvoiceDetailsPageReqVO pageReqVO); + + + PageResult getInvoiceRecords(InvoiceDetailsPageReqVO pageReqVO); + + + void insetInvoiceRecords(InvoiceRecordsReqVO reqVO); + + + InvoiceDetailsRespVO getInvoiceIncome(Long invoiceId); + + + void invoicing(InvoiceInvoicingReqVO reqVO); + + void uploadInvoice(MultipartFile file, Long invoiceId); + + void downloadInvoice(Long invoiceId, HttpServletResponse response); + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/invoice/InvoiceServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/invoice/InvoiceServiceImpl.java new file mode 100644 index 000000000..55fbc88c2 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/invoice/InvoiceServiceImpl.java @@ -0,0 +1,412 @@ +package com.cf.imes.module.executor.service.funds.invoice; + + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.Header; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.cf.imes.framework.common.exception.ServiceException; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.common.util.Assert.AssertUtils; +import com.cf.imes.framework.common.util.date.LocalDateTimeUtils; +import com.cf.imes.framework.common.util.json.JsonUtils; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.framework.mybatis.core.query.QueryWrapperX; +import com.cf.imes.framework.security.core.LoginUser; +import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; +import com.cf.imes.module.executor.controller.admin.funds.invoice.vo.*; +import com.cf.imes.module.executor.dal.dataobject.funds.balancedetails.IncomeExpenseDetailsDO; +import com.cf.imes.module.executor.dal.dataobject.funds.invoice.InvoiceRecordsDO; +import com.cf.imes.module.executor.dal.dataobject.funds.purchase.PurchaseRecordDO; +import com.cf.imes.module.executor.dal.mysql.funds.balancedetails.IncomeExpenseDetailsMapper; +import com.cf.imes.module.executor.dal.mysql.funds.invoice.InvoiceRecordsMapper; +import com.cf.imes.module.executor.dal.mysql.funds.purchase.PurchaseRecordMapper; +import com.cf.imes.module.executor.enums.amount.InvoiceStatusEnum; +import com.cf.imes.module.executor.enums.amount.TradeTypeEnum; +import com.cf.imes.module.system.api.funds.SystemFundsApi; +import com.cf.imes.module.system.api.funds.dto.InvoiceTitleInfoDTO; +import com.cf.imes.module.system.api.organ.OrganApi; +import lombok.extern.slf4j.Slf4j; +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.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Stream; + +import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.framework.common.util.json.JsonUtils.*; +import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; + +/** + * @author 发票管理接口 实现类 + */ +@Slf4j +@Service +public class InvoiceServiceImpl implements InvoiceService{ + + + @Resource + private PurchaseRecordMapper purchaseRecordMapper; + + @Resource + private IncomeExpenseDetailsMapper incomeExpenseDetailsMapper; + + @Resource + private InvoiceRecordsMapper invoiceRecordsMapper; + + + @Resource + private SystemFundsApi systemFundsApi; + + @Resource + private OrganApi organApi; + + + @Resource + private InvoiceFilePath invoiceFilePath; + + + + private static final String UTF8_CHARSET = CharsetUtil.UTF_8; + private static final String ATTACHMENT_PREFIX = "attachment; filename="; + + + + + + @Override + public InvoiceAmountRespVO getInvoiceAmount(Long organId) { + + InvoiceAmountRespVO invoiceAmountRespVO = purchaseRecordMapper.selectOrganInvoice(organId); + + BigDecimal invoiceableAmount = systemFundsApi.getOrganAmount(organId).getCheckedData().getInvoiceableAmount(); + + return invoiceAmountRespVO.setInvocable(invoiceableAmount); + + } + + + + + + @Override + public PageResult getInvoiceDetails(InvoiceDetailsPageReqVO pageReqVO) { + + PageDTO page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); + + List invoiceStatus = new ArrayList<>(); + invoiceStatus.add(InvoiceStatusEnum.INVOICABLE.getStatus()); + invoiceStatus.add(InvoiceStatusEnum.INVOICINGFAILED.getStatus()); + + QueryWrapperX queryWrapperX = new QueryWrapperX<>(); + + pageReqVO.setCreateTime(LocalDateTimeUtils.generateTimeSection(pageReqVO.getCreateTime())); + queryWrapperX + .eq("ied.organId",getUserOrganId()) + .eq("ied.deleted",false) + .eq("ied.trade_type", TradeTypeEnum.EXPENSES.getType()) + .in("pr.is_invocing", invoiceStatus) + .betweenIfPresent("ied.create_time",pageReqVO.getCreateTime()) + .betweenIfPresent("ied.cash_amount_change",pageReqVO.getAmount()); + + IPage respVOIPage = incomeExpenseDetailsMapper.selectOrganInvoicable(page, queryWrapperX); + + List records = respVOIPage.getRecords(); + if (CollUtil.isEmpty(records)) { + return new PageResult<>(); + } + + return new PageResult<>(records, respVOIPage.getTotal()); + + } + + + + + + + @Override + public PageResult getInvoiceRecords(InvoiceDetailsPageReqVO pageReqVO) { + + pageReqVO.setCreateTime(LocalDateTimeUtils.generateTimeSection(pageReqVO.getCreateTime())); + pageReqVO.setInvoiceTime(LocalDateTimeUtils.generateTimeSection(pageReqVO.getInvoiceTime())); + + PageResult pageResult = invoiceRecordsMapper.selectInvoiceRecordsPage(pageReqVO); + List resultList = pageResult.getList(); + + if(CollUtil.isEmpty(resultList)){ + return new PageResult<>(); + } + + List recordsRespVOS = BeanUtils.toBean(resultList, InvoiceRecordsRespVO.class); + + return new PageResult<>(recordsRespVOS, pageResult.getTotal()); + + + } + + + + + + @Override + public void insetInvoiceRecords(InvoiceRecordsReqVO reqVO) { + + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + assert loginUser != null; + + String organName = organApi.getOrganDetails(loginUser.getOrganId()).getCheckedData().getName(); + + InvoiceTitleInfoDTO titleInfoDTO = systemFundsApi.getInvoiceTitle(reqVO.getInvoiceTitleId()).getCheckedData(); + + invoiceRecordsMapper.insert(InvoiceRecordsDO.builder() + .userId(loginUser.getId()) + .organName(organName) + .purchaseIds(JsonUtils.toJsonString(reqVO.getPurchaseRecordId())) + .invoiceAmount(reqVO.getInvoiceAmount()) + .invoiceTitleId(reqVO.getInvoiceTitleId()) + .invoiceTitleInfo(zipString(toJsonString(titleInfoDTO))) + .status(InvoiceStatusEnum.PENDINGINVOICING.getStatus()) + .build()); + + + // 更新购买记录表的发票状态 + purchaseRecordMapper.update(new LambdaUpdateWrapper() + .eq(PurchaseRecordDO::getOrganId, loginUser.getOrganId()) + .eq(PurchaseRecordDO::getDeleted,false) + .in(PurchaseRecordDO::getId,reqVO.getPurchaseRecordId()) + .set(PurchaseRecordDO::getIsInvocing, InvoiceStatusEnum.PENDINGINVOICING.getStatus())); + + + // 减少组织余额的可开票的金额 + systemFundsApi.reduceOrganAmount(loginUser.getOrganId(),reqVO.getInvoiceAmount()); + + + } + + + + + @Override + public InvoiceDetailsRespVO getInvoiceIncome(Long invoiceId) { + + InvoiceRecordsDO invoiceRecordsDO = invoiceRecordsMapper.selectById(invoiceId); + + AssertUtils.notEmpty(invoiceRecordsDO,INVOICE_NO_EXIST); + + String purchaseIds = Optional.ofNullable(invoiceRecordsDO.getPurchaseIds()).orElse("[]"); + + List purchaseIdList = JSON.parseArray(purchaseIds).toJavaList(Long.class).stream().distinct().toList(); + + List invoicePurchaseRecords = purchaseRecordMapper.selectPurchaseRecord(purchaseIdList, getUserOrganId()); + + InvoiceTitleInfo invoiceTitleInfo = parseObject(unzipString(invoiceRecordsDO.getInvoiceTitleInfo()), InvoiceTitleInfo.class); + + return InvoiceDetailsRespVO.builder() + .invoicePurchaseRecords(invoicePurchaseRecords) + .invoiceTitleInfo(invoiceTitleInfo) + .build(); + + } + + + + + + @Override + public void invoicing(InvoiceInvoicingReqVO reqVO) { + + InvoiceRecordsDO invoiceRecordsDO = validateInvoiceExists(reqVO.getId()); + + if(invoiceRecordsDO.getStatus().equals(InvoiceStatusEnum.INVOICINGFAILED.getStatus())){ + throw exception(THIS_INVOICE_IS_FAIL); + } + + +// if(invoiceRecordsDO.getStatus().equals(InvoiceStatusEnum.INVOICINGSUCCESSFUL.getStatus())){ +// throw exception(THIS_INVOICE_IS_SUCCESS); +// } + + + String purchaseIds = Optional.ofNullable(invoiceRecordsDO.getPurchaseIds()).orElse("[]"); + + List purchaseIdList = JSON.parseArray(purchaseIds).toJavaList(Long.class).stream().distinct().toList(); + + List purchaseRecordDOS = validatePurchaseRecordExists(purchaseIdList); + + + if(Boolean.TRUE.equals(reqVO.getIsInvoicing())){ + + invoiceRecordsDO.setStatus(InvoiceStatusEnum.INVOICINGSUCCESSFUL.getStatus()); + invoiceRecordsDO.setRemark(reqVO.getRemark()); + + purchaseRecordDOS.forEach(f->f.setIsInvocing(InvoiceStatusEnum.INVOICINGSUCCESSFUL.getStatus())); + + }else { + + // 增加组织余额可开票的金额 + systemFundsApi.addOrganAmount(invoiceRecordsDO.getOrganId(),invoiceRecordsDO.getInvoiceAmount()); + + invoiceRecordsDO.setStatus(InvoiceStatusEnum.INVOICINGFAILED.getStatus()); + String remark = Optional.ofNullable(reqVO.getRemark()).orElseThrow(() -> new ServiceException(INVOICING_REJECT_REASON)); + invoiceRecordsDO.setRemark(remark); + + purchaseRecordDOS.forEach(f->f.setIsInvocing(InvoiceStatusEnum.INVOICABLE.getStatus())); + + } + + + invoiceRecordsDO.setInvoiceAttachmentPath(reqVO.getInvoiceAttachmentPath()); + invoiceRecordsDO.setInvoiceNo(reqVO.getInvoiceNo()); + + invoiceRecordsMapper.updateById(invoiceRecordsDO); + + purchaseRecordMapper.updateBatch(purchaseRecordDOS); + + } + + + + + + @Override + public void uploadInvoice(MultipartFile file, Long invoiceId) { + + AssertUtils.notEmpty(file,INVOICE_FILE_IS_NULL); + + // 生成存储目录 + Path invoiceDir = Paths.get(invoiceFilePath.getFilePath(),String.valueOf(invoiceId)); + if (!Files.exists(invoiceDir)) { + try { + Files.createDirectories(invoiceDir); + } catch (IOException e) { + log.error("发票附件目录创建失败" + e.getMessage()); + throw exception(INVOICE_FILE_UPLOAD_FAILED); + } + } + + + // 删除旧文件(确保目录中只有一个文件) + try (Stream files = Files.list(invoiceDir)) { + files.forEach(existingFile -> { + try { + Files.delete(existingFile); + } catch (IOException e) { + log.error("发票附件旧文件删除失败:" + e.getMessage()); + } + }); + } catch (IOException e) { + log.error("发票附件旧文件删除失败: " + e.getMessage()); + throw exception(INVOICE_FILE_UPLOAD_FAILED); + } + + // 保存新文件 + String fileName = Objects.requireNonNull(file.getOriginalFilename()); + Path filePath = invoiceDir.resolve(fileName); + + try (InputStream inputStream = file.getInputStream()) { + Files.copy(inputStream, filePath, StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + log.error("发票附件上传失败: " + e.getMessage()); + throw exception(INVOICE_FILE_UPLOAD_FAILED); + } + + } + + + + + + @Override + public void downloadInvoice(Long invoiceId, HttpServletResponse response) { + + Path invoiceDir = Paths.get(invoiceFilePath.getFilePath(), String.valueOf(invoiceId)); + + if (!Files.exists(invoiceDir)) { + throw exception(INVOICE_FILE_IS_NULL_NOT_DOWNLOAD); + } + + + // 获取目录中的文件 + File[] files = invoiceDir.toFile().listFiles(); + if (files == null || files.length == 0) { + throw exception(INVOICE_FILE_IS_NULL_NOT_DOWNLOAD); + } + + + // 取第一个文件 + File file = files[0]; + + try (InputStream inputStream = new FileInputStream(file); + OutputStream outputStream = response.getOutputStream()) { + + response.setCharacterEncoding(UTF8_CHARSET); + response.setContentType("application/octet-stream; charset=UTF-8"); + response.setHeader(Header.CONTENT_DISPOSITION.getValue(), ATTACHMENT_PREFIX + URLEncoder.encode(file.getName(), UTF8_CHARSET)); + response.setContentLengthLong(file.length()); + + byte[] buffer = new byte[8192]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + outputStream.flush(); + + } catch (IOException e) { + log.error("发票附件下载异常:"+ e.getMessage()); + throw exception(INVOICE_FILE_DATA_ERROR); + } + + } + + + + + + + private InvoiceRecordsDO validateInvoiceExists(Long invoiceId) { + + InvoiceRecordsDO invoiceRecordsDO = invoiceRecordsMapper.selectById(invoiceId); + + if (ObjectUtil.isNull(invoiceRecordsDO)) { + throw exception(INVOICE_NO_EXIST); + } + + return invoiceRecordsDO; + + } + + + + private List validatePurchaseRecordExists(List purchaseId) { + + List purchaseRecordDOS = purchaseRecordMapper.selectBatchIds(purchaseId); + + if (ObjectUtil.isNull(purchaseRecordDOS)) { + throw exception(PURCHASE_RECORD_NO_EXIST); + } + + return purchaseRecordDOS; + + } + + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/purchase/PurchaseService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/purchase/PurchaseService.java new file mode 100644 index 000000000..2dc23e0dc --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/purchase/PurchaseService.java @@ -0,0 +1,16 @@ +package com.cf.imes.module.executor.service.funds.purchase; + + +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.module.executor.controller.admin.funds.purchase.vo.PurchaseRecordPageReqVO; +import com.cf.imes.module.executor.controller.admin.funds.purchase.vo.PurchaseRecordRespVO; + +/** + * @author 软件购买接口 + */ +public interface PurchaseService { + + PageResult getPurchaseRecord(PurchaseRecordPageReqVO pageReqVO); + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/purchase/PurchaseServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/purchase/PurchaseServiceImpl.java new file mode 100644 index 000000000..b72b9d270 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/funds/purchase/PurchaseServiceImpl.java @@ -0,0 +1,53 @@ +package com.cf.imes.module.executor.service.funds.purchase; + + +import cn.hutool.core.collection.CollUtil; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.common.util.date.LocalDateTimeUtils; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.module.executor.controller.admin.funds.purchase.vo.PurchaseRecordPageReqVO; +import com.cf.imes.module.executor.controller.admin.funds.purchase.vo.PurchaseRecordRespVO; +import com.cf.imes.module.executor.dal.dataobject.funds.purchase.PurchaseRecordDO; +import com.cf.imes.module.executor.dal.mysql.funds.purchase.PurchaseRecordMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author 软件购买接口 实现类 + */ +@Slf4j +@Service +public class PurchaseServiceImpl implements PurchaseService{ + + + @Resource + private PurchaseRecordMapper purchaseRecordMapper; + + + + + + @Override + public PageResult getPurchaseRecord(PurchaseRecordPageReqVO pageReqVO) { + + + pageReqVO.setCreateTime(LocalDateTimeUtils.generateTimeSection(pageReqVO.getCreateTime())); + + PageResult pageResult = purchaseRecordMapper.selectPage(pageReqVO); + List resultList = pageResult.getList(); + + if(CollUtil.isEmpty(resultList)){ + return new PageResult<>(); + } + + List respVOS = BeanUtils.toBean(resultList, PurchaseRecordRespVO.class); + + return new PageResult<>(respVOS, pageResult.getTotal()); + } + + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanService.java index f38c9ad3f..1a27971d7 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanService.java @@ -12,30 +12,12 @@ import java.util.Map; public interface OptimizePlanService { - String ORDER_PLATE_MODEL = "imes_order_plate_model"; - - String ORDER_OPTIMIZE_PLATE_MODEL = "imes_order_optimize_plate_model"; - - String ORDER_PARTS_REMARK_MODEL = "imes_order_parts_remark_model"; - - String PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL = "imes_plan_process_scheme_optimize_model"; - - String PLAN_ACTUAL_GOODS_MODEL = "imes_plan_actual_goods_model"; - - String PLAN_PROCESS_SCHEME_CONFIG = "imes_plan_process_scheme_config_model"; - List getPlateListByPlanId(Long planId); Boolean addRemain(AddRemainReqVO vo); - Boolean commit(Long planId,String goodsId,Long planConfigId, List goodsNo); - - - Boolean endCutting(Long planId,String goodsId,List goodsNo,Long planConfigId); - - void updateCuttingStatus(CuttingStatusRespVO respVO); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java index e5c9ad581..3bb363f4a 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java @@ -36,7 +36,6 @@ import com.cf.imes.module.executor.controller.admin.plan.bo.PlanProcessSchemeLis import com.cf.imes.module.executor.controller.admin.plan.bo.ProcessGroupList; import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.*; import com.cf.imes.module.executor.controller.admin.plan.vo.*; -import com.cf.imes.module.executor.dal.dataobject.goods.CutedBoardInfo; import com.cf.imes.module.executor.dal.dataobject.goods.OptimizeBoardModelDO; import com.cf.imes.module.executor.dal.dataobject.goods.PlanActualGoodsModelDO; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; @@ -179,213 +178,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { } - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean commit(Long planId,String goodsId,Long planConfigId, List goodsNo) { - - PlanDO planDO = validatePlanExists(planId); - - if(planDO.getStatus().equals(PlanStatusEnum.NOCUTTING.getStatus())){ - throw exception(PLAN_STATUS_ERROR); - } - - Date date = new Date(); - - List optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLAN_CONFIG_ID,FIELD_PLAN_ID,planConfigId, planId, ORDER_OPTIMIZE_PLATE_MODEL, OptimizeBoardModelDO.class); - - - List plateDOS = getPlanGoodsPlateList(goodsNo,planDO,optimizeBoardModelDOS); - - List orderIds = new ArrayList<>(plateDOS.stream().map(PlateDO::getOrderId).distinct().toList()); - - - OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0); - - - List cutedBoardInfoList = Optional.ofNullable(optimizeBoardModelDO.getCutedBoardInfo()).orElse(new ArrayList<>()); - - List cutedBoardInfos = cutedBoardInfoList.stream().filter(f -> f.getGoodsId().equals(goodsId)).toList(); - - CutedBoardInfo cutedBoardInfo = new CutedBoardInfo(); - - if(CollUtil.isNotEmpty(cutedBoardInfos)) { - - CutedBoardInfo boardInfo = cutedBoardInfos.get(0); - - // 获取原排单的已开料的大板编号 - List cutedBoardIsCuttingList = Optional.ofNullable(boardInfo.getCutedBoardIsCuttingList()).orElseGet(ArrayList::new); - - - // 将开料的大板编号和已经开料的大板编号进行去重,相同去除,不同新增 - goodsNo.forEach(item -> { - if (!cutedBoardIsCuttingList.contains(item)) { - cutedBoardIsCuttingList.add(item); - } - }); - - // 将需要更新更新的数据更新到原数据中 - boardInfo.setCutedBoardIsCuttingList(cutedBoardIsCuttingList); - - cutedBoardInfo = boardInfo; - - }else { - - cutedBoardInfo.setCutedBoardIsCuttingList(goodsNo); - - } - - // 更新开料相关的数据 - HashMap objectObjectHashMap = new HashMap<>(); - objectObjectHashMap.put("cutedBoardInfo",cutedBoardInfo); - objectObjectHashMap.put(FIELD_UPDATETIME,simpleDateFormat.format(date)); - - try { - - esDocumentService.updateById(ORDER_OPTIMIZE_PLATE_MODEL, optimizeBoardModelDO.getId(), HashMap.class, objectObjectHashMap); - - }catch (Exception e) { - log.error(e.getMessage()); - throw new ServiceException(ES_DATA_ERROR); - } - - - - // 修改生产单的状态 - orderMapper.updateOrderListStatus(orderIds,OrderStatusEnum.IN_PRODUCTION.getStatus(),getUserOrganId()); - - - // 修改小板的开料状态 - plateDOS.forEach(f->f.setIsCutted(OrderPlateCutStatusEnum.OPENING.getStatus())); - plateMapper.updateBatch(plateDOS); - - - return Boolean.TRUE; - - } - - - - - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean endCutting(Long planId,String goodsId,List goodsNo,Long planConfigId) { - - PlanDO planDO = validatePlanExists(planId); - - List optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLAN_CONFIG_ID,FIELD_PLAN_ID,planConfigId, planId, ORDER_OPTIMIZE_PLATE_MODEL, OptimizeBoardModelDO.class); - - Date date = new Date(); - - List plateDOS = getPlanGoodsPlateList(goodsNo,planDO,optimizeBoardModelDOS); - - List orderIds = new ArrayList<>(plateDOS.stream().map(PlateDO::getOrderId).distinct().toList()); - - - // 修改生产单的状态 - orderMapper.updateOrderListStatus(orderIds,OrderStatusEnum.IN_PRODUCTION.getStatus(),getUserOrganId()); - - - // 修改小板的开料状态 - plateDOS.forEach(f->f.setIsCutted(OrderPlateCutStatusEnum.OPENED.getStatus())); - plateMapper.updateBatch(plateDOS); - - - OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0); - - - List cutedBoardInfoList = Optional.ofNullable(optimizeBoardModelDO.getCutedBoardInfo()).orElse(new ArrayList<>()); - - List cutedBoardInfos = cutedBoardInfoList.stream().filter(f -> f.getGoodsId().equals(goodsId)).toList(); - - - AssertUtils.notEmpty(cutedBoardInfos,ORDER_PLAN_OPTIMIZE_ERROR); - - CutedBoardInfo cutedBoardInfo = cutedBoardInfos.get(0); - - - // 获取原排单的已开料的大板编号 - List cutedBoardList = Optional.ofNullable(cutedBoardInfo.getCutedBoardList()).orElseGet(ArrayList::new); - - List cutedBoardIsCuttingList = cutedBoardInfo.getCutedBoardIsCuttingList(); - - // 将开料的大板编号和已经开料的大板编号进行去重,相同去除,不同新增 - goodsNo.forEach(item -> { - if (!cutedBoardList.contains(item)) { - cutedBoardList.add(item); - } - }); - - - long cutedBoardNumber = cutedBoardList.size(); - - if(CollUtil.isEmpty(cutedBoardList)){ - cutedBoardNumber = 0; - } - - cutedBoardIsCuttingList.removeAll(goodsNo); - - // 将需要更新更新的数据更新到原数据中 - cutedBoardInfo.setCutedBoardNumber(cutedBoardNumber); - cutedBoardInfo.setCutedBoardList(cutedBoardList); - cutedBoardInfo.setCutedBoardIsCuttingList(cutedBoardIsCuttingList); - - - // 更新开料相关的数据 - HashMap objectObjectHashMap = new HashMap<>(); - objectObjectHashMap.put("cutedBoardInfo",cutedBoardInfo); - objectObjectHashMap.put(FIELD_UPDATETIME,simpleDateFormat.format(date)); - - try { - - esDocumentService.updateById(ORDER_OPTIMIZE_PLATE_MODEL, optimizeBoardModelDO.getId(), HashMap.class, objectObjectHashMap); - - }catch (Exception e) { - log.error(e.getMessage()); - throw new ServiceException(ES_DATA_ERROR); - } - - if(cutedBoardNumber > 0){ - - planDO.setStatus(PlanStatusEnum.OPENING.getStatus()); - planMapper.updateById(planDO); - - } - - - List plateDOList = plateMapper.selectNoCutPlateByPlateId(orderIds, getUserOrganId()); - - List orderIdList = plateDOList.stream().map(PlateDO::getOrderId).distinct().toList(); - - orderIds.removeAll(orderIdList); - - if(CollUtil.isNotEmpty(orderIds)){ - - // 查询生产单的打包状态是否为已打包 - List orderDOS = orderMapper.selectOrderPackList(orderIds, getUserOrganId()); - if (CollUtil.isNotEmpty(orderDOS)) { - orderDOS.forEach(f -> { - f.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus()); - f.setFinishTime(LocalDateTime.now()); - }); - - orderMapper.updateBatch(orderDOS); - } - } - - - if(optimizeBoardModelDO.getBoardCount() == cutedBoardNumber){ - - planDO.setStatus(PlanStatusEnum.OPENED.getStatus()); - planDO.setProduceTime(LocalDateTime.now()); - - planMapper.updateById(planDO); - - } - - return Boolean.TRUE; - - } - @Override @@ -414,7 +206,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // 查询优化信息 - List optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLAN_CONFIG_ID,FIELD_PLAN_ID,planConfigId, planId, ORDER_OPTIMIZE_PLATE_MODEL, OptimizeBoardModelDO.class); + List optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLAN_CONFIG_ID,FIELD_PLAN_ID,planConfigId, planId, ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), OptimizeBoardModelDO.class); AssertUtils.notEmpty(optimizeBoardModelDOS,ORDER_PLAN_OPTIMIZE_ERROR); @@ -494,7 +286,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { AssertUtils.notEmpty(goodsDOS,THIS_ORDER_NOT_PLATE_DATA); - List plateDOS = plateMapper.selectPlateListByGoodsIds(Collections.singletonList(orderId),getUserOrganId()); + List plateDOS = plateMapper.selectPlateListByGoodsIds(orderId,getUserOrganId()); AssertUtils.notEmpty(plateDOS,ORDER_PLATE_ERROR); @@ -512,13 +304,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { } - // 造型数据的尺寸长度 - Integer orderModelSize = plateDOS.size(); - - List plateIdList = plateDOS.stream().map(PlateDetailRespVO::getPlateId).distinct().toList(); - - List orderModelDOS = esUtils.getEsDocument(FIELD_ORDER_ID,FIELD_PLATE_ID, orderId,plateIdList, orderModelSize, OptimizePlanService.ORDER_PLATE_MODEL, OrderModelDO.class); - + List orderModelDOS = esUtils.getEsDocumentByScroll(FIELD_ORDER_ID,orderId,1000,ORDER_PLATE_MODEL.getIndex(),OrderModelDO.class); AssertUtils.notEmpty(orderModelDOS,ORDER_PLATE_MODEL_DATE_ERROR); @@ -528,7 +314,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // 查询生产单对应的配件的ES信息 - List orderPartsRemarks = esUtils.getEsDocument(FIELD_ORDER_ID, orderId, printOrderPartsRespVOS.size(), ORDER_PARTS_REMARK_MODEL, OrderPartsRemark.class); + List orderPartsRemarks = esUtils.getEsDocument(FIELD_ORDER_ID, orderId, printOrderPartsRespVOS.size(), ORDER_PARTS_REMARK_MODEL.getIndex(), OrderPartsRemark.class); // 查询生产单对应的包裹信息 @@ -607,7 +393,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // 需要查询小板造型信息的板材ID List plateIds = plateDetailRespVOS.stream().map(PlateDetailRespVO::getPlateId).toList(); - List orderModelDOS = esUtils.getEsDocument(FIELD_PLATE_ID, plateIds, orderModelSize, OptimizePlanService.ORDER_PLATE_MODEL, OrderModelDO.class); + List orderModelDOS = esUtils.getEsDocument(FIELD_PLATE_ID, plateIds, orderModelSize, ORDER_PLATE_MODEL.getIndex(), OrderModelDO.class); AssertUtils.notEmpty(orderModelDOS,ORDER_PLAN_PLATE_MODEL_DATE_ERROR); @@ -619,14 +405,14 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // 获取混单时选择的实际开料的大板信息 - List planActualGoodsModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, PLAN_ACTUAL_GOODS_MODEL, PlanActualGoodsModelDO.class); + List planActualGoodsModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, PLAN_ACTUAL_GOODS_MODEL.getIndex(), PlanActualGoodsModelDO.class); // 查询生产单对应的配件信息 List printOrderPartsRespVOS = orderPartsMapper.selectPartList(orderIds, getUserOrganId()); // 查询生产单对应的配件的ES信息 - List orderPartsRemarks = esUtils.getEsDocument(FIELD_ORDER_ID, orderIds, printOrderPartsRespVOS.size(), ORDER_PARTS_REMARK_MODEL, OrderPartsRemark.class); + List orderPartsRemarks = esUtils.getEsDocument(FIELD_ORDER_ID, orderIds, printOrderPartsRespVOS.size(), ORDER_PARTS_REMARK_MODEL.getIndex(), OrderPartsRemark.class); // 查询生产单对应的包裹信息 @@ -691,7 +477,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // 兼容数据,后期可删除 - List document = esUtils.getEsDocument(FIELD_PLAN_ID, planId, ORDER_OPTIMIZE_PLATE_MODEL, OptimizeBoardModelDO.class); + List document = esUtils.getEsDocument(FIELD_PLAN_ID, planId, ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), OptimizeBoardModelDO.class); if(CollUtil.isNotEmpty(document)){ OptimizeBoardModelDO optimizeBoardModelDO = document.get(0); processId = optimizeBoardModelDO.getProcessId(); @@ -710,10 +496,10 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // 保存排单对应的方案组的配置信息 getPlanProcessSchemeConfig(planDO.getProcessId(),planId); - esUtils.deleteEsDocument(FIELD_PLAN_ID, planId, ORDER_OPTIMIZE_PLATE_MODEL); + esUtils.deleteEsDocument(FIELD_PLAN_ID, planId, ORDER_OPTIMIZE_PLATE_MODEL.getIndex()); }else { - esUtils.deleteEsDocument(FIELD_PLAN_ID, FIELD_PLAN_CONFIG_ID, planId, boardModelDO.getPlanConfigId(), ORDER_OPTIMIZE_PLATE_MODEL); + esUtils.deleteEsDocument(FIELD_PLAN_ID, FIELD_PLAN_CONFIG_ID, planId, boardModelDO.getPlanConfigId(), ORDER_OPTIMIZE_PLATE_MODEL.getIndex()); } @@ -725,7 +511,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { if(req.getPlanConfigId() != null && req.getProcessId() == null){ - esUtils.deleteEsDocument(FIELD_PLAN_ID, FIELD_PLAN_CONFIG_ID, planId, req.getPlanConfigId(), ORDER_OPTIMIZE_PLATE_MODEL); + esUtils.deleteEsDocument(FIELD_PLAN_ID, FIELD_PLAN_CONFIG_ID, planId, req.getPlanConfigId(), ORDER_OPTIMIZE_PLATE_MODEL.getIndex()); } @@ -744,16 +530,16 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // 保存优化后的大板数据 - esUtils.saveEsDocument(ORDER_OPTIMIZE_PLATE_MODEL, Collections.singletonList(boardModelDO)); + esUtils.saveEsDocument(ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), Collections.singletonList(boardModelDO)); // ES文档数据刷新 - esUtils.refresh(ORDER_OPTIMIZE_PLATE_MODEL); + esUtils.refresh(ORDER_OPTIMIZE_PLATE_MODEL.getIndex()); if (processId == null) { - esUtils.deleteEsDocument(FIELD_PLAN_ID, planId, ORDER_OPTIMIZE_PLATE_MODEL); + esUtils.deleteEsDocument(FIELD_PLAN_ID, planId, ORDER_OPTIMIZE_PLATE_MODEL.getIndex()); } } @@ -806,19 +592,19 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { planMapper.updateById(planDO.setProcessId(processId)); // 修改方案组,删除全部的方案组的优化信息 - esUtils.deleteEsDocument(FIELD_PLAN_ID,planId,PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL); + esUtils.deleteEsDocument(FIELD_PLAN_ID,planId,PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL.getIndex()); // 删除全部的生产优化信息 - esUtils.deleteEsDocument(FIELD_PLAN_ID,planId,ORDER_OPTIMIZE_PLATE_MODEL); + esUtils.deleteEsDocument(FIELD_PLAN_ID,planId,ORDER_OPTIMIZE_PLATE_MODEL.getIndex()); // 保存此时的方案组的优化信息 - esUtils.saveEsDocument(PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL,schemeModelDOS); + esUtils.saveEsDocument(PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL.getIndex(),schemeModelDOS); return; } - List processSchemeModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, PLAN_PROCESS_SCHEME_CONFIG, ProcessSchemeModelDO.class); + List processSchemeModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, PLAN_PROCESS_SCHEME_CONFIG.getIndex(), ProcessSchemeModelDO.class); // 保存排单对应的加工方案组的配置信息 if(CollUtil.isEmpty(processSchemeModelDOS)){ @@ -827,9 +613,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { } - esUtils.deleteEsDocument(FIELD_PLAN_ID,FIELD_PLAN_CONFIG_ID,planId,planConfigIds,PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL); + esUtils.deleteEsDocument(FIELD_PLAN_ID,FIELD_PLAN_CONFIG_ID,planId,planConfigIds,PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL.getIndex()); - esUtils.saveEsDocument(PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL,schemeModelDOS); + esUtils.saveEsDocument(PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL.getIndex(),schemeModelDOS); } @@ -841,7 +627,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { @Override public PlanProcessSchemeList getProcessSchemeConfig(Long processId,Long planId) { - esUtils.refresh(PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL); + esUtils.refresh(PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL.getIndex()); PlanProcessSchemeList planProcessSchemeList = new PlanProcessSchemeList(); @@ -853,7 +639,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { List schemeDTOList; // 获取排单对应的方案组的配置信息 - List schemeModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, PLAN_PROCESS_SCHEME_CONFIG, ProcessSchemeModelDO.class); + List schemeModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, PLAN_PROCESS_SCHEME_CONFIG.getIndex(), ProcessSchemeModelDO.class); if(CollUtil.isNotEmpty(schemeModelDOS)){ @@ -877,13 +663,13 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // 查询排单对应的方案组信息 - List saveProcessSchemeReqVOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL, SaveProcessSchemeModelDO.class); + List saveProcessSchemeReqVOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL.getIndex(), SaveProcessSchemeModelDO.class); if(CollUtil.isNotEmpty(saveProcessSchemeReqVOS)){ // 查询排单对应的优化信息 - List optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, schemeDTOList.size(), ORDER_OPTIMIZE_PLATE_MODEL, OptimizeBoardModelDO.class); + List optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, schemeDTOList.size(), ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), OptimizeBoardModelDO.class); if(CollUtil.isNotEmpty(optimizeBoardModelDOS)){ @@ -1012,13 +798,8 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { } - // 造型数据的尺寸长度 - Integer orderModelSize = plateDetailRespVOS.size(); - - // 需要查询的小板造型信息的板材ID - List plateIds = plateDetailRespVOS.stream().map(PlateDetailRespVO::getPlateId).toList(); - - List orderModelDOS = esUtils.getEsDocument(FIELD_PLATE_ID, plateIds, orderModelSize, OptimizePlanService.ORDER_PLATE_MODEL, OrderModelDO.class); + // todo 数据结构改后,可以增加排单ID作为筛选,只查为 0 的 + List orderModelDOS = esUtils.getEsDocumentByScroll(FIELD_ORDER_ID, orderIds, 1000, ORDER_PLATE_MODEL.getIndex(), OrderModelDO.class); AssertUtils.notEmpty(plateDetailRespVOS,ORDER_PLATE_MODEL_DATE_ERROR); @@ -1134,7 +915,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { @Override public Boolean getNewPlanPlate(Long planId) { - List optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, ORDER_OPTIMIZE_PLATE_MODEL, OptimizeBoardModelDO.class); + List optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), OptimizeBoardModelDO.class); if(CollUtil.isNotEmpty(optimizeBoardModelDOS)){ List modelDOS = optimizeBoardModelDOS.stream().filter(f ->Boolean.TRUE.equals(f.getIsNewInsertPlate())).toList(); @@ -1156,7 +937,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { UpdateByQueryRequest.Builder builder = new UpdateByQueryRequest.Builder(); - builder.index(PLAN_PROCESS_SCHEME_CONFIG) + builder.index(PLAN_PROCESS_SCHEME_CONFIG.getIndex()) .query(qb -> qb.bool(bq -> bq .must(mq -> mq.term(t->t.field(FIELD_PLAN_ID).value(reqVO.getPlanId()))) .must(mq -> mq.match(mtq -> mtq.field(FIELD_PLAN_CONFIG_ID).query(reqVO.getPlanConfigId()))) @@ -1307,7 +1088,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { SearchRequest.Builder builder = new SearchRequest.Builder(); - builder.index(OptimizePlanService.ORDER_PLATE_MODEL); + builder.index(ORDER_PLATE_MODEL.getIndex()); // 生成查询 SQL @@ -1384,7 +1165,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { if(CharSequenceUtil.isNotBlank(goodsIdList)){ - filterSql = " SELECT orderId,goodsId FROM " + OptimizePlanService.ORDER_PLATE_MODEL + " WHERE " + filterSql = " SELECT orderId,goodsId FROM " + ORDER_PLATE_MODEL.getIndex() + " WHERE " + "isOptimized = false " + "and ( orderId in ( " + orderIds + " ) and goodsId in ( " + goodsIdList + " ) )" + logicalOperator @@ -1393,7 +1174,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { }else { - filterSql = "SELECT orderId,goodsId FROM " + OptimizePlanService.ORDER_PLATE_MODEL + " WHERE " + filterSql = "SELECT orderId,goodsId FROM " + ORDER_PLATE_MODEL.getIndex() + " WHERE " + " " + " ( orderId in ( " + orderIds + "))" + logicalOperator @@ -1403,7 +1184,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { } }else { - filterSql = "SELECT orderId,goodsId FROM " + OptimizePlanService.ORDER_PLATE_MODEL + " WHERE " + filterSql = "SELECT orderId,goodsId FROM " + ORDER_PLATE_MODEL.getIndex() + " WHERE " + "isOptimized = false and " + config + FIELD_SORT; @@ -1495,7 +1276,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { UpdateByQueryRequest.Builder builder = new UpdateByQueryRequest.Builder(); - builder.index(ORDER_OPTIMIZE_PLATE_MODEL) + builder.index(ORDER_OPTIMIZE_PLATE_MODEL.getIndex()) .query(qb -> qb.bool(bq -> bq.filter(f->{ f.term(t->t.field(FIELD_PLAN_ID).value(planId)); f.term(t->t.field(FIELD_PLAN_CONFIG_ID).value(planConfigId)); @@ -1537,8 +1318,12 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { AtomicLong goodsCount = new AtomicLong(0L); List planNos = new ArrayList<>(); + // 大板开料数量 + long cutedBoardNumber = Optional.ofNullable(optimizeBoardModelDO.getCutedBoardNumber()).orElse(0L); + + // 更新板材状态并统计数量 - updateRemainBoardInfo(remainBoardInfos, goodsIds, goodsNo, cutedType, goodsCount, planNos); + updateRemainBoardInfo(remainBoardInfos, goodsIds, goodsNo, cutedType, goodsCount, planNos,cutedBoardNumber); // 更新优化数据 long goodsNum = updateOptimizeData(optimizeBoardModelDO, goodsCount.get(), planNos.size(), cutedType); @@ -1560,7 +1345,8 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { List goodsNo, Integer cutedType, AtomicLong goodsCount, - List planNos) { + List planNos, + Long cutedBoardNumber) { remainBoardInfos.stream() .filter(remainBoard -> goodsIds.contains(remainBoard.getGoodsId())) @@ -1580,13 +1366,26 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { } goodsCount.incrementAndGet(); - board.setCutedType(cutedType); - planNos.addAll(board.getBlocks().stream() - .map(RemainBoardInfo.Blocks::getBlockId) - .toList()); - + board.setCutedType(cutedType); + planNos.addAll(board.getBlocks().stream() + .map(RemainBoardInfo.Blocks::getBlockId) + .toList()); }); + + + if(cutedBoardNumber == 0) { + + remainBoardInfos.stream() + .filter(remainBoard -> goodsIds.contains(remainBoard.getGoodsId())) + .flatMap(remainBoard -> remainBoard.getPlaceBoardList().stream()) + .filter(board -> goodsNo.contains(board.getBoardId()) && cutedType.equals(OrderPlateCutStatusEnum.OPENED.getStatus()) && board.getCutedType().equals(OrderPlateCutStatusEnum.OPENED.getStatus())) + + .forEach(f -> goodsCount.incrementAndGet()); + + } + + } @@ -1634,7 +1433,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { updateData.put(FIELD_UPDATETIME, simpleDateFormat.format(date)); try { - esDocumentService.updateById(ORDER_OPTIMIZE_PLATE_MODEL, optimizeBoardModelDO.getId(), HashMap.class, updateData); + esDocumentService.updateById(ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), optimizeBoardModelDO.getId(), HashMap.class, updateData); } catch (IOException | ElasticsearchException e) { log.error("Failed to sync with Elasticsearch: {}", e.getMessage()); @@ -1810,10 +1609,10 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { }); // 删除旧的排单对应的加工方案组的配置信息 - esUtils.deleteEsDocument(FIELD_PLAN_ID,planId,PLAN_PROCESS_SCHEME_CONFIG); + esUtils.deleteEsDocument(FIELD_PLAN_ID,planId,PLAN_PROCESS_SCHEME_CONFIG.getIndex()); // 保存新的排单对应的加工方案组的配置信息 - esUtils.saveEsDocument(PLAN_PROCESS_SCHEME_CONFIG,modelDOS); + esUtils.saveEsDocument(PLAN_PROCESS_SCHEME_CONFIG.getIndex(),modelDOS); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderInputProcessor.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderInputProcessor.java index e91ce5067..6b04ddd91 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderInputProcessor.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderInputProcessor.java @@ -43,6 +43,7 @@ import java.util.function.BiConsumer; import java.util.stream.Collectors; import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR; +import static com.cf.imes.module.executor.enums.EsIndexEnum.*; /** * @author Beal @@ -92,13 +93,8 @@ public class OrderInputProcessor { @Resource private ElasticsearchClient elasticsearchClient; - public static final String ORDER_PLATE_MODEL = "imes_order_plate_model"; - private static final String FIELD_ORDER_ID = "orderId"; - public static final String ORDER_PARTS_REMARK_MODEL = "imes_order_parts_remark_model"; - -// public static final String ORDER_PLATE_MODEL_COMPRESS = "imes_order_plate_model_compress"; /** * 批量保存生产单小板五金数据 @@ -189,7 +185,7 @@ public class OrderInputProcessor { */ public void batchSaveModel(List orderModelDOs) { try { - BulkResponse bulkResponse = esDocumentService.bulkCreate(ORDER_PLATE_MODEL, orderModelDOs); + BulkResponse bulkResponse = esDocumentService.bulkCreate(ORDER_PLATE_MODEL.getIndex(), orderModelDOs); boolean errors = bulkResponse.errors(); if (errors) { log.error(bulkResponse.items().toString()); @@ -204,28 +200,6 @@ public class OrderInputProcessor { } - /** - * 保存生产单板材造型的压缩数据 - * - * @param orderModelDOs - */ -// public void batchSaveCompressModel(List orderModelDOs) { -// try { -// BulkResponse bulkResponse = esDocumentService.bulkCreate(ORDER_PLATE_MODEL_COMPRESS, orderModelDOs); -// boolean errors = bulkResponse.errors(); -// if (errors) { -// log.error(bulkResponse.items().toString()); -// throw new ServiceException(500, "未知异常"); -// } -// } catch (IOException | ElasticsearchException e) { -// e.printStackTrace(); -// log.error(e.getMessage()); -// throw new RuntimeException(e); -// } -// -// } - - @@ -236,7 +210,7 @@ public class OrderInputProcessor { */ public void batchSaveOrderPartsModel(List orderPartsRemarks) { try { - BulkResponse bulkResponse = esDocumentService.bulkCreate(ORDER_PARTS_REMARK_MODEL, orderPartsRemarks); + BulkResponse bulkResponse = esDocumentService.bulkCreate(ORDER_PARTS_REMARK_MODEL.getIndex(), orderPartsRemarks); boolean errors = bulkResponse.errors(); if (errors) { log.error(bulkResponse.items().toString()); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java index d528f0a5a..5b75d63d2 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java @@ -66,7 +66,6 @@ import com.cf.imes.module.executor.enums.DataTypeEnum; import com.cf.imes.module.executor.enums.OrderDeletedEnum; import com.cf.imes.module.executor.enums.OrderStatusEnum; import com.cf.imes.module.executor.service.customplateno.CustomPlateNoGenerateService; -import com.cf.imes.module.executor.service.optimizeplan.OptimizePlanService; import com.cf.imes.module.executor.service.orderImport.OrderImportHandler; import com.cf.imes.module.executor.service.orderImport.factory.OrderImportHandlerFactory; import com.cf.imes.module.executor.service.plan.PlanService; @@ -100,6 +99,7 @@ import java.util.stream.Stream; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*; +import static com.cf.imes.module.executor.enums.EsIndexEnum.*; import static com.cf.imes.module.infra.enums.ErrorCodeConstants.FILE_NOT_EXISTS; import static com.cf.imes.module.system.enums.ErrorCodeConstants.ORDER_PLAN_DATA_ERROR; @@ -174,13 +174,6 @@ public class OrderServiceImpl implements OrderService { private static final String SUBMIT_STATE = "1"; // 空订单 原生产系统 - public static final String ORDER_PLATE_MODEL = "imes_order_plate_model"; - - public static final String ORDER_PARTS_REMARK_MODEL = "imes_order_parts_remark_model"; - - String ORDER_REMAIN_PLATE_MODEL = "imes_order_optimize_plate_model"; - private static final String PLAN_ACTUAL_GOODS_MODEL = "imes_plan_actual_goods_model"; - public static final Double ZERO = 0.0; @@ -510,17 +503,12 @@ public class OrderServiceImpl implements OrderService { List orderModelDOs = BeanUtils.toBean(plateDetail, OrderModelDO.class); if (orderModelDOs != null && !orderModelDOs.isEmpty()) { -// // 将生产单板材的造型信息进行压缩并保存 -// OrderModelCompressDO orderModelCompressDO = new OrderModelCompressDO(); -// orderModelCompressDO.setOrderId(order.getId()); orderModelDOs.forEach(orderModelDO -> orderModelDO.setOrderId(order.getId())); // 保存大板的分类和实际ID和未优化 saveOrderPlateModel(plateDO,goodsDO,orderModelDOs); orderInputProcessor.batchSaveModel(orderModelDOs); - // 保存压缩的数据 -// orderInputProcessor.batchSaveCompressModel(Collections.singletonList(orderModelCompressDO)); } if (!partsRemark.isEmpty()) { orderInputProcessor.batchSaveOrderPartsModel(partsRemark); @@ -592,19 +580,10 @@ public class OrderServiceImpl implements OrderService { if (plateDetail != null && !plateDetail.isEmpty()){ List orderModelDOs = BeanUtils.toBean(plateDetail, OrderModelDO.class); -// orderInputProcessor.batchSaveModel(orderModelDOs); - -// // 将生产单板材的造型信息进行压缩并保存 -// OrderModelCompressDO orderModelCompressDO = new OrderModelCompressDO(); -// orderModelCompressDO.setOrderId(orderDO.getId()); saveOrderPlateModel(plateDO,goodsDO,orderModelDOs); orderInputProcessor.batchSaveModel(orderModelDOs); - // 保存压缩的数据 -// orderInputProcessor.batchSaveCompressModel(Collections.singletonList(orderModelCompressDO)); - -// } } if (orderPartsRemarks != null && !orderPartsRemarks.isEmpty()) { orderInputProcessor.batchSaveOrderPartsModel(orderPartsRemarks); @@ -738,9 +717,9 @@ public class OrderServiceImpl implements OrderService { orderMapper.deleteOrder(orderId, getUserOrganId()); // 生产单删除 // 删除板材的造型数据 es - orderInputProcessor.deleteByOrderId(orderId, ORDER_PLATE_MODEL); + orderInputProcessor.deleteByOrderId(orderId, ORDER_PLATE_MODEL.getIndex()); // 删除备注信息 es - orderInputProcessor.deleteByOrderId(orderId, ORDER_PARTS_REMARK_MODEL); + orderInputProcessor.deleteByOrderId(orderId, ORDER_PARTS_REMARK_MODEL.getIndex()); } @@ -1444,10 +1423,6 @@ public class OrderServiceImpl implements OrderService { private void saveOrderPlateModel(List plateDO, List goodsDO, List orderModelDOs) { -// // 将生产单板材的造型信息进行压缩并保存 -// String orderPlateModeList = toJsonString(BeanUtils.toBean(orderModelDOs, OrderPlateList.class)); -// orderModelCompressDO.setOrderModelZip(zipString(orderPlateModeList)); - // 板材造型数据添加 大板分类ID,实际ID List orderGoodsPlateIds = BeanUtils.toBean(plateDO, OrderGoodsPlateIds.class); orderGoodsPlateIds.forEach(f-> @@ -1517,7 +1492,7 @@ public class OrderServiceImpl implements OrderService { List plateIdList = labelOrderPlateData.stream().map(LabelOrderPlateData::getPlateId).distinct().toList(); // 小板造型信息 - orderModelDOS = esUtils.getEsDocument("orderId","plateId", orderIds,plateIdList, plateIdList.size(), OptimizePlanService.ORDER_PLATE_MODEL, OrderModelDO.class); + orderModelDOS = esUtils.getEsDocument("orderId","plateId", orderIds,plateIdList, plateIdList.size(), ORDER_PLATE_MODEL.getIndex(), OrderModelDO.class); }else { @@ -1529,9 +1504,7 @@ public class OrderServiceImpl implements OrderService { // 板材信息 labelOrderPlateData = plateMapper.selectLabelOrderPlateDataByOrderId(orderId,organId); - Integer plateIdSize = labelOrderPlateData.stream().map(LabelOrderPlateData::getPlateId).distinct().toList().size(); - - orderModelDOS = esUtils.getEsDocument("orderId", orderIds, plateIdSize, OptimizePlanService.ORDER_PLATE_MODEL, OrderModelDO.class); + orderModelDOS = esUtils.getEsDocumentByScroll("orderId", orderIds,1000, ORDER_PLATE_MODEL.getIndex(), OrderModelDO.class); } @@ -1572,7 +1545,7 @@ public class OrderServiceImpl implements OrderService { // 补充实际选择的大板信息-即生产的信息 if(CollUtil.isNotEmpty(planIdList)){ - List actualGoodsModelDOS = esUtils.getEsDocument("planId", planIdList, planIdList.size(), PLAN_ACTUAL_GOODS_MODEL, PlanActualGoodsModelDO.class); + List actualGoodsModelDOS = esUtils.getEsDocument("planId", planIdList, planIdList.size(), PLAN_ACTUAL_GOODS_MODEL.getIndex(), PlanActualGoodsModelDO.class); if(CollUtil.isNotEmpty(actualGoodsModelDOS)) { labelOrderPlateData.forEach(f -> { diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderStatisticsServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderStatisticsServiceImpl.java index 7b232f728..b4b56346b 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderStatisticsServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderStatisticsServiceImpl.java @@ -6,7 +6,6 @@ import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch._types.FieldValue; import co.elastic.clients.elasticsearch._types.SortOrder; import co.elastic.clients.elasticsearch._types.aggregations.Aggregate; - import co.elastic.clients.elasticsearch._types.aggregations.CalendarInterval; import co.elastic.clients.elasticsearch._types.aggregations.DateHistogramAggregation; import co.elastic.clients.elasticsearch.core.SearchRequest; @@ -27,7 +26,6 @@ import com.cf.imes.module.executor.dal.mysql.plan.PlanMapper; import com.cf.imes.module.executor.dal.mysql.plate.OrderPlateStatisticsMapper; import com.cf.imes.module.executor.dal.mysql.plate.PlateGoodMapper; import com.cf.imes.module.executor.enums.OrderStatisticsUnit; -import com.cf.imes.module.executor.service.optimizeplan.OptimizePlanService; import com.cf.imes.module.system.api.dict.DictDataApi; import com.cf.imes.module.system.api.dict.dto.DictDataRespDTO; import com.cf.imes.module.system.enums.DictTypeConstants; @@ -43,16 +41,11 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjusters; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; +import static com.cf.imes.module.executor.enums.EsIndexEnum.ORDER_OPTIMIZE_PLATE_MODEL; + /** * @author Gqr * @since 2024/8/5 16:58 @@ -61,6 +54,7 @@ import java.util.stream.Collectors; @Validated @Slf4j public class OrderStatisticsServiceImpl implements OrderStatisticsService { + @Resource private OrderStatisticsMapper orderStatisticsMapper; @@ -426,7 +420,7 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService { // 查询创建时间段内,数量最多的goods_id前十 SearchRequest searchRequest = new SearchRequest.Builder() .size(0) - .index(OptimizePlanService.ORDER_OPTIMIZE_PLATE_MODEL) + .index(ORDER_OPTIMIZE_PLATE_MODEL.getIndex()) .query(q -> q.bool(b -> b .must(m -> m.range(m1 -> m1.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME) @@ -457,7 +451,7 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService { // 查询创建时间段内,数量最多的goods_id前十下的数据,按goods_id和日期分组 SearchRequest dateGroupRequest = new SearchRequest.Builder() .size(0) - .index(OptimizePlanService.ORDER_OPTIMIZE_PLATE_MODEL) + .index(ORDER_OPTIMIZE_PLATE_MODEL.getIndex()) .query(q -> q.bool(b -> b .must(m -> m.range(m1 -> m1.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME) diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/intervalometer/OrderScheduledImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/intervalometer/OrderScheduledImpl.java index 218bcf898..8bb8e94e8 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/intervalometer/OrderScheduledImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/intervalometer/OrderScheduledImpl.java @@ -12,13 +12,15 @@ import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper; import com.cf.imes.module.executor.dal.mysql.rawgoods.RawGoodsMapper; import com.cf.imes.module.executor.service.order.OrderInputProcessor; import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; +import static com.cf.imes.module.executor.enums.EsIndexEnum.ORDER_PARTS_REMARK_MODEL; +import static com.cf.imes.module.executor.enums.EsIndexEnum.ORDER_PLATE_MODEL; + /** * 生产单定时处理器 @@ -55,10 +57,6 @@ public class OrderScheduledImpl { @Resource private OrderInputProcessor orderInputProcessor; - public static final String ORDER_PLATE_MODEL = "imes_order_plate_model"; - - public static final String ORDER_PARTS_REMARK_MODEL = "imes_order_parts_remark_model"; - // @Scheduled(cron = "0 0 2 * * ?") @OrganIgnore @@ -80,9 +78,9 @@ public class OrderScheduledImpl { orderMapper.deleteBatchIds(orderDOList); // 生产单删除 // 删除板材的造型数据 es - orderInputProcessor.deleteByOrderId(orderDOList, ORDER_PLATE_MODEL); + orderInputProcessor.deleteByOrderId(orderDOList, ORDER_PLATE_MODEL.getIndex()); // 删除备注信息 es - orderInputProcessor.deleteByOrderId(orderDOList, ORDER_PARTS_REMARK_MODEL); + orderInputProcessor.deleteByOrderId(orderDOList, ORDER_PARTS_REMARK_MODEL.getIndex()); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java index cd350d09a..30ad52023 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java @@ -72,6 +72,7 @@ import static com.cf.imes.framework.common.util.json.JsonUtils.toJsonString; import static com.cf.imes.framework.common.util.string.SearchUtil.insertSeparator; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*; +import static com.cf.imes.module.executor.enums.EsIndexEnum.*; import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; /** @@ -114,14 +115,6 @@ public class PlanServiceImpl implements PlanService { @Resource private IdentifierGenerator identifierGenerator; - private static final String ORDER_REMAIN_PLATE_MODEL = "imes_order_optimize_plate_model"; - - private static final String PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL = "imes_plan_process_scheme_optimize_model"; - - private static final String PLAN_ACTUAL_GOODS_MODEL = "imes_plan_actual_goods_model"; - - private static final String PLAN_PROCESS_SCHEME_CONFIG = "imes_plan_process_scheme_config_model"; - @Resource private ElasticsearchClient elasticsearchClient; @@ -244,16 +237,32 @@ public class PlanServiceImpl implements PlanService { p.setProcessId(processId); })); - esUtils.saveEsDocument(PLAN_PROCESS_SCHEME_CONFIG,processSchemeModelDOS); - + esUtils.saveEsDocument(PLAN_PROCESS_SCHEME_CONFIG.getIndex(),processSchemeModelDOS); + // 增加排单 planMapper.insertBatch(planDOS); + // 排单明细表增加板材 planItemMapper.insertBatch(planItemDOS, planItemDOS.size()); + // 板材造型数据更新排单ID + planDOS.forEach(f->{ + + String orderNos = Optional.ofNullable(f.getOrderNos()).orElse("[]"); + + List orderIdList = JSON.parseArray(orderNos).toJavaList(Long.class).stream().toList(); + + List plateIdList = planItemDOS.stream().filter(pi -> f.getId().equals(pi.getPlanId())).map(PlanItemDO::getPlateId).toList(); + +// insertPlateModelPlanId(orderIdList,plateIdList,f.getId()); + + }); + + + // 增加实际生产选择的板材 if(CollUtil.isNotEmpty(planActualGoodsModelDOS)) { - esUtils.saveEsDocument(PLAN_ACTUAL_GOODS_MODEL, planActualGoodsModelDOS); + esUtils.saveEsDocument(PLAN_ACTUAL_GOODS_MODEL.getIndex(), planActualGoodsModelDOS); } } @@ -306,10 +315,12 @@ public class PlanServiceImpl implements PlanService { // 添加小板 List insertOrderPlateIds = Optional.ofNullable(updateReqVO.getInsertOrderPlateIds()).orElse(new ArrayList<>()); + PlanActualGoodsModelDO planActualGoodsModelDO = updateReqVO.getPlanActualGoodsModelDO(); + if(CollUtil.isNotEmpty(insertOrderPlateIds)){ PlanServiceImpl p = (PlanServiceImpl) AopContext.currentProxy(); - p.insertPlanPlate(insertOrderPlateIds); + p.insertPlanPlate(insertOrderPlateIds,planActualGoodsModelDO); } @@ -401,16 +412,18 @@ public class PlanServiceImpl implements PlanService { // 排单对应的优化数据删除 - esUtils.deleteEsDocument(FIELD_PLANID,planIds,ORDER_REMAIN_PLATE_MODEL); + esUtils.deleteEsDocument(FIELD_PLANID,planIds,ORDER_OPTIMIZE_PLATE_MODEL.getIndex()); // 删除排单对应的加工方案的优化数据 - esUtils.deleteEsDocument(FIELD_PLANID,planIds,PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL); + esUtils.deleteEsDocument(FIELD_PLANID,planIds,PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL.getIndex()); // 删除排单对应的加工方案组的配置信息 - esUtils.deleteEsDocument(FIELD_PLANID,planIds,PLAN_PROCESS_SCHEME_CONFIG); + esUtils.deleteEsDocument(FIELD_PLANID,planIds,PLAN_PROCESS_SCHEME_CONFIG.getIndex()); + // 去除生产单板材造型对应的排单ID +// removePlateModelPlanId(orderIds,planIds,new ArrayList<>()); } @@ -496,7 +509,7 @@ public class PlanServiceImpl implements PlanService { // 根据排单ID查询ES中的优化数据 - List optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLANID, planIds, 500, ORDER_REMAIN_PLATE_MODEL, OptimizeBoardModelDO.class); + List optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLANID, planIds, 500, ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), OptimizeBoardModelDO.class); // 获取排单对应的生产单的信息 @@ -567,7 +580,7 @@ public class PlanServiceImpl implements PlanService { } // 根据排单ID查询ES中的优化数据 - List optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLANID, planIds, planIds.size(), ORDER_REMAIN_PLATE_MODEL, OptimizeBoardModelDO.class); + List optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLANID, planIds, planIds.size(), ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), OptimizeBoardModelDO.class); // 获取排单对应的生产单的信息 @@ -965,6 +978,25 @@ public class PlanServiceImpl implements PlanService { List planActualGoodsResps = new ArrayList<>(); + if(savePlanPlateList.getPlanId() != null){ + + Long planId = savePlanPlateList.getPlanId(); + + PlanDO planDO = validatePlan(planId); + + if(planDO.getType().equals(PlanTypeEnum.MIXEDORDERPLAN.getType())){ + return Collections.emptyList(); + } + + List goodsItemLists = planItemMapper.selectPlanGoodsList(planId, getUserOrganId()); + + goodsItemLists.forEach(f-> f.setThickness(new BigDecimal(f.getThickness().stripTrailingZeros().toPlainString()))); + + goodsItemListList.addAll(goodsItemLists); + + } + + Map> grouped; if(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType().equals(mixedType)){ @@ -1008,7 +1040,7 @@ public class PlanServiceImpl implements PlanService { return new ArrayList<>(); } - List boardModelDOS = esUtils.getEsDocument(FIELD_PLANID, planId, ORDER_REMAIN_PLATE_MODEL, OptimizeBoardModelDO.class); + List boardModelDOS = esUtils.getEsDocument(FIELD_PLANID, planId, ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), OptimizeBoardModelDO.class); if(CollUtil.isNotEmpty(boardModelDOS)) { @@ -1241,7 +1273,7 @@ public class PlanServiceImpl implements PlanService { // 删除优化生产中未开料的小板的优化数据 - List optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLANID, deletePlanIds, processSize, ORDER_REMAIN_PLATE_MODEL, OptimizeBoardModelDO.class); + List optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLANID, deletePlanIds, processSize, ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), OptimizeBoardModelDO.class); if(CollUtil.isNotEmpty(optimizeBoardModelDOS)){ @@ -1281,7 +1313,7 @@ public class PlanServiceImpl implements PlanService { try { - esDocumentService.bulkUpdate(ORDER_REMAIN_PLATE_MODEL, optimizeBoardModelDOS); + esDocumentService.bulkUpdate(ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), optimizeBoardModelDOS); }catch (Exception e){ log.error(e.getMessage()); @@ -1326,7 +1358,7 @@ public class PlanServiceImpl implements PlanService { planMapper.deleteBatchIds(noPlanIds); // 删除排单对应的优化生产数据 - esUtils.deleteEsDocument(FIELD_PLANID,planIds,ORDER_REMAIN_PLATE_MODEL); + esUtils.deleteEsDocument(FIELD_PLANID,planIds,ORDER_OPTIMIZE_PLATE_MODEL.getIndex()); } @@ -1349,30 +1381,50 @@ public class PlanServiceImpl implements PlanService { List orderIds = planItemMapper.selectOrderPlateList(deleteOrderIds, getUserOrganId()); - List diff = Stream.concat( - orderIds.stream().filter(str -> !deleteOrderIds.contains(str)), - deleteOrderIds.stream().filter(str -> !orderIds.contains(str))) - .toList(); + List diff = Stream.concat( + orderIds.stream().filter(str -> !deleteOrderIds.contains(str)), + deleteOrderIds.stream().filter(str -> !orderIds.contains(str))) + .toList(); - if(CollUtil.isNotEmpty(diff)){ + if(CollUtil.isNotEmpty(diff)){ - List orderList = orderMapper.selectBatchIds(diff); + List orderList = orderMapper.selectBatchIds(diff); - orderList.forEach(f->f.setStatus(OrderStatusEnum.NEW_ORDER.getStatus())); + orderList.forEach(f->f.setStatus(OrderStatusEnum.NEW_ORDER.getStatus())); - orderMapper.updateBatch(orderList); - } + orderMapper.updateBatch(orderList); + } + + // 去除生产单板材造型对应的排单ID +// removePlateModelPlanId(deleteOrderIds,deletePlanIds,deletePlateIds); } @Transactional(rollbackFor = Exception.class) - public void insertPlanPlate(List insertOrderPlateIds){ + public void insertPlanPlate(List insertOrderPlateIds,PlanActualGoodsModelDO planActualGoodsModelDO){ // 后面还需要看看是否需要进行混单的判断 List insertPlanIds = insertOrderPlateIds.stream().map(OrderPlateIds::getPlanId).distinct().toList(); - List planDOS = validatePlanExists(insertPlanIds); + + PlanDO planDO = validatePlan(insertPlanIds.get(0)); + + List orderIds = new ArrayList<>(insertOrderPlateIds.stream().map(OrderPlateIds::getOrderId).distinct().toList()); + + if(planActualGoodsModelDO != null){ + + List mixedTypes = insertOrderPlateIds.stream().map(OrderPlateIds::getMixedType).distinct().toList(); + + Integer mixedType = mixedTypes.get(0) == null ? 0 : mixedTypes.get(0); + + planDO.setType(PlanTypeEnum.MIXEDORDERPLAN.getType()); + planDO.setFilter(mixedType); + + esUtils.saveEsDocument(PLAN_ACTUAL_GOODS_MODEL.getIndex(), Collections.singletonList(planActualGoodsModelDO)); + + } + List planItemDOS = new ArrayList<>(); @@ -1386,19 +1438,17 @@ public class PlanServiceImpl implements PlanService { }); - planDOS.forEach(f->{ - if(f.getStatus().equals(PlanStatusEnum.OPENED.getStatus())){ - f.setStatus(PlanStatusEnum.OPENING.getStatus()); - } + if(planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())){ - List orderIds = new ArrayList<>(insertOrderPlateIds.stream().map(OrderPlateIds::getOrderId).distinct().toList()); + planDO.setStatus(PlanStatusEnum.OPENING.getStatus()); + planDO.setProduceTime(null); + } - orderIds.addAll(JSON.parseArray(f.getOrderNos()).toJavaList(Long.class).stream().distinct().toList()); - f.setOrderNos(orderIds.stream().distinct().toList().toString()); + orderIds.addAll(JSON.parseArray(planDO.getOrderNos()).toJavaList(Long.class).stream().distinct().toList()); - }); + planDO.setOrderNos(orderIds.stream().distinct().toList().toString()); // 有新添加的小板,修改优化信息的字段信息 @@ -1408,7 +1458,7 @@ public class PlanServiceImpl implements PlanService { UpdateByQueryRequest.Builder builder = new UpdateByQueryRequest.Builder(); - builder.index(ORDER_REMAIN_PLATE_MODEL) + builder.index(ORDER_OPTIMIZE_PLATE_MODEL.getIndex()) .query(qb -> qb.bool(bq -> bq.filter(f->{ f.terms(t->t.field(FIELD_PLANID).terms(e->e.value(fieldValues))); return f; @@ -1435,7 +1485,19 @@ public class PlanServiceImpl implements PlanService { planItemMapper.insertBatch(planItemDOS); - planMapper.updateBatch(planDOS); + planMapper.update(new LambdaUpdateWrapper() + .eq(PlanDO::getOrganId,getUserOrganId()) + .eq(PlanDO::getId,planDO.getId()) + + .set(PlanDO::getProduceTime,planDO.getProduceTime()) + .set(PlanDO::getStatus,planDO.getStatus()) + .set(PlanDO::getType,planDO.getType()) + .set(PlanDO::getOrderNos,planDO.getOrderNos()) + .set(PlanDO::getFilter,planDO.getFilter()) + ); + + // 生产单板材造型信息增加排单ID +// insertPlateModelPlanId(orderIds,insertPlateIds,insertPlanIds.get(0)); } @@ -1445,8 +1507,6 @@ public class PlanServiceImpl implements PlanService { - - public static Map> groupByMaterialAndThickness(List items) { Map> groupedItems = new HashMap<>(); @@ -1657,15 +1717,14 @@ public class PlanServiceImpl implements PlanService { try { - UpdateByQueryRequest.Builder builder = new UpdateByQueryRequest.Builder(); List fieldValues = planIds.stream().map(FieldValue::of).toList(); - builder.index(PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL) + builder.index(PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL.getName()) .query(qb -> qb.bool(bq -> bq - .must(mq -> mq.terms(tq -> tq.field(FIELD_PLANID).terms(t->t.value(fieldValues)))) - .must(mq -> mq.match(mtq -> mtq.field("machineType").query(MachineTypeEnum.CUTTING.getType()))) + .filter(mq -> mq.terms(tq -> tq.field(FIELD_PLANID).terms(t->t.value(fieldValues)))) + .filter(mq -> mq.match(mtq -> mtq.field("machineType").query(MachineTypeEnum.CUTTING.getType()))) )) .script(s -> s.inline(i -> i .source("ctx._source.isOptimized = params.new_value") @@ -1683,6 +1742,40 @@ public class PlanServiceImpl implements PlanService { } + } + + + + + private void insertPlateModelPlanId(List orderIds,List plateIds,Long planId) { + + try { + + UpdateByQueryRequest.Builder builder = new UpdateByQueryRequest.Builder(); + + List fieldValues1 = orderIds.stream().map(FieldValue::of).toList(); + List fieldValues2 = plateIds.stream().map(FieldValue::of).toList(); + + builder.index(ORDER_PLATE_MODEL.getIndex()) + .query(qb -> qb.bool(bq -> bq + .filter(f->f.terms(t->t.field("orderId").terms(ts->ts.value(fieldValues1)))) + .filter(f->f.terms(t->t.field("plateId").terms(ts->ts.value(fieldValues2)))) + )) + .script(s -> s.inline(i -> i + .source("ctx._source.planId = params.new_value") + .params("new_value", JsonData.of(planId)) + )); + + UpdateByQueryRequest request = builder.build(); + + // 执行更新操作 + elasticsearchClient.updateByQuery(request); + + }catch (Exception e){ + log.error("排单加工方案状态更新异常:"+e.getMessage()); + throw new ServiceException(DATA_DATA_ERROR); + + } } @@ -1690,8 +1783,53 @@ public class PlanServiceImpl implements PlanService { + + private void removePlateModelPlanId(List orderIds,List planIds,List plateIds) { + + try { + + UpdateByQueryRequest.Builder builder = new UpdateByQueryRequest.Builder(); + + List fieldValues1 = orderIds.stream().map(FieldValue::of).toList(); + + List fieldValues2 = planIds.stream().map(FieldValue::of).toList(); + + List fieldValues3 = plateIds.stream().map(FieldValue::of).toList(); + + builder.index(ORDER_PLATE_MODEL.getIndex()) + .query(qb -> qb.bool(bq -> { + bq.filter(f->f.terms(t->t.field("orderId").terms(ts->ts.value(fieldValues1)))); + bq.filter(f->f.terms(t->t.field(FIELD_PLANID).terms(ts->ts.value(fieldValues2)))); + + if(CollUtil.isNotEmpty(plateIds)){ + bq.filter(f->f.terms(t->t.field("plateId").terms(ts->ts.value(fieldValues3)))); + } + + return bq; + } + )) + .script(s -> s.inline(i -> i + .source("ctx._source.planId = params.new_value") + .params("new_value", JsonData.of(0)) + )); + + UpdateByQueryRequest request = builder.build(); + + // 执行更新操作 + elasticsearchClient.updateByQuery(request); + + }catch (Exception e){ + log.error("排单加工方案状态更新异常:"+e.getMessage()); + throw new ServiceException(DATA_DATA_ERROR); + + } + + } + + + + public static void mergeOrderGoodsLists(List list1, List list2) { - // Build a map for quick lookup of items in list1 by their unique properties Map list1Map = new HashMap<>(); for (OrderGoodsResp item1 : list1) { String key = generateKey(item1); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java index fccd10f3d..ccd56ad91 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java @@ -10,10 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; -import com.cf.imes.framework.common.enums.MixConfigTypeEnum; -import com.cf.imes.framework.common.enums.OrderPlateCutStatusEnum; -import com.cf.imes.framework.common.enums.OrderPlateTypeEnum; -import com.cf.imes.framework.common.enums.PlanTypeEnum; +import com.cf.imes.framework.common.enums.*; import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil; import com.cf.imes.framework.common.pojo.PageResult; @@ -67,7 +64,8 @@ import java.util.stream.Collectors; import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; -import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PLAN_NOT_EXISTS; +import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*; +import static com.cf.imes.module.executor.enums.EsIndexEnum.ORDER_PLATE_MODEL; import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; /** * 生产单板件 Service 实现类 @@ -125,10 +123,6 @@ public class PlateServiceImpl implements PlateService { @Resource private IdentifierGenerator identifierGenerator; - private static final String ORDER_REMAIN_PLATE_MODEL = "imes_order_optimize_plate_model"; - - private static final String ORDER_PLATE_MODEL = "imes_order_plate_model"; - private static final String FIELD_PLATE_ID = "plateId"; private static final String FIELD_OG_MATERIAL = "og.material"; private static final String FIELD_OG_BRAND = "og.brand"; @@ -301,35 +295,20 @@ public class PlateServiceImpl implements PlateService { // 混单 if(planDO.getType().equals(PlanTypeEnum.MIXEDORDERPLAN.getType())){ - // 相同材质和厚度 - if(planDO.getFilter().equals(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType())){ - queryWrapperX - .inIfPresent(FIELD_OG_MATERIAL,material) - .likeIfPresent(FIELD_OG_BRAND,pageReqVO.getBrand()) - .likeIfPresent(FIELD_OG_COLOR,pageReqVO.getColor()) - .inIfPresent(FIELD_OP_THICKNESS,thickness); - } - // 相同厚度 - else { - queryWrapperX - .likeIfPresent(FIELD_OG_MATERIAL,pageReqVO.getMaterial()) - .likeIfPresent(FIELD_OG_BRAND,pageReqVO.getBrand()) - .likeIfPresent(FIELD_OG_COLOR,pageReqVO.getColor()) - .inIfPresent(FIELD_OP_THICKNESS,thickness); - } + // 混单添加查询条件 + mixedInsertQuery(pageReqVO,planDO,material,thickness,queryWrapperX); } // 非混单 else { - queryWrapperX - .inIfPresent(FIELD_OG_MATERIAL,material) - .inIfPresent(FIELD_OG_BRAND,brand) - .inIfPresent(FIELD_OG_COLOR,color) - .inIfPresent(FIELD_OP_THICKNESS,thickness); - } + // 非混单条件查询条件 + noMixedInsertQuery(pageReqVO,planDO,material,brand,color,thickness,queryWrapperX); + + } } + // 无排单ID时 else { @@ -449,7 +428,7 @@ public class PlateServiceImpl implements PlateService { .select(OrderItemDO::getBodyId) ); List plateIds = list.stream().map(BodyPlateIdDTO::getPlateId).collect(Collectors.toList()); - List orderModelDOS = buildRespByPlateIds(plateIds, ORDER_PLATE_MODEL); + List orderModelDOS = buildRespByPlateIds(plateIds, ORDER_PLATE_MODEL.getIndex()); Map> map = orderModelDOS.stream().collect(Collectors.groupingBy(e -> { return list.stream().filter(f -> Objects.equals(f.getPlateId(), e.getPlateId())).map(BodyPlateIdDTO::getBodyId).findAny().orElse(null); })); @@ -662,4 +641,93 @@ public class PlateServiceImpl implements PlateService { } + + + private void mixedInsertQuery(NoPlanPlatePageReqVO pageReqVO, + PlanDO planDO, + List material, + List thickness, + QueryWrapperX queryWrapperX){ + + + + if(Boolean.TRUE.equals(pageReqVO.getIsMixed())){ + throw exception(PLAN_IS_MIXED_ERROR); + } + + // 相同材质和厚度 + if(planDO.getFilter().equals(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType())){ + + queryWrapperX + .inIfPresent(FIELD_OG_MATERIAL,material) + .likeIfPresent(FIELD_OG_BRAND,pageReqVO.getBrand()) + .likeIfPresent(FIELD_OG_COLOR,pageReqVO.getColor()) + .inIfPresent(FIELD_OP_THICKNESS,thickness); + + } + // 相同厚度 + else { + + queryWrapperX + .likeIfPresent(FIELD_OG_MATERIAL,pageReqVO.getMaterial()) + .likeIfPresent(FIELD_OG_BRAND,pageReqVO.getBrand()) + .likeIfPresent(FIELD_OG_COLOR,pageReqVO.getColor()) + .inIfPresent(FIELD_OP_THICKNESS,thickness); + + } + + + } + + + + + + private void noMixedInsertQuery(NoPlanPlatePageReqVO pageReqVO, + PlanDO planDO, + List material, + List brand, + List color, + List thickness, + QueryWrapperX queryWrapperX){ + + // 是否开启混单 + if(Boolean.TRUE.equals(pageReqVO.getIsMixed())){ + + if(!planDO.getStatus().equals(PlanStatusEnum.NOCUTTING.getStatus())){ + throw exception(PLAN_PLATE_IS_CUTTING); + } + + // 相同材质和厚度 混单 + if(pageReqVO.getMixedType().equals(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType())){ + queryWrapperX + .inIfPresent(FIELD_OG_MATERIAL, material) + .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand()) + .likeIfPresent(FIELD_OG_COLOR, pageReqVO.getColor()) + .inIfPresent(FIELD_OP_THICKNESS, thickness); + + } + // 相同厚度 混单 + else{ + queryWrapperX + .likeIfPresent(FIELD_OG_MATERIAL, pageReqVO.getMaterial()) + .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand()) + .likeIfPresent(FIELD_OG_COLOR, pageReqVO.getColor()) + .inIfPresent(FIELD_OP_THICKNESS, thickness); + + } + }else { + queryWrapperX + .inIfPresent(FIELD_OG_MATERIAL, material) + .inIfPresent(FIELD_OG_BRAND, brand) + .inIfPresent(FIELD_OG_COLOR, color) + .inIfPresent(FIELD_OP_THICKNESS, thickness); + + } + + } + + + + } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-local.yaml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-local.yaml index 24c16ec11..b8fa52973 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-local.yaml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-local.yaml @@ -69,6 +69,13 @@ spring: database: 0 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 + +# 发票文件保存路径 +invoice: + filepath: E:\ceshi123\ + + + --- #################### MQ 消息队列相关配置 #################### # rocketmq 配置项,对应 RocketMQProperties 配置类 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/funds/balancedetails/IncomeExpenseDetailsMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/funds/balancedetails/IncomeExpenseDetailsMapper.xml new file mode 100644 index 000000000..37cfbaa6e --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/funds/balancedetails/IncomeExpenseDetailsMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/funds/invoice/InvoiceRecordsMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/funds/invoice/InvoiceRecordsMapper.xml new file mode 100644 index 000000000..1192482e4 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/funds/invoice/InvoiceRecordsMapper.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/funds/purchase/PurchaseRecordMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/funds/purchase/PurchaseRecordMapper.xml new file mode 100644 index 000000000..ea7256822 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/funds/purchase/PurchaseRecordMapper.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/planitem/PlanItemMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/planitem/PlanItemMapper.xml index b47554e29..281b8e06b 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/planitem/PlanItemMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/planitem/PlanItemMapper.xml @@ -38,7 +38,7 @@ ${ew.customSqlSegment} - group by o.id + group by o.id,o.order_date,o.delivery_date,o.customer,o.address,o.custom_order_no,o.status order by o.id desc limit #{pageNo},#{pageSize}; @@ -584,4 +584,27 @@ + + + + \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml index e01c1d138..2629fa0be 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml @@ -447,11 +447,7 @@ where op.organ_id = #{organId} and op.deleted = false - - and op.order_id in - - #{orderIds} - + and op.order_id = #{orderId} diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/funds/SystemFundsApi.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/funds/SystemFundsApi.java new file mode 100644 index 000000000..2e411fc50 --- /dev/null +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/funds/SystemFundsApi.java @@ -0,0 +1,47 @@ +package com.cf.imes.module.system.api.funds; + + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.module.system.api.funds.dto.InvoiceTitleInfoDTO; +import com.cf.imes.module.system.api.funds.dto.OrganAmountDTO; +import com.cf.imes.module.system.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.math.BigDecimal; + +/** + * @author 资金管理feign接口 + */ +@FeignClient(name = ApiConstants.NAME) // TODO 晨丰:fallbackFactory = +@Tag(name = "RPC 服务 - 资金管理") +public interface SystemFundsApi { + + + String PREFIX = ApiConstants.PREFIX + "/funds"; + + + @GetMapping(PREFIX + "/amount/reduce") + @Operation(summary = "减少组织可开票的金额") + CommonResult reduceOrganAmount(@RequestParam("organId") Long organId,@RequestParam("invoiceAmount") BigDecimal invoiceAmount); + + + @GetMapping(PREFIX + "/amount/add") + @Operation(summary = "增加组织可开票的金额") + CommonResult addOrganAmount(@RequestParam("organId") Long organId,@RequestParam("invoiceAmount") BigDecimal invoiceAmount); + + + @GetMapping(PREFIX + "/amount/organ") + @Operation(summary = "获取组织的资金信息") + CommonResult getOrganAmount(@RequestParam("organId") Long organId); + + + @GetMapping(PREFIX + "/invoice/title") + @Operation(summary = "获取发票的抬头信息") + CommonResult getInvoiceTitle(@RequestParam("invoiceTitleId") Long invoiceTitleId); + + +} diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/funds/dto/InvoiceTitleInfoDTO.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/funds/dto/InvoiceTitleInfoDTO.java new file mode 100644 index 000000000..9b9df8aaa --- /dev/null +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/funds/dto/InvoiceTitleInfoDTO.java @@ -0,0 +1,57 @@ +package com.cf.imes.module.system.api.funds.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + + +@Schema(description = "RPC 服务 - 发票的抬头信息") +@Data +public class InvoiceTitleInfoDTO { + + + @Schema(description = "抬头ID") + private Long id; + + + @Schema(description = "组织ID") + private Long organId; + + + @Schema(description = "发票抬头") + private String invoiceTitle; + + + @Schema(description = "开具类型") + private Integer issueType; + + + @Schema(description = "发票类型") + private Integer invoiceType; + + + @Schema(description = "纳税人识别号") + private String taxpayerId; + + + @Schema(description = "开户银行名称") + private String bankName; + + + @Schema(description = "开户银行账号") + private String bankAccount; + + + @Schema(description = "注册场所地址") + private String registeredAddress; + + + @Schema(description = "注册固定电话") + private String fixedPhone; + + + @Schema(description = "邮箱") + private String email; + + +} + diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/funds/dto/OrganAmountDTO.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/funds/dto/OrganAmountDTO.java new file mode 100644 index 000000000..b2f67e969 --- /dev/null +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/funds/dto/OrganAmountDTO.java @@ -0,0 +1,43 @@ +package com.cf.imes.module.system.api.funds.dto; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Schema(description = "RPC 服务 - 组织的资金信息") +@Data +public class OrganAmountDTO { + + + @Schema(description = "主键") + private Long id; + + + @Schema(description = "组织ID") + private Long organId; + + + @Schema(description = "现金金额") + private BigDecimal amount; + + + @Schema(description = "赠送金额") + private BigDecimal giftAmount; + + + @Schema(description = "货币类型") + private Integer currency; + + + @Schema(description = "货币单位") + private String currencyUnit; + + + @Schema(description = "可开票金额") + private BigDecimal invoiceableAmount; + + + +} diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/organ/OrganApi.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/organ/OrganApi.java index f3be94e48..3bc76cf29 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/organ/OrganApi.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/organ/OrganApi.java @@ -2,17 +2,17 @@ package com.cf.imes.module.system.api.organ; import com.cf.imes.framework.common.pojo.CommonResult; import com.cf.imes.module.system.api.organ.dto.OrgStatisticsReqDTO; +import com.cf.imes.module.system.api.organ.dto.OrganizationDTO; import com.cf.imes.module.system.enums.ApiConstants; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import javax.validation.Valid; -import java.time.LocalDate; import java.util.List; import java.util.Map; @@ -42,4 +42,16 @@ public interface OrganApi { @GetMapping(PREFIX + "/warn/org") @Operation(summary = "组织过期日期统计") CommonResult>> getWarnToOrg(); + + + @GetMapping(PREFIX + "/organ-details") + @Operation(summary = "根据组织ID获取组织的详细信息") + CommonResult getOrganDetails(@RequestParam("organId") Long organId); + + + @GetMapping(PREFIX + "/name-details") + @Operation(summary = "根据组织名称获取组织的信息") + CommonResult> getOrganDetailsByName(@RequestParam("organName") String organName); + + } diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/organ/dto/OrganizationDTO.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/organ/dto/OrganizationDTO.java new file mode 100644 index 000000000..5be5fe500 --- /dev/null +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/organ/dto/OrganizationDTO.java @@ -0,0 +1,32 @@ +package com.cf.imes.module.system.api.organ.dto; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * @author 组织的信息 + */ +@Schema(description = "RPC 服务 - 组织的信息 Resp DTO") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class OrganizationDTO implements Serializable { + + private static final long serialVersionUID = 1788458794035807655L; + + + @Schema(description = "组织ID") + private Long id; + + + @Schema(description = "组织名称") + private String name; + + + +} diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java index 8e25bbaa4..737112805 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java @@ -420,6 +420,21 @@ public class ErrorCodeConstants { public static final ErrorCode INVOICE_FILE_UPLOAD_FAILED = new ErrorCode(1_002_043_005, "发票附件上传失败,请重新上传"); public static final ErrorCode INVOICE_FILE_IS_NULL_NOT_DOWNLOAD = new ErrorCode(1_002_043_006, "发票附件不存在,无法下载"); public static final ErrorCode INVOICE_FILE_DATA_ERROR = new ErrorCode(1_002_043_007, "发票附件下载失败,请重新下载或稍等重试"); + public static final ErrorCode PURCHASE_RECORD_NO_EXIST = new ErrorCode(1_002_043_008, "当前发票对应的购买记录有误,请删除重新创建发票"); + public static final ErrorCode INVOICE_TITLE_NO_EXIST = new ErrorCode(1_002_043_009, "发票抬头信息有误,请进行查看"); + public static final ErrorCode THIS_INVOICE_IS_FAIL = new ErrorCode(1_002_043_010, "当前发票以开票,无法再次进行开票"); + public static final ErrorCode THIS_INVOICE_IS_SUCCESS = new ErrorCode(1_002_043_011, "当前发票已经开票,无法再次进行开票"); + public static final ErrorCode PRODUCTS_IS_EXIST = new ErrorCode(1_002_043_012, "当前名称的产品已存在,无法新增产品"); + public static final ErrorCode PRODUCTS_NO_DELETE = new ErrorCode(1_002_043_013, "当前产品以上架,无法删除,请下架后再删除"); + public static final ErrorCode PRODUCTS_NO_UPDATE = new ErrorCode(1_002_043_014, "当前产品以上架,无法进行修改"); + public static final ErrorCode PRODUCTS_DETAIL_NO_UPDATE = new ErrorCode(1_002_043_016, "定价规则对应的产品已上架,无法进行修改"); + public static final ErrorCode ADVERTISEMENT_START_TIME_ERROR = new ErrorCode(1_003_043_017, "广告开始时间选择有误,应等于或大于当日"); + public static final ErrorCode ADVERTISEMENT_TIME_ERROR = new ErrorCode(1_003_043_018, "时间选择有误,结束时间应大于或等于开始时间"); + public static final ErrorCode ADVERTISEMENT_NAME_IS_EXIST = new ErrorCode(1_003_043_019, "当前名称的广告已存在,请重新命名"); + public static final ErrorCode ADVERTISEMENT_NO_DELETE = new ErrorCode(1_003_043_020, "当前广告已经发布,无法删除,请结束发布后再删除"); + public static final ErrorCode ADVERTISEMENT_REPUBLISH_NO_TIME = new ErrorCode(1_003_043_021, "广告重新发布,应重新选择投放时间"); + public static final ErrorCode RECHARGE_ACTIVE_NAME_IS_EXIST = new ErrorCode(1_004_043_022, "当前赠送金活动名称已存在,请修改"); + public static final ErrorCode IMAGE_UPLOAD_ERROR = new ErrorCode(1_004_043_023, "图片上传失败,请重试或重新选择图片"); //=========== 支付相关 1-002-044-000 ============ public static final ErrorCode PAY_CHANNEL_NOT_SUPPORT = new ErrorCode(1_002_044_000, "暂不支持的支付渠道,请使用其他支付渠道"); @@ -437,7 +452,7 @@ public class ErrorCodeConstants { public static final ErrorCode PRODUCTS_DETAIL_DURATION_EXIST = new ErrorCode(1_002_045_005, "存在当前时长的产品定价规则"); public static final ErrorCode PRODUCTS_DETAIL_OUTPUT_EXIST = new ErrorCode(1_002_045_006, "存在当前产量的产品定价规则"); public static final ErrorCode PRODUCTS_DURATION_NUM_ERR = new ErrorCode(1_002_045_007, "产品定价规则,时长数据设置有误"); - public static final ErrorCode PRODUCTS_DURATION_INT_ERR = new ErrorCode(1_002_045_008, "产品定价规则,时长数据为正整数"); + public static final ErrorCode PRODUCTS_DURATION_INT_ERR = new ErrorCode(1_002_045_008, "产品定价规则:时长必须为整数且大于 0"); public static final ErrorCode PRODUCTS_DURATION_UNIT_ERR = new ErrorCode(1_002_045_009, "产品定价规则,时长单位设置有误"); //=========== 广告相关 1-002-046-000 ============ @@ -451,4 +466,13 @@ public class ErrorCodeConstants { public static final ErrorCode RECHARGE_ACTIVE_NO_EXIST = new ErrorCode(1_004_001_001, "当前赠送金活动不存在"); + + + + //=========== 解析器管理 1-002-044-000 ============ + public static final ErrorCode PARSER_NO_EXIST = new ErrorCode(1_002_044_001, "当前解析器不存在,请重新选择"); + + public static final ErrorCode PARSER_TEMPLATE_NO_EXIST = new ErrorCode(1_002_044_002, "当前解析器模板不存在,请重新选择"); + + } diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/advertisement/AdvertisementStatusEnum.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/advertisement/AdvertisementStatusEnum.java index 3a8727b65..b18742a26 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/advertisement/AdvertisementStatusEnum.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/advertisement/AdvertisementStatusEnum.java @@ -5,7 +5,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import java.util.Arrays; -import java.util.Objects; /** * 广告状态单位态枚举 @@ -16,10 +15,9 @@ import java.util.Objects; @AllArgsConstructor public enum AdvertisementStatusEnum implements IntArrayValuable { - ALL(0, "全部"), - UNPUBLISHED(1, "未发布"), - PUBLISHED(2, "已发布"), - ENDED(3, "已结束"); + UNPUBLISHED(0, "未发布"), + PUBLISHED(1, "已发布"), + ENDED(2, "已结束"); public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(AdvertisementStatusEnum::getStatus).toArray(); @@ -37,28 +35,5 @@ public enum AdvertisementStatusEnum implements IntArrayValuable { return ARRAYS; } - public static boolean isAll(String name) { - return Objects.equals(ALL.name, name); - } - public static boolean isUnpublished(String name) { - return Objects.equals(UNPUBLISHED.name, name); - } - - public static boolean isPublished(String name) { - return Objects.equals(PUBLISHED.name, name); - } - - public static boolean isEnded(String name) { - return Objects.equals(ENDED.name, name); - } - - public static Integer getNameByStatus(String name) { - for (AdvertisementStatusEnum e : values()) { - if (e.getName().equals(name)) { - return e.getStatus(); - } - } - return null; - } } diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/products/DurationUnitEnum.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/products/DurationUnitEnum.java index b1e735437..4af5feb30 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/products/DurationUnitEnum.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/products/DurationUnitEnum.java @@ -16,9 +16,9 @@ import java.util.Objects; @AllArgsConstructor public enum DurationUnitEnum implements IntArrayValuable { - YEAR(0, "year"), - MONTH(1, "month"), - DAY(2, "day"); + YEAR(0, "年"), + MONTH(1, "月"), + DAY(2, "日"); public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(DurationUnitEnum::getStatus).toArray(); diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/products/ProductStatusEnum.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/products/ProductStatusEnum.java index 015314964..17b0094aa 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/products/ProductStatusEnum.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/products/ProductStatusEnum.java @@ -16,10 +16,10 @@ import java.util.Objects; @AllArgsConstructor public enum ProductStatusEnum implements IntArrayValuable { - PRODUCT_ALL(0, "全部"), - PRODUCT_WAITING_UPDATES(1, "待上架"), - PRODUCT_UPDATES(2, "已上架"), - PRODUCT_DELIS(3, "已下架"); + + PRODUCT_WAITING_UPDATES(0, "待上架"), + PRODUCT_UPDATES(1, "已上架"), + PRODUCT_DELIS(2, "已下架"); public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(ProductStatusEnum::getStatus).toArray(); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/SystemServerApplication.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/SystemServerApplication.java index be0d9596a..dd29752c2 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/SystemServerApplication.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/SystemServerApplication.java @@ -2,11 +2,13 @@ package com.cf.imes.module.system; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; /** * 项目的启动类 * @author 晨丰科技 */ +@EnableScheduling @SpringBootApplication public class SystemServerApplication { diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/funds/SystemFundsApiImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/funds/SystemFundsApiImpl.java new file mode 100644 index 000000000..ccc349434 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/funds/SystemFundsApiImpl.java @@ -0,0 +1,115 @@ +package com.cf.imes.module.system.api.funds; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.util.Assert.AssertUtils; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.module.system.api.funds.dto.InvoiceTitleInfoDTO; +import com.cf.imes.module.system.api.funds.dto.OrganAmountDTO; +import com.cf.imes.module.system.dal.dataobject.funds.invoice.InvoiceTitleInfoDO; +import com.cf.imes.module.system.dal.dataobject.funds.organamount.OrganAmountDO; +import com.cf.imes.module.system.dal.mysql.funds.invoice.InvoiceTitleInfoMapper; +import com.cf.imes.module.system.dal.mysql.funds.organamount.OrganAmountMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.math.BigDecimal; + +import static com.cf.imes.module.system.enums.ErrorCodeConstants.INVOICE_TITLE_NO_EXIST; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.ORGAN_AMOUNT_NO_EXIST; + + +/** + * @author 资金管理feign实现类 + */ +@RestController +@Validated +@Slf4j +public class SystemFundsApiImpl implements SystemFundsApi { + + @Resource + private OrganAmountMapper organAmountMapper; + + + @Resource + private InvoiceTitleInfoMapper invoiceTitleInfoMapper; + + + @Override + public CommonResult reduceOrganAmount(Long organId, BigDecimal invoiceAmount) { + + OrganAmountDO organAmountDO = validateOrganAmountExists(organId); + + BigDecimal invoiceableAmount = organAmountDO.getInvoiceableAmount().subtract(invoiceAmount); + + if(invoiceableAmount.signum() < 0){ + invoiceableAmount = BigDecimal.valueOf(0); + } + + + organAmountDO.setInvoiceableAmount(invoiceableAmount); + organAmountMapper.updateById(organAmountDO); + + return CommonResult.success(Boolean.TRUE); + + } + + + + + @Override + public CommonResult addOrganAmount(Long organId, BigDecimal invoiceAmount) { + + OrganAmountDO organAmountDO = validateOrganAmountExists(organId); + + BigDecimal invoiceableAmount = organAmountDO.getInvoiceableAmount().add(invoiceAmount); + + + organAmountDO.setInvoiceableAmount(invoiceableAmount); + organAmountMapper.updateById(organAmountDO); + + return CommonResult.success(Boolean.TRUE); + + } + + @Override + public CommonResult getOrganAmount(Long organId) { + + return CommonResult.success(BeanUtils.toBean(validateOrganAmountExists(organId),OrganAmountDTO.class)); + + } + + + @Override + public CommonResult getInvoiceTitle(Long invoiceTitleId) { + + InvoiceTitleInfoDO invoiceTitleInfoDO = invoiceTitleInfoMapper.selectById(invoiceTitleId); + + AssertUtils.notEmpty(invoiceTitleInfoDO,INVOICE_TITLE_NO_EXIST); + + return CommonResult.success(BeanUtils.toBean(invoiceTitleInfoDO,InvoiceTitleInfoDTO.class)); + + } + + + + + + private OrganAmountDO validateOrganAmountExists(Long organId) { + + OrganAmountDO organAmountDO = organAmountMapper.selectOne(new LambdaUpdateWrapper() + .eq(OrganAmountDO::getOrganId, organId) + .eq(OrganAmountDO::getDeleted, false)); + + AssertUtils.notEmpty(organAmountDO,ORGAN_AMOUNT_NO_EXIST); + + return organAmountDO; + + } + + + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/organ/OrganApiImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/organ/OrganApiImpl.java index 1e426613e..f7cf5e7d2 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/organ/OrganApiImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/organ/OrganApiImpl.java @@ -3,9 +3,12 @@ package com.cf.imes.module.system.api.organ; import cn.hutool.core.util.ObjectUtil; import com.cf.imes.framework.common.enums.OrderStatisticsUnit; import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.module.system.api.organ.dto.OrgStatisticsIsLapseRespDTO; import com.cf.imes.module.system.api.organ.dto.OrgStatisticsReqDTO; +import com.cf.imes.module.system.api.organ.dto.OrganizationDTO; import com.cf.imes.module.system.controller.admin.organ.vo.organ.OrganRespVO; +import com.cf.imes.module.system.dal.mysql.organ.OrganMapper; import com.cf.imes.module.system.service.organ.OrganService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RestController; @@ -27,6 +30,11 @@ public class OrganApiImpl implements OrganApi { @Resource private OrganService organService; + + @Resource + private OrganMapper organMapper; + + @Override public CommonResult> getOrganIdList() { return success(organService.getOrganIdList()); @@ -107,6 +115,20 @@ public class OrganApiImpl implements OrganApi { return success(map); } + @Override + public CommonResult getOrganDetails(Long organId) { + + return success(BeanUtils.toBean(organService.validOrgan(organId),OrganizationDTO.class)); + } + + + @Override + public CommonResult> getOrganDetailsByName(String organName) { + + return null; + } + + private void setOrgStatisticsReqVO(OrgStatisticsReqDTO reqVO){ if (ObjectUtil.isNull(reqVO.getUnit())){ reqVO.setUnit(OrderStatisticsUnit.DAY.getValue()); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/advertisement/AdvertisementController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/advertisement/AdvertisementController.java deleted file mode 100644 index cc12b33c0..000000000 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/advertisement/AdvertisementController.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.cf.imes.module.system.controller.admin.advertisement; - -import com.cf.imes.framework.common.pojo.CommonResult; -import com.cf.imes.framework.common.pojo.PageResult; -import com.cf.imes.framework.common.util.object.BeanUtils; -import com.cf.imes.module.system.controller.admin.advertisement.vo.AdvertisementPageReqVO; -import com.cf.imes.module.system.controller.admin.advertisement.vo.AdvertisementRespVO; -import com.cf.imes.module.system.controller.admin.advertisement.vo.AdvertisementSaveReqVO; -import com.cf.imes.module.system.dal.dataobject.advertisement.AdvertisementDO; -import com.cf.imes.module.system.enums.advertisement.AdvertisementStatusEnum; -import com.cf.imes.module.system.service.advertisement.AdvertisementService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.extern.slf4j.Slf4j; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; -import javax.validation.Valid; - -import static com.cf.imes.framework.common.pojo.CommonResult.success; - -@Tag(name = "管理后台 - 广告管理") -@RestController -@RequestMapping("/system/ad") -@Validated -@Slf4j -public class AdvertisementController { - - @Resource - private AdvertisementService advertisementService; - - @PostMapping("/create") - @Operation(summary = "新建广告") - @PreAuthorize("@ss.hasPermission('base:advertisement:create')") - public CommonResult createAdvertisement(@Valid @RequestBody AdvertisementSaveReqVO createReqVO) { - return success(advertisementService.create(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新广告") - @PreAuthorize("@ss.hasPermission('base:advertisement:update')") - public CommonResult updateAdvertisement(@Valid @RequestBody AdvertisementSaveReqVO updateReqVO) { - AdvertisementDO productsDO = BeanUtils.toBean(updateReqVO, AdvertisementDO.class); - advertisementService.update(productsDO, 0); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除广告") - @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('base:advertisement:delete')") - public CommonResult deleteAdvertisement(@RequestParam("id") Long id) { - advertisementService.delete(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得广告") - @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('base:advertisement:query')") - public CommonResult getAdvertisement(@RequestParam("id") Long id) { - AdvertisementDO productRespVO = advertisementService.get(id); - return success(BeanUtils.toBean(productRespVO, AdvertisementRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得广告分页") - @PreAuthorize("@ss.hasPermission('base:advertisement:query')") - public CommonResult> getAdvertisementPage(@Valid AdvertisementPageReqVO pageReqVO) { - PageResult pageResult = advertisementService.getPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, AdvertisementSaveReqVO.class)); - } - - @PutMapping("/published") - @Operation(summary = "结束发布广告") - @Parameter(name = "id", description = "广告id", required = true) - @PreAuthorize("@ss.hasPermission('base:advertisement:update')") - public CommonResult published(@RequestParam("id") Long id) { - advertisementService.update(id, AdvertisementStatusEnum.ENDED.getStatus()); - return success(true); - } - - @PutMapping("/publishing") - @Operation(summary = "立即发布广告") - @PreAuthorize("@ss.hasPermission('base:advertisement:update')") - @Parameter(name = "id", description = "广告id", required = true) - public CommonResult publishing(@RequestParam("id") Long id) { - advertisementService.update(id,AdvertisementStatusEnum.PUBLISHED.getStatus()); - return success(true); - } - - @PutMapping("/republish") - @Operation(summary = "重新发布广告") - @Parameter(name = "id", description = "广告id", required = true) - @PreAuthorize("@ss.hasPermission('base:advertisement:update')") - public CommonResult republish(@Valid @RequestBody AdvertisementSaveReqVO updateReqVO) { - AdvertisementDO productsDO = BeanUtils.toBean(updateReqVO, AdvertisementDO.class); - advertisementService.update(productsDO, 1); - return success(true); - } - - -} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/advertisement/vo/AdvertisementPageReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/advertisement/vo/AdvertisementPageReqVO.java deleted file mode 100644 index 57dbe1e29..000000000 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/advertisement/vo/AdvertisementPageReqVO.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.cf.imes.module.system.controller.admin.advertisement.vo; - -import com.cf.imes.framework.common.pojo.PageParam; -import com.cf.imes.module.system.validation.advertisement.AdvertisementStatus; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; -import org.springframework.format.annotation.DateTimeFormat; - -import java.time.LocalDateTime; - -import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@Schema(description = "管理后台 - 广告分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class AdvertisementPageReqVO extends PageParam { - - @Schema(description = "广告id", example = "163681486581530624") - private Long id; - - @Schema(description = "广告名称", example = "西亚哈") - private String adName; - - @Schema(description = "软件标识", example = "163681481946824704") - private String softwareId; - - @Schema(description = "广告位置") - private String adPosition; - - @Schema(description = "广告图片") - private String adImagePath; - - @Schema(description = "投放开始时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] startTime; - - @Schema(description = "投放结束时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] endTime; - - @Schema(description = "跳转路径") - private String adRedirectUrl; - - @Schema(description = "广告顺序") - private Short sort; - - @Schema(description = "广告状态", example = "0全部 1未发布 2已发布 3已结束") - @AdvertisementStatus - private Integer status; - - @Schema(description = "操作人") - private String updater; - - @Schema(description = "操作时间") - private LocalDateTime updateTime; - - @Schema(description = "排序", example = "ascend") - private String order; - - @Schema(description = "排序字段", example = "id") - private String field; -} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/AdvertisementController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/AdvertisementController.java new file mode 100644 index 000000000..6d8f13f52 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/AdvertisementController.java @@ -0,0 +1,164 @@ +package com.cf.imes.module.system.controller.admin.funds.advertisement; + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.module.system.controller.admin.funds.advertisement.vo.AdvertisementPageReqVO; +import com.cf.imes.module.system.controller.admin.funds.advertisement.vo.AdvertisementPublishReqVO; +import com.cf.imes.module.system.controller.admin.funds.advertisement.vo.AdvertisementRespVO; +import com.cf.imes.module.system.controller.admin.funds.advertisement.vo.AdvertisementSaveReqVO; +import com.cf.imes.module.system.service.funds.advertisement.AdvertisementService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.io.File; +import java.io.IOException; +import java.util.List; + +import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.framework.common.pojo.CommonResult.success; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.ADVERTISEMENT_STATUS_ERROR; + +@Tag(name = "管理后台 - 广告管理") +@RestController +@RequestMapping("/system/ad") +@Validated +@Slf4j +public class AdvertisementController { + + @Resource + private AdvertisementService advertisementService; + + + @PostMapping("") + @Operation(summary = "新建广告") + @PreAuthorize("@ss.hasPermission('base:advertisement:create')") + public CommonResult createAdvertisement(@Valid @RequestBody AdvertisementSaveReqVO createReqVO) { + return success(advertisementService.create(createReqVO)); + } + + + @PutMapping("") + @Operation(summary = "更新广告") + @PreAuthorize("@ss.hasPermission('base:advertisement:update')") + public CommonResult updateAdvertisement(@Valid @RequestBody AdvertisementSaveReqVO reqVO) { + advertisementService.update(reqVO); + return success(true); + } + + + @DeleteMapping("") + @Operation(summary = "删除广告") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('base:advertisement:delete')") + public CommonResult deleteAdvertisement(@RequestParam("id") Long id) { + advertisementService.delete(id); + return success(true); + } + + + @GetMapping("/{id}") + @Operation(summary = "获得广告") + @Parameter(name = "id", description = "广告ID", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('base:advertisement:query')") + public CommonResult getAdvertisement(@PathVariable("id") Long id) { + + return success(advertisementService.get(id)); + } + + + @GetMapping("/page") + @Operation(summary = "获得广告分页") + @PreAuthorize("@ss.hasPermission('base:advertisement:query')") + public CommonResult> getAdvertisementPage(@Valid AdvertisementPageReqVO pageReqVO) { + + return success(advertisementService.getPage(pageReqVO)); + } + + + + @PutMapping("/publish") + @Operation(summary = "发布/结束/重新发布广告") + @Parameter(name = "id", description = "广告id", required = true) + @Parameter(name = "status", description = "广告状态", required = true) + @PreAuthorize("@ss.hasPermission('base:advertisement:update')") + public CommonResult updatePublishStatus(@RequestBody AdvertisementPublishReqVO reqVO) { + advertisementService.updatePublishStatus(reqVO); + return success(true); + } + + + + + @GetMapping("/getAd") + @Operation(summary = "根据广告位置获得广告信息") + @PreAuthorize("@ss.hasPermission('base:advertisement:query')") + public CommonResult> getAdvertisementByPosition(@RequestParam("id") Integer adPosition) { + + return success(advertisementService.getAdvertisementByPosition(adPosition)); + } + + + + + + + + // 上传图片,支持附带 orderId 参数 + @PostMapping("/upload") + public CommonResult uploadImage(@RequestParam("file") MultipartFile file, + @RequestParam("orderId") Long orderId) { + + try { + + + // 获取原始文件名并提取扩展名 + String originalFilename = file.getOriginalFilename(); + String extension = ""; + + int dotIndex = originalFilename.lastIndexOf('.'); + if (dotIndex != -1) { + extension = originalFilename.substring(dotIndex); // 包含“.” + } else { + throw exception(1,"缺少扩展名"); + } + + // 构建新文件名: orderId + .扩展名 + String filename = orderId + extension; + + // 确保目录存在 + File dir = new File("E:\\ceshi123\\"); + if (!dir.exists()) { + dir.mkdirs(); + } + + + File dest = new File(dir, filename); + file.transferTo(dest); + + + // 你可以把图片信息和 orderId 一起存入数据库,这里省略 + return success("上传成功: " + filename); + } catch (IOException e) { + log.error(e.getMessage()); + throw exception(ADVERTISEMENT_STATUS_ERROR); + } + + } + + + + + + + + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdImageFilePath.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdImageFilePath.java new file mode 100644 index 000000000..582f53b63 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdImageFilePath.java @@ -0,0 +1,17 @@ +package com.cf.imes.module.system.controller.admin.funds.advertisement.vo; + + +import lombok.Data; +import lombok.Getter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +@Getter +@Data +public class AdImageFilePath { + + @Value("${adImageFile.filepath}") + private String filePath; + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdvertisementPageReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdvertisementPageReqVO.java new file mode 100644 index 000000000..f56aa549a --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdvertisementPageReqVO.java @@ -0,0 +1,29 @@ +package com.cf.imes.module.system.controller.admin.funds.advertisement.vo; + +import com.cf.imes.framework.common.pojo.PageParam; +import com.cf.imes.module.system.validation.advertisement.AdvertisementStatus; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Schema(description = "管理后台 - 广告分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class AdvertisementPageReqVO extends PageParam { + + @Schema(description = "广告id", example = "163681486581530624") + private Long id; + + @Schema(description = "广告名称", example = "西亚哈") + private String adName; + + @Schema(description = "广告位置") + private String adPosition; + + @Schema(description = "广告状态", example = "0全部 1未发布 2已发布 3已结束") + @AdvertisementStatus + private Integer status; + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdvertisementPublishReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdvertisementPublishReqVO.java new file mode 100644 index 000000000..3a9e31f9c --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdvertisementPublishReqVO.java @@ -0,0 +1,38 @@ +package com.cf.imes.module.system.controller.admin.funds.advertisement.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.ToString; + +import java.time.LocalDate; + +@Schema(description = "广告发布状态") +@Data +@ToString(callSuper = true) +public class AdvertisementPublishReqVO { + + + @Schema(description = "广告id") + private Long id; + + + @Schema(description = "发布状态") + private Integer status; + + + @Schema(description = "是否重新发布",example = "false") + private Boolean isRepublish; + + + @Schema(description = "投放开始时间,重新发布时传") + private LocalDate startTime; + + + @Schema(description = "投放结束时间,重新发布时传") + private LocalDate endTime; + + + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/advertisement/vo/AdvertisementRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdvertisementRespVO.java similarity index 63% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/advertisement/vo/AdvertisementRespVO.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdvertisementRespVO.java index b1fd54001..42dcd2fe4 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/advertisement/vo/AdvertisementRespVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdvertisementRespVO.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.controller.admin.advertisement.vo; +package com.cf.imes.module.system.controller.admin.funds.advertisement.vo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import io.swagger.v3.oas.annotations.media.Schema; @@ -12,7 +12,7 @@ import java.time.LocalDateTime; public class AdvertisementRespVO { @Schema(description = "广告id", requiredMode = Schema.RequiredMode.REQUIRED, example = "163681486581530624") - private int id; + private Long id; @Schema(description = "广告名称", example = "西亚哈") private String adName; @@ -23,19 +23,35 @@ public class AdvertisementRespVO { @Schema(description = "图片路径") private String adImagePath; + @Schema(description = "图片的Base64形式") + private String adImageBase64; + + @Schema(description = "图片的类型") + private String adImageFileType; + @Schema(description = "投放开始时间") private LocalDateTime startTime; @Schema(description = "投放结束时间") private LocalDateTime endTime; + @Schema(description = "投放时间") + private String launchTime; + @Schema(description = "跳转路径") private String adRedirectUrl; @Schema(description = "广告顺序") private Short sort; - @Schema(description = "广告状态", example = "0全部 1未发布 2已发布 3已结束") + @Schema(description = "广告状态", example = " 0未发布 1已发布 2已结束") private Integer status; + @Schema(description = "操作人") + private String creator; + + @Schema(description = "操作时间") + private LocalDateTime createTime; + + } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/advertisement/vo/AdvertisementSaveReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdvertisementSaveReqVO.java similarity index 65% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/advertisement/vo/AdvertisementSaveReqVO.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdvertisementSaveReqVO.java index 4397d595c..61bb4005d 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/advertisement/vo/AdvertisementSaveReqVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/advertisement/vo/AdvertisementSaveReqVO.java @@ -1,57 +1,72 @@ -package com.cf.imes.module.system.controller.admin.advertisement.vo; +package com.cf.imes.module.system.controller.admin.funds.advertisement.vo; import com.cf.imes.framework.common.validation.NumberValid; import com.cf.imes.module.system.validation.advertisement.AdvertisementStatus; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.multipart.MultipartFile; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; -import java.time.LocalDateTime; +import java.time.LocalDate; + +import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; @Schema(description = "管理后台 - 广告新增/修改 Request VO") @Data public class AdvertisementSaveReqVO { - @Schema(description = "广告id", example = "1") + @Schema(description = "广告id") private Long id; - @Schema(description = "广告名称", example = "西亚哈") + + @Schema(description = "广告名称") @NotBlank(message = "广告名称不能为空") @Size(max = 32, message = "广告名称长度不能超过 32 个字符") private String adName; - @Schema(description = "软件标识", example = "163681481946824704") + + @Schema(description = "软件标识") private String softwareId; + @Schema(description = "广告位置,字典键值", example = "[1,2]") @NotNull(message = "广告位置不能为空") private Integer[] adPosition; - @Schema(description = "广告图片") - @NotBlank(message = "广告图片不能为空") - @Size(max = 255, message = "广告图片长度不能超过 255 个字符") - private String adImagePath; + + @Schema(description = "广告图片文件") + @NotBlank(message = "广告图片文件不能为空") + private MultipartFile adImageFile; + @Schema(description = "投放开始时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) @NotNull(message = "投放开始时间不能为空") - private LocalDateTime startTime; + private LocalDate startTime; + @Schema(description = "投放结束时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) @NotNull(message = "投放结束时间不能为空") - private LocalDateTime endTime; + private LocalDate endTime; + @Schema(description = "跳转路径") @Size(max = 255, message = "链接长度不能超过 255 个字符") private String adRedirectUrl; + @Schema(description = "广告顺序") @NumberValid(name = "广告顺序") private Integer sort; + @Schema(description = "广告状态", example = "0全部 1未发布 2已发布 3已结束") @AdvertisementStatus private Integer status; + } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/invoice/InvoiceController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/invoice/InvoiceController.java new file mode 100644 index 000000000..fbbf77aed --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/invoice/InvoiceController.java @@ -0,0 +1,46 @@ +package com.cf.imes.module.system.controller.admin.funds.invoice; + + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceTitleReqVO; +import com.cf.imes.module.system.service.funds.invoice.InvoiceService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import static com.cf.imes.framework.common.pojo.CommonResult.success; + + +/** + * @author 发票管理 + */ +@Tag(name = "管理后台 - 发票管理") +@RestController +@RequestMapping("/system/invoice") +@Validated +public class InvoiceController { + + + @Resource + private InvoiceService invoiceService; + + + @PostMapping("") + @Operation(summary = "新增/修改发票抬头信息") + public CommonResult insetInvoiceTitle(@Valid @RequestBody InvoiceTitleReqVO reqVO) { + + invoiceService.insetInvoiceTitle(reqVO); + + return success(Boolean.TRUE); + + } + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/invoice/vo/InvoiceTitleReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/invoice/vo/InvoiceTitleReqVO.java new file mode 100644 index 000000000..656443ec9 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/invoice/vo/InvoiceTitleReqVO.java @@ -0,0 +1,63 @@ +package com.cf.imes.module.system.controller.admin.funds.invoice.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +public class InvoiceTitleReqVO { + + + @Schema(description = "发票抬头ID") + private Long id; + + + @Schema(description = "组织ID") + private Long organId; + + + @Schema(description = "发票抬头") + @NotBlank(message = "发票抬头不能为空") + private String invoiceTitle; + + + @Schema(description = "开具类型,0企业 1个人") + @NotNull(message = "开具类型不能为空") + private Integer issueType; + + + @Schema(description = "发票类型,0增值税普通发票 1增值税专用发票") + @NotNull(message = "发票类型不能为空") + private Integer invoiceType; + + + @Schema(description = "纳税人识别号") + @NotNull(message = "纳税人识别号不能为空") + private String taxpayerId; + + + @Schema(description = "开户银行名称") + private String bankName; + + + @Schema(description = "开户银行账号") + private String bankAccount; + + + @Schema(description = "注册场所地址") + private String registeredAddress; + + + @Schema(description = "注册固定电话") + private String fixedPhone; + + + @Schema(description = "邮箱") + @NotNull(message = "邮箱不能为空") + private String email; + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/OrganAmountController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/OrganAmountController.java new file mode 100644 index 000000000..a65e032ba --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/OrganAmountController.java @@ -0,0 +1,58 @@ +package com.cf.imes.module.system.controller.admin.funds.organamount; + + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.module.system.controller.admin.funds.organamount.vo.AllOrganAmountRespVO; +import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganAmountRespVO; +import com.cf.imes.module.system.service.funds.organamount.OrganAmountService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import static com.cf.imes.framework.common.pojo.CommonResult.success; + +/** + * @author 组织资金 + */ +@Tag(name = "管理后台 - 组织资金") +@RestController +@RequestMapping("/system/amount") +@Validated +public class OrganAmountController { + + + @Resource + private OrganAmountService organAmountService; + + + + @GetMapping("") + @Operation(summary = "获取组织余额数据") + @Parameter(name = "organId", description = "组织ID", required = true) + public CommonResult getOrganAmount(@Valid @RequestParam("organId") Long organId) { + + return success(organAmountService.getOrganAmount(organId)); + + } + + + + + @GetMapping("/all") + @Operation(summary = "获取全部组织的余额数据") + public CommonResult getOrganAmountAll() { + + return success(organAmountService.getOrganAmountAll()); + + } + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/vo/AllOrganAmountRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/vo/AllOrganAmountRespVO.java new file mode 100644 index 000000000..92ea8ce36 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/vo/AllOrganAmountRespVO.java @@ -0,0 +1,22 @@ +package com.cf.imes.module.system.controller.admin.funds.organamount.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 所有组织的余额信息 Response VO") +@Data +public class AllOrganAmountRespVO { + + + @Schema(description = "所有组织的余额") + private BigDecimal allOrganAmount; + + + @Schema(description = "待审核的发票金额") + private BigDecimal toExamineAmount; + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/vo/OrganAmountRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/vo/OrganAmountRespVO.java new file mode 100644 index 000000000..5c3e7f87c --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/organamount/vo/OrganAmountRespVO.java @@ -0,0 +1,30 @@ +package com.cf.imes.module.system.controller.admin.funds.organamount.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 组织余额信息 Response VO") +@Data +public class OrganAmountRespVO { + + + @Schema(description = "可用总金额") + private BigDecimal availableAmount; + + + @Schema(description = "现金余额") + private BigDecimal amount; + + + @Schema(description = "赠送金余额") + private BigDecimal giftAmount; + + + @Schema(description = "可开票金额") + private BigDecimal invoiceableAmount; + +} + diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/ProductsController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/ProductsController.java similarity index 83% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/ProductsController.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/ProductsController.java index ce20ec4c0..26090c21d 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/ProductsController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/ProductsController.java @@ -1,13 +1,13 @@ -package com.cf.imes.module.system.controller.admin.products; +package com.cf.imes.module.system.controller.admin.funds.products; import com.cf.imes.framework.common.pojo.CommonResult; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.util.object.BeanUtils; -import com.cf.imes.module.system.controller.admin.products.vo.product.ProductPageReqVO; -import com.cf.imes.module.system.controller.admin.products.vo.product.ProductRespVO; -import com.cf.imes.module.system.controller.admin.products.vo.product.ProductSaveReqVO; -import com.cf.imes.module.system.dal.dataobject.products.ProductsDO; -import com.cf.imes.module.system.service.products.ProductsService; +import com.cf.imes.module.system.controller.admin.funds.products.vo.product.ProductPageReqVO; +import com.cf.imes.module.system.controller.admin.funds.products.vo.product.ProductRespVO; +import com.cf.imes.module.system.controller.admin.funds.products.vo.product.ProductSaveReqVO; +import com.cf.imes.module.system.dal.dataobject.funds.products.ProductsDO; +import com.cf.imes.module.system.service.funds.products.ProductsService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -30,14 +30,14 @@ public class ProductsController { @Resource private ProductsService productsService; - @PostMapping("/create") + @PostMapping("") @Operation(summary = "新建产品") // @PreAuthorize("@ss.hasPermission('base:products:create')") public CommonResult createProducts(@RequestParam("productName") String productName) { return success(productsService.create(productName)); } - @PutMapping("/update") + @PutMapping("") @Operation(summary = "更新产品") // @PreAuthorize("@ss.hasPermission('base:products:update')") public CommonResult updateProducts(@Valid @RequestBody ProductSaveReqVO updateReqVO) { @@ -65,7 +65,7 @@ public class ProductsController { } - @DeleteMapping("/delete") + @DeleteMapping("") @Operation(summary = "删除产品") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('base:products:delete')") @@ -74,11 +74,11 @@ public class ProductsController { return success(true); } - @GetMapping("/get") + @GetMapping("/{id}") @Operation(summary = "获得产品") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('base:products:query')") - public CommonResult getProducts(@RequestParam("id") Long id) { + public CommonResult getProducts(@PathVariable("id") Long id) { ProductsDO productRespVO = productsService.get(id); return success(BeanUtils.toBean(productRespVO, ProductRespVO.class)); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/ProductsDetailController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/ProductsDetailController.java similarity index 78% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/ProductsDetailController.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/ProductsDetailController.java index 1817a7c82..cfbc35c43 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/ProductsDetailController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/ProductsDetailController.java @@ -1,13 +1,13 @@ -package com.cf.imes.module.system.controller.admin.products; +package com.cf.imes.module.system.controller.admin.funds.products; import com.cf.imes.framework.common.pojo.CommonResult; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.util.object.BeanUtils; -import com.cf.imes.module.system.controller.admin.products.vo.productDetails.ProductDetailsPageReqVO; -import com.cf.imes.module.system.controller.admin.products.vo.productDetails.ProductDetailsRespVO; -import com.cf.imes.module.system.controller.admin.products.vo.productDetails.ProductDetailsSaveReqVO; -import com.cf.imes.module.system.dal.dataobject.products.ProductsDetailDO; -import com.cf.imes.module.system.service.products.ProductsDetailService; +import com.cf.imes.module.system.controller.admin.funds.products.vo.productDetails.ProductDetailsPageReqVO; +import com.cf.imes.module.system.controller.admin.funds.products.vo.productDetails.ProductDetailsRespVO; +import com.cf.imes.module.system.controller.admin.funds.products.vo.productDetails.ProductDetailsSaveReqVO; +import com.cf.imes.module.system.dal.dataobject.funds.products.ProductsDetailDO; +import com.cf.imes.module.system.service.funds.products.ProductsDetailService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -30,14 +30,14 @@ public class ProductsDetailController { @Resource private ProductsDetailService productDetailsService; - @PostMapping("/create") + @PostMapping("") @Operation(summary = "新建产品明细") @PreAuthorize("@ss.hasPermission('base:productDetails:create')") public CommonResult createProducts(@Valid @RequestBody ProductDetailsSaveReqVO createReqVO) { return success(productDetailsService.create(createReqVO)); } - @PutMapping("/update") + @PutMapping("") @Operation(summary = "更新产品明细") @PreAuthorize("@ss.hasPermission('base:productDetails:update')") public CommonResult updateProducts(@Valid @RequestBody ProductDetailsSaveReqVO updateReqVO) { @@ -45,7 +45,7 @@ public class ProductsDetailController { return success(true); } - @DeleteMapping("/delete") + @DeleteMapping("") @Operation(summary = "删除产品明细") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('base:productDetails:delete')") @@ -54,11 +54,11 @@ public class ProductsDetailController { return success(true); } - @GetMapping("/get") + @GetMapping("/{id}") @Operation(summary = "获得产品明细") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('base:productDetails:query')") - public CommonResult> getProducts(@RequestParam("id") Long id) { + public CommonResult> getProducts(@PathVariable("id") Long id) { List productDetailsDO = productDetailsService.get(id); return success(productDetailsDO); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/product/ProductPageReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/product/ProductPageReqVO.java similarity index 94% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/product/ProductPageReqVO.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/product/ProductPageReqVO.java index 1cbe9395a..798b5ed98 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/product/ProductPageReqVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/product/ProductPageReqVO.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.controller.admin.products.vo.product; +package com.cf.imes.module.system.controller.admin.funds.products.vo.product; import com.cf.imes.framework.common.pojo.PageParam; import com.cf.imes.module.system.validation.products.ProductStatus; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/product/ProductRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/product/ProductRespVO.java similarity index 94% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/product/ProductRespVO.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/product/ProductRespVO.java index 94781ca09..bbb8a5fec 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/product/ProductRespVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/product/ProductRespVO.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.controller.admin.products.vo.product; +package com.cf.imes.module.system.controller.admin.funds.products.vo.product; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/product/ProductSaveReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/product/ProductSaveReqVO.java similarity index 91% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/product/ProductSaveReqVO.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/product/ProductSaveReqVO.java index 2c17c4efc..f38bed666 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/product/ProductSaveReqVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/product/ProductSaveReqVO.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.controller.admin.products.vo.product; +package com.cf.imes.module.system.controller.admin.funds.products.vo.product; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/productDetails/ProductDetailsPageReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/productDetails/ProductDetailsPageReqVO.java similarity index 95% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/productDetails/ProductDetailsPageReqVO.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/productDetails/ProductDetailsPageReqVO.java index 36aaf8174..53a1d214e 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/productDetails/ProductDetailsPageReqVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/productDetails/ProductDetailsPageReqVO.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.controller.admin.products.vo.productDetails; +package com.cf.imes.module.system.controller.admin.funds.products.vo.productDetails; import com.cf.imes.framework.common.pojo.PageParam; import com.cf.imes.module.system.validation.products.ProductType; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/productDetails/ProductDetailsRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/productDetails/ProductDetailsRespVO.java similarity index 96% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/productDetails/ProductDetailsRespVO.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/productDetails/ProductDetailsRespVO.java index 1e4c96a22..788ee04e8 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/productDetails/ProductDetailsRespVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/productDetails/ProductDetailsRespVO.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.controller.admin.products.vo.productDetails; +package com.cf.imes.module.system.controller.admin.funds.products.vo.productDetails; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/productDetails/ProductDetailsSaveReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/productDetails/ProductDetailsSaveReqVO.java similarity index 83% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/productDetails/ProductDetailsSaveReqVO.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/productDetails/ProductDetailsSaveReqVO.java index 4946236b2..a93b8be58 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/products/vo/productDetails/ProductDetailsSaveReqVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/products/vo/productDetails/ProductDetailsSaveReqVO.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.controller.admin.products.vo.productDetails; +package com.cf.imes.module.system.controller.admin.funds.products.vo.productDetails; import com.cf.imes.module.system.validation.products.ProductType; import io.swagger.v3.oas.annotations.media.Schema; @@ -23,13 +23,13 @@ public class ProductDetailsSaveReqVO { @ProductType private Integer purchaseType; - @Schema(description = "产品时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "1month") + @Schema(description = "产品时间,格式:时长值 - 时间单位", requiredMode = Schema.RequiredMode.REQUIRED, example = "1month") private String duration; @Schema(description = "产品产量", requiredMode = Schema.RequiredMode.REQUIRED, example = "") private BigDecimal output; - - @Schema(description = "赠送时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "半个月") +// + @Schema(description = "赠送时间,格式:时长值 - 时间单位", requiredMode = Schema.RequiredMode.REQUIRED, example = "半个月") private String giftDuration; @Schema(description = "赠送产量", requiredMode = Schema.RequiredMode.REQUIRED, example = "") diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/recharge/RechargeActiveController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/recharge/RechargeActiveController.java similarity index 79% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/recharge/RechargeActiveController.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/recharge/RechargeActiveController.java index e891170a6..b33054690 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/recharge/RechargeActiveController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/recharge/RechargeActiveController.java @@ -1,13 +1,13 @@ -package com.cf.imes.module.system.controller.admin.recharge; +package com.cf.imes.module.system.controller.admin.funds.recharge; import com.cf.imes.framework.common.pojo.CommonResult; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.util.object.BeanUtils; -import com.cf.imes.module.system.controller.admin.recharge.vo.RechargePageReqVO; -import com.cf.imes.module.system.controller.admin.recharge.vo.RechargeRespVO; -import com.cf.imes.module.system.controller.admin.recharge.vo.RechargeSaveReqVO; -import com.cf.imes.module.system.dal.dataobject.recharge.GiftMoneyDetailsDO; -import com.cf.imes.module.system.service.recharge.RechargeActiveService; +import com.cf.imes.module.system.controller.admin.funds.recharge.vo.RechargePageReqVO; +import com.cf.imes.module.system.controller.admin.funds.recharge.vo.RechargeRespVO; +import com.cf.imes.module.system.controller.admin.funds.recharge.vo.RechargeSaveReqVO; +import com.cf.imes.module.system.dal.dataobject.funds.recharge.GiftMoneyDetailsDO; +import com.cf.imes.module.system.service.funds.recharge.RechargeActiveService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -29,14 +29,14 @@ public class RechargeActiveController { @Resource private RechargeActiveService productsService; - @PostMapping("/create") + @PostMapping("") @Operation(summary = "新建充值活动") @PreAuthorize("@ss.hasPermission('base:recharge-active:create')") public CommonResult createRechargeActive(@Valid @RequestBody RechargeSaveReqVO createReqVO) { return success(productsService.create(createReqVO)); } - @PutMapping("/update") + @PutMapping("") @Operation(summary = "更新充值活动") @PreAuthorize("@ss.hasPermission('base:recharge-active:update')") public CommonResult updateRechargeActive(@Valid @RequestBody RechargeSaveReqVO updateReqVO) { @@ -44,7 +44,7 @@ public class RechargeActiveController { return success(true); } - @DeleteMapping("/delete") + @DeleteMapping("") @Operation(summary = "删除充值活动") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('base:recharge-active:delete')") @@ -53,11 +53,11 @@ public class RechargeActiveController { return success(true); } - @GetMapping("/get") + @GetMapping("/{id}") @Operation(summary = "获得充值活动") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('base:recharge-active:query')") - public CommonResult getRechargeActive(@RequestParam("id") Long id) { + public CommonResult getRechargeActive(@PathVariable("id") Long id) { GiftMoneyDetailsDO giftMoneyDetailsDO = productsService.get(id); return success(BeanUtils.toBean(giftMoneyDetailsDO, RechargeRespVO.class)); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/recharge/vo/RechargePageReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/recharge/vo/RechargePageReqVO.java similarity index 96% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/recharge/vo/RechargePageReqVO.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/recharge/vo/RechargePageReqVO.java index 012218611..3cb81aa64 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/recharge/vo/RechargePageReqVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/recharge/vo/RechargePageReqVO.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.controller.admin.recharge.vo; +package com.cf.imes.module.system.controller.admin.funds.recharge.vo; import com.cf.imes.framework.common.pojo.PageParam; import com.cf.imes.module.system.validation.recharge.PurchaseType; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/recharge/vo/RechargeRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/recharge/vo/RechargeRespVO.java similarity index 96% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/recharge/vo/RechargeRespVO.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/recharge/vo/RechargeRespVO.java index 99f756d70..3a5285286 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/recharge/vo/RechargeRespVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/recharge/vo/RechargeRespVO.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.controller.admin.recharge.vo; +package com.cf.imes.module.system.controller.admin.funds.recharge.vo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/recharge/vo/RechargeSaveReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/recharge/vo/RechargeSaveReqVO.java similarity index 97% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/recharge/vo/RechargeSaveReqVO.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/recharge/vo/RechargeSaveReqVO.java index 7ba5de4b8..b08406a60 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/recharge/vo/RechargeSaveReqVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/recharge/vo/RechargeSaveReqVO.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.controller.admin.recharge.vo; +package com.cf.imes.module.system.controller.admin.funds.recharge.vo; import com.cf.imes.module.system.validation.recharge.MoneyValid; import com.cf.imes.module.system.validation.recharge.PurchaseType; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/ParserController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/ParserController.java new file mode 100644 index 000000000..f7c126870 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/ParserController.java @@ -0,0 +1,78 @@ +package com.cf.imes.module.system.controller.admin.parser; + + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.module.system.controller.admin.parser.vo.ParserReqVO; +import com.cf.imes.module.system.controller.admin.parser.vo.ParserRespVO; +import com.cf.imes.module.system.controller.admin.parser.vo.ParserSimpleRespVO; +import com.cf.imes.module.system.service.parser.ParserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.List; +import java.util.Map; + +import static com.cf.imes.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 解析器管理") +@RestController +@RequestMapping("/system/parser") +@Validated +@Slf4j +public class ParserController { + + + + @Resource + private ParserService parserService; + + + + + @PutMapping("") + @Operation(summary = "解析器配置修改") + @PreAuthorize("@ss.hasPermission('base:advertisement:update')") + public CommonResult updateParser(@Valid @RequestBody ParserReqVO reqVO) { + parserService.update(reqVO); + return success(true); + } + + + + + @GetMapping("") + @Operation(summary = "获得解析器树") + @PreAuthorize("@ss.hasAnyPermissions('system:machine:query','system:base-setting')") + public CommonResult>> getParserTree(@RequestParam(required = false) Long type) { + return success(parserService.getParserTree(type)); + } + + + + @GetMapping("/simple") + @Operation(summary = "获得解析器对应的精简信息") + public CommonResult>> getParserSimple(@RequestParam(required = false) Long type) { + return success(parserService.getParserSimple(type)); + } + + + + + @GetMapping("/{id}") + @Operation(summary = "根据ID获取解析器信息") + @Parameter(name = "id", description = "解析器ID", required = true) + public CommonResult getParser(@PathVariable("id") Long id) { + return success(parserService.getParser(id)); + } + + + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/ParserTemplateController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/ParserTemplateController.java new file mode 100644 index 000000000..f9bd5b347 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/ParserTemplateController.java @@ -0,0 +1,93 @@ +package com.cf.imes.module.system.controller.admin.parser; + + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.module.system.controller.admin.parser.vo.ParserTemplateReqVO; +import com.cf.imes.module.system.controller.admin.parser.vo.ParserTemplateRespVO; +import com.cf.imes.module.system.controller.admin.parser.vo.TemplateLimitReqVO; +import com.cf.imes.module.system.controller.admin.parser.vo.TemplateSimpleRespVO; +import com.cf.imes.module.system.service.parser.ParserTemplateService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.List; +import java.util.Map; + +import static com.cf.imes.framework.common.pojo.CommonResult.success; + +@RestController +@RequestMapping("/system/parser-template") +@Tag(name = "管理后台 - 解析器模板管理") +@Validated +public class ParserTemplateController { + + + @Resource + private ParserTemplateService parserTemplateService; + + + @PutMapping("") + @Operation(summary = "解析器模板配置修改") + public CommonResult updateParserTemplate(@Valid @RequestBody ParserTemplateReqVO reqVO) { + parserTemplateService.update(reqVO); + return success(true); + } + + + + + @GetMapping("") + @Operation(summary = "获得解析器模板树") + public CommonResult>> getParserTemplateTree(@RequestParam(required = false) Long type) { + return success(parserTemplateService.getParserTemplateTree(type)); + } + + + + + @GetMapping("/simple") + @Operation(summary = "获得解析对应的精简信息") + public CommonResult>> getParserTemplateSimple(@RequestParam(required = false) Long type) { + return success(parserTemplateService.getParserTemplateSimple(type)); + } + + + + + @GetMapping("/{id}") + @Operation(summary = "根据ID获取解析器模板信息") + @Parameter(name = "id", description = "解析器ID", required = true) + public CommonResult getParserTemplate(@PathVariable("id") Long id) { + return success(parserTemplateService.getParserTemplate(id)); + } + + + + + + @PutMapping("/limit") + @Operation(summary = "修改解析器模板的授权信息") + public CommonResult updateParserTemplateLimit(@Valid @RequestBody TemplateLimitReqVO reqVO) { + parserTemplateService.updateParserTemplateLimit(reqVO); + return success(true); + } + + + + + + @GetMapping("/limit/{organId}") + @Operation(summary = "获取组织对应的解析器模板的授权信息") + @Parameter(name = "organId", description = "解析器ID", required = true) + public CommonResult> getOrganParserTemplateLimit(@PathVariable("organId") Long organId) { + return success(parserTemplateService.getOrganParserTemplateLimit(organId)); + } + + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserReqVO.java new file mode 100644 index 000000000..3af1e9ac2 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserReqVO.java @@ -0,0 +1,30 @@ +package com.cf.imes.module.system.controller.admin.parser.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + + + +@Schema(description = "管理后台 - 解析器修改 Request VO") +@Data +public class ParserReqVO { + + + @Schema(description = "解析器id") + private Long id; + + + @Schema(description = "解析器名称") + private String name; + + + @Schema(description = "解析器类型") + private Integer parserType; + + + @Schema(description = "解析器配置") + private String setting; + + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserRespVO.java new file mode 100644 index 000000000..61fbe1afa --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserRespVO.java @@ -0,0 +1,27 @@ +package com.cf.imes.module.system.controller.admin.parser.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class ParserRespVO { + + + @Schema(description = "解析器id") + private Long id; + + + @Schema(description = "解析器名称") + private String name; + + + @Schema(description = "解析器类型") + private Integer parserType; + + + @Schema(description = "解析器配置") + private String setting; + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserSimpleRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserSimpleRespVO.java new file mode 100644 index 000000000..64ad481fc --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserSimpleRespVO.java @@ -0,0 +1,22 @@ +package com.cf.imes.module.system.controller.admin.parser.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class ParserSimpleRespVO { + + + @Schema(description = "解析器id") + private Long id; + + + @Schema(description = "解析器名称") + private String name; + + + @Schema(description = "解析器类型") + private Integer parserType; + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserTemplateReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserTemplateReqVO.java new file mode 100644 index 000000000..6f1de6650 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserTemplateReqVO.java @@ -0,0 +1,31 @@ +package com.cf.imes.module.system.controller.admin.parser.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 解析器模板修改 Request VO") +@Data +public class ParserTemplateReqVO { + + + @Schema(description = "解析器id") + private Long id; + + + @Schema(description = "解析器名称") + private String name; + + + @Schema(description = "解析器类型") + private Integer parserType; + + + @Schema(description = "解析器配置") + private String setting; + + + @Schema(description = "是否可用") + private Boolean isEnabled; + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserTemplateRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserTemplateRespVO.java new file mode 100644 index 000000000..2e1a9f52d --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/ParserTemplateRespVO.java @@ -0,0 +1,31 @@ +package com.cf.imes.module.system.controller.admin.parser.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + + +@Data +public class ParserTemplateRespVO { + + + @Schema(description = "解析器模板id") + private Long id; + + + @Schema(description = "解析器模板名称") + private String name; + + + @Schema(description = "解析器类型") + private Integer parserType; + + + @Schema(description = "解析器模板配置") + private String setting; + + + @Schema(description = "是否可用") + private Boolean isEnabled; + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/TemplateLimitReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/TemplateLimitReqVO.java new file mode 100644 index 000000000..9afeb9182 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/TemplateLimitReqVO.java @@ -0,0 +1,22 @@ +package com.cf.imes.module.system.controller.admin.parser.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + + +@Data +public class TemplateLimitReqVO { + + + @Schema(description = "组织id") + private Long organId; + + + @Schema(description = "解析器ID") + private List parserTemplateIds; + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/TemplateSimpleRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/TemplateSimpleRespVO.java new file mode 100644 index 000000000..7a8667ba5 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/parser/vo/TemplateSimpleRespVO.java @@ -0,0 +1,23 @@ +package com.cf.imes.module.system.controller.admin.parser.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class TemplateSimpleRespVO { + + + @Schema(description = "解析器模板id") + private Long id; + + + @Schema(description = "解析器模板名称") + private String name; + + + @Schema(description = "解析器类型") + private Integer parserType; + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/advertisement/AdvertisementDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/advertisement/AdvertisementDO.java similarity index 89% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/advertisement/AdvertisementDO.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/advertisement/AdvertisementDO.java index 9eb4c3c45..814c6fe6c 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/advertisement/AdvertisementDO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/advertisement/AdvertisementDO.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.dal.dataobject.advertisement; +package com.cf.imes.module.system.dal.dataobject.funds.advertisement; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; @@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; import lombok.*; -import java.time.LocalDateTime; +import java.time.LocalDate; /** * 广告表 product_details DO @@ -48,12 +48,12 @@ public class AdvertisementDO extends BaseDO { /** * 投放开始时间 */ - private LocalDateTime startTime; + private LocalDate startTime; /** * 投放结束时间 */ - private LocalDateTime endTime; + private LocalDate endTime; /** * 跳转路径 */ diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/advertisement/AdvertisementTaskDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/advertisement/AdvertisementTaskDO.java similarity index 93% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/advertisement/AdvertisementTaskDO.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/advertisement/AdvertisementTaskDO.java index a2a09e916..072b4a3bb 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/advertisement/AdvertisementTaskDO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/advertisement/AdvertisementTaskDO.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.dal.dataobject.advertisement; +package com.cf.imes.module.system.dal.dataobject.funds.advertisement; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/invoice/InvoiceTitleInfoDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/invoice/InvoiceTitleInfoDO.java new file mode 100644 index 000000000..6f84e30f2 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/invoice/InvoiceTitleInfoDO.java @@ -0,0 +1,93 @@ +package com.cf.imes.module.system.dal.dataobject.funds.invoice; + + +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; +import lombok.*; + +/** + * @author 发票抬头信息表 + */ +@TableName("invoice_title_info") +@KeySequence("invoice_title_info_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class InvoiceTitleInfoDO extends BaseDO { + + + /** + * 主键 + */ + @TableId + private Long id; + + + /** + * 组织ID + */ + private Long organId; + + + /** + * 发票抬头 + */ + private String invoiceTitle; + + + /** + * 开具类型 + */ + private Integer issueType; + + + /** + * 发票类型 + */ + private Integer invoiceType; + + + /** + * 纳税人识别号 + */ + private String taxpayerId; + + + /** + * 开户银行名称 + */ + private String bankName; + + + /** + * 开户银行账号 + */ + private String bankAccount; + + + /** + * 注册场所地址 + */ + private String registeredAddress; + + + /** + * 注册固定电话 + */ + private String fixedPhone; + + + /** + * 邮箱 + */ + private String email; + + + +} + diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/organamount/OrganAmountDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/organamount/OrganAmountDO.java new file mode 100644 index 000000000..59a027109 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/organamount/OrganAmountDO.java @@ -0,0 +1,66 @@ +package com.cf.imes.module.system.dal.dataobject.funds.organamount; + + +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; +import lombok.*; + +import java.math.BigDecimal; + +@TableName("organ_amount") +@KeySequence("organ_amount_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrganAmountDO extends BaseDO { + + + /** + * 主键 + */ + @TableId + private Long id; + + + /** + * 组织ID + */ + private Long organId; + + + /** + * 现金金额 + */ + private BigDecimal amount; + + + /** + * 赠送金额 + */ + private BigDecimal giftAmount; + + + /** + * 货币类型 + */ + private Integer currency; + + + /** + * 货币单位 + */ + private String currencyUnit; + + + /** + * 可开票金额 + */ + private BigDecimal invoiceableAmount; + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/products/ProductsDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/products/ProductsDO.java similarity index 91% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/products/ProductsDO.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/products/ProductsDO.java index 359bb3cfa..3ea4d72c9 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/products/ProductsDO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/products/ProductsDO.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.dal.dataobject.products; +package com.cf.imes.module.system.dal.dataobject.funds.products; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; @@ -22,24 +22,31 @@ import lombok.*; @AllArgsConstructor public class ProductsDO extends BaseDO { + /** * 产品 ID */ @TableId private Long id; + + /** * 产品名称 */ private String productName; + + /** * 产品状态 */ private Integer status; + + /** * 软件id,不同软件的标识(用于分辩不同系统中的产品)---目前就只有一个产品 */ private Integer softwareId; - private Boolean deleted; + } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/products/ProductsDetailDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/products/ProductsDetailDO.java similarity index 96% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/products/ProductsDetailDO.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/products/ProductsDetailDO.java index 8a1ca2cfd..f98431cb1 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/products/ProductsDetailDO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/products/ProductsDetailDO.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.dal.dataobject.products; +package com.cf.imes.module.system.dal.dataobject.funds.products; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableField; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/recharge/GiftMoneyDetailsDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/recharge/GiftMoneyDetailsDO.java similarity index 95% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/recharge/GiftMoneyDetailsDO.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/recharge/GiftMoneyDetailsDO.java index 0c20b5336..15520c32e 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/recharge/GiftMoneyDetailsDO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/funds/recharge/GiftMoneyDetailsDO.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.dal.dataobject.recharge; +package com.cf.imes.module.system.dal.dataobject.funds.recharge; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/parser/ParserDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/parser/ParserDO.java new file mode 100644 index 000000000..bdda31e29 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/parser/ParserDO.java @@ -0,0 +1,59 @@ +package com.cf.imes.module.system.dal.dataobject.parser; + + +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; +import lombok.*; + + +/** + * 解析器配置 DO + * + * @author Administrator + */ +@TableName(value = "system_parser", autoResultMap = true) +@KeySequence("system_parser_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ParserDO extends BaseDO { + + + /** + * 主键 + */ + @TableId + private Long id; + + /** + * 解析器模板ID + */ + private Long parserTemplateId; + + /** + * 解析器名称 + */ + private String name; + + /** + * 解析器类型 + */ + private Integer parserType; + + /** + * 解析器配置 + */ + private String setting; + + /** + * 组织ID + */ + private Long organId; + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/parser/ParserLimitDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/parser/ParserLimitDO.java new file mode 100644 index 000000000..51611f3da --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/parser/ParserLimitDO.java @@ -0,0 +1,35 @@ +package com.cf.imes.module.system.dal.dataobject.parser; + + +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; +import lombok.*; + +@TableName(value = "system_parser_limit", autoResultMap = true) +@KeySequence("system_parser_limit_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ParserLimitDO extends BaseDO { + + + + /** + * 组织ID + */ + @TableId + private Long organId; + + + /** + * 解析器授权列表 + */ + private String parserIds; + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/parser/ParserTemplateDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/parser/ParserTemplateDO.java new file mode 100644 index 000000000..20fbb9b6f --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/parser/ParserTemplateDO.java @@ -0,0 +1,49 @@ +package com.cf.imes.module.system.dal.dataobject.parser; + + +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; +import lombok.*; + +@TableName("system_parser_template") +@KeySequence("system_parser_template_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ParserTemplateDO extends BaseDO { + + + /** + * 主键 + */ + @TableId + private Long id; + + /** + * 解析器名称 + */ + private String name; + + /** + * 解析器类型 + */ + private Integer parserType; + + /** + * 解析器配置 + */ + private String setting; + + /** + * 是否可用 + */ + private Boolean isEnabled; + + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/advertisement/AdvertisementMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/advertisement/AdvertisementMapper.java deleted file mode 100644 index a6aa9be0e..000000000 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/advertisement/AdvertisementMapper.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.cf.imes.module.system.dal.mysql.advertisement; - -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.cf.imes.framework.common.pojo.PageResult; -import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; -import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.cf.imes.module.system.controller.admin.advertisement.vo.AdvertisementPageReqVO; -import com.cf.imes.module.system.dal.dataobject.advertisement.AdvertisementDO; -import org.apache.ibatis.annotations.Mapper; - -import java.time.LocalDateTime; -import java.util.List; - -/** - * 广告信息表 Mapper - * - * @author 晨丰科技 - */ -@Mapper -public interface AdvertisementMapper extends BaseMapperX { - - default PageResult selectPage(AdvertisementPageReqVO reqVO, boolean deleted) { - - LambdaQueryWrapperX queryWrapper = new LambdaQueryWrapperX() - .likeIfPresent(AdvertisementDO::getAdName, reqVO.getAdName()) - .likeIfPresent(AdvertisementDO::getAdPosition, reqVO.getAdPosition()) - .eqIfPresent(AdvertisementDO::getStatus, reqVO.getStatus()) - .eqIfPresent(AdvertisementDO::getDeleted, deleted); - - if (reqVO.getOrder() == null) { - queryWrapper.orderByDesc(AdvertisementDO::getSort); - }else { - if (reqVO.getOrder().equals("ascend")) { - switch (reqVO.getField()) { - case "id" -> queryWrapper.orderByAsc(AdvertisementDO::getId); - case "adName" -> queryWrapper.orderByAsc(AdvertisementDO::getAdName); - case "updater" -> queryWrapper.orderByAsc(AdvertisementDO::getUpdater); - case "updateTime" -> queryWrapper.orderByAsc(AdvertisementDO::getUpdateTime); - default -> { - // default不排序 - } - } - }else if (reqVO.getOrder().equals("descend")) { - switch (reqVO.getField()) { - case "id" -> queryWrapper.orderByDesc(AdvertisementDO::getId); - case "adName" -> queryWrapper.orderByDesc(AdvertisementDO::getAdName); - case "updater" -> queryWrapper.orderByDesc(AdvertisementDO::getUpdater); - case "updateTime" -> queryWrapper.orderByDesc(AdvertisementDO::getUpdateTime); - default -> { - // default不排序 - } - } - } - } - - return selectPage(reqVO, queryWrapper); - - } - - default int updateAdStatus(Long id, Integer newStatus) { - return update(new LambdaUpdateWrapper() - .set(AdvertisementDO::getStatus, newStatus) - .eq(AdvertisementDO::getId, id) - .eq(AdvertisementDO::getDeleted, false)); - } - - default List selectList(LocalDateTime now, Integer status) { - return selectList(new LambdaQueryWrapperX() - .le(AdvertisementDO::getStartTime, now) - .eq(AdvertisementDO::getStatus, status)); - - } -} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/advertisement/AdvertisementMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/advertisement/AdvertisementMapper.java new file mode 100644 index 000000000..93851be38 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/advertisement/AdvertisementMapper.java @@ -0,0 +1,78 @@ +package com.cf.imes.module.system.dal.mysql.funds.advertisement; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.system.controller.admin.funds.advertisement.vo.AdvertisementPageReqVO; +import com.cf.imes.module.system.controller.admin.funds.advertisement.vo.AdvertisementRespVO; +import com.cf.imes.module.system.dal.dataobject.funds.advertisement.AdvertisementDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 广告信息表 Mapper + * + * @author 晨丰科技 + */ +@Mapper +public interface AdvertisementMapper extends BaseMapperX { + + default PageResult selectPage(AdvertisementPageReqVO reqVO) { + + LambdaQueryWrapperX queryWrapper = new LambdaQueryWrapperX() + .likeIfPresent(AdvertisementDO::getAdName, reqVO.getAdName()) + .likeIfPresent(AdvertisementDO::getAdPosition, reqVO.getAdPosition()) + .eqIfPresent(AdvertisementDO::getStatus, reqVO.getStatus()) + .eqIfPresent(AdvertisementDO::getDeleted, false); + + return selectPage(reqVO, queryWrapper); + + } + + default int updateAdStatus(Long id, Integer newStatus) { + return update(new LambdaUpdateWrapper() + .set(AdvertisementDO::getStatus, newStatus) + .eq(AdvertisementDO::getId, id) + .eq(AdvertisementDO::getDeleted, false)); + } + + default List selectList(LocalDateTime now, Integer status) { + return selectList(new LambdaQueryWrapperX() + .le(AdvertisementDO::getStartTime, now) + .eq(AdvertisementDO::getStatus, status)); + + } + + + + default AdvertisementDO selectAdByAdName(String adName,Long id) { + + LambdaQueryWrapperX queryWrapper = new LambdaQueryWrapperX<>(); + queryWrapper.eq(AdvertisementDO::getAdName, adName); + + if(id != null){ + queryWrapper.ne(AdvertisementDO::getId, id); + } + + return selectOne(queryWrapper); + + } + + + + void updateAdStatusIsPublish(@Param("now") LocalDate now,@Param("status") Integer status); + + + + void updateAdStatusIsEndPublished(@Param("now") LocalDate now,@Param("status") Integer status); + + + + List selectAdList(@Param("adPosition") Integer adPosition,@Param("status") Integer status,@Param("now") LocalDate now); + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/advertisement/AdvertisementTaskMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/advertisement/AdvertisementTaskMapper.java similarity index 91% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/advertisement/AdvertisementTaskMapper.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/advertisement/AdvertisementTaskMapper.java index 236cbbe67..45cf933e8 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/advertisement/AdvertisementTaskMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/advertisement/AdvertisementTaskMapper.java @@ -1,8 +1,8 @@ -package com.cf.imes.module.system.dal.mysql.advertisement; +package com.cf.imes.module.system.dal.mysql.funds.advertisement; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; -import com.cf.imes.module.system.dal.dataobject.advertisement.AdvertisementTaskDO; +import com.cf.imes.module.system.dal.dataobject.funds.advertisement.AdvertisementTaskDO; import org.apache.ibatis.annotations.Mapper; import java.util.List; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/invoice/InvoiceTitleInfoMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/invoice/InvoiceTitleInfoMapper.java new file mode 100644 index 000000000..02c94f01c --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/invoice/InvoiceTitleInfoMapper.java @@ -0,0 +1,13 @@ +package com.cf.imes.module.system.dal.mysql.funds.invoice; + + +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.module.system.dal.dataobject.funds.invoice.InvoiceTitleInfoDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface InvoiceTitleInfoMapper extends BaseMapperX { + + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/organamount/OrganAmountMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/organamount/OrganAmountMapper.java new file mode 100644 index 000000000..ab27bde95 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/organamount/OrganAmountMapper.java @@ -0,0 +1,18 @@ +package com.cf.imes.module.system.dal.mysql.funds.organamount; + + +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.module.system.dal.dataobject.funds.organamount.OrganAmountDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.math.BigDecimal; + +@Mapper +public interface OrganAmountMapper extends BaseMapperX { + + + @Select("select sum(amount) from organ_amount where deleted = false") + BigDecimal selectAllOrganAmount(); + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/products/ProductsDetailMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/products/ProductsDetailMapper.java similarity index 67% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/products/ProductsDetailMapper.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/products/ProductsDetailMapper.java index 94c46662f..2e0c40c84 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/products/ProductsDetailMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/products/ProductsDetailMapper.java @@ -1,10 +1,10 @@ -package com.cf.imes.module.system.dal.mysql.products; +package com.cf.imes.module.system.dal.mysql.funds.products; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.cf.imes.module.system.controller.admin.products.vo.productDetails.ProductDetailsPageReqVO; -import com.cf.imes.module.system.dal.dataobject.products.ProductsDetailDO; +import com.cf.imes.module.system.controller.admin.funds.products.vo.productDetails.ProductDetailsPageReqVO; +import com.cf.imes.module.system.dal.dataobject.funds.products.ProductsDetailDO; import org.apache.ibatis.annotations.Mapper; import java.math.BigDecimal; @@ -33,25 +33,25 @@ public interface ProductsDetailMapper extends BaseMapperX { } - // 时长查重,添加productId为查询条件 - default int selectCountByDuration(String duration, Long productId, Boolean flag) { + // 时长查重,添加productId为查询条件 + default int selectCountByDuration(String duration, Long productId) { LambdaQueryWrapperX queryWrapper = new LambdaQueryWrapperX<>(); - queryWrapper.eq(ProductsDetailDO::getDuration, duration) - .eq(ProductsDetailDO::getDeleted, false); - if (flag) { // flag为true时,查询条件中添加productId - queryWrapper.eq(ProductsDetailDO::getProductId, productId); - } + queryWrapper.eq(ProductsDetailDO::getProductId, productId) + .eq(ProductsDetailDO::getDeleted, false) + .eq(ProductsDetailDO::getDuration, duration); return Math.toIntExact(selectCount(queryWrapper)); + } -// 产量查重 - default int selectCountByOutput(BigDecimal output, Long productId, Boolean flag) { + + + // 产量查重 + default int selectCountByOutput(BigDecimal output, Long productId) { LambdaQueryWrapperX queryWrapper = new LambdaQueryWrapperX<>(); - queryWrapper.eq(ProductsDetailDO::getDuration, output) - .eq(ProductsDetailDO::getDeleted, false); - if (flag) { // flag为true时,查询条件中添加productId - queryWrapper.eq(ProductsDetailDO::getProductId, productId); - } + queryWrapper.eq(ProductsDetailDO::getProductId, productId) + .eq(ProductsDetailDO::getDeleted, false) + .eq(ProductsDetailDO::getDuration, output); return Math.toIntExact(selectCount(queryWrapper)); + } } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/products/ProductsMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/products/ProductsMapper.java similarity index 77% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/products/ProductsMapper.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/products/ProductsMapper.java index d7f218e45..70fc8afa5 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/products/ProductsMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/products/ProductsMapper.java @@ -1,10 +1,10 @@ -package com.cf.imes.module.system.dal.mysql.products; +package com.cf.imes.module.system.dal.mysql.funds.products; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.cf.imes.module.system.controller.admin.products.vo.product.ProductPageReqVO; -import com.cf.imes.module.system.dal.dataobject.products.ProductsDO; +import com.cf.imes.module.system.controller.admin.funds.products.vo.product.ProductPageReqVO; +import com.cf.imes.module.system.dal.dataobject.funds.products.ProductsDO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/recharge/GiftMoneyDetailsMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/recharge/GiftMoneyDetailsMapper.java similarity index 93% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/recharge/GiftMoneyDetailsMapper.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/recharge/GiftMoneyDetailsMapper.java index 32fee4bd6..7b369fa25 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/recharge/GiftMoneyDetailsMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/recharge/GiftMoneyDetailsMapper.java @@ -1,10 +1,10 @@ -package com.cf.imes.module.system.dal.mysql.recharge; +package com.cf.imes.module.system.dal.mysql.funds.recharge; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.cf.imes.module.system.controller.admin.recharge.vo.RechargePageReqVO; -import com.cf.imes.module.system.dal.dataobject.recharge.GiftMoneyDetailsDO; +import com.cf.imes.module.system.controller.admin.funds.recharge.vo.RechargePageReqVO; +import com.cf.imes.module.system.dal.dataobject.funds.recharge.GiftMoneyDetailsDO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/parser/ParserLimitMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/parser/ParserLimitMapper.java new file mode 100644 index 000000000..dfb450621 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/parser/ParserLimitMapper.java @@ -0,0 +1,19 @@ +package com.cf.imes.module.system.dal.mysql.parser; + + +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.module.system.dal.dataobject.parser.ParserLimitDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author 解析器授权 Mapper + */ +@Mapper +public interface ParserLimitMapper extends BaseMapperX { + + + + + +} + diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/parser/ParserMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/parser/ParserMapper.java new file mode 100644 index 000000000..1188e9fa3 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/parser/ParserMapper.java @@ -0,0 +1,14 @@ +package com.cf.imes.module.system.dal.mysql.parser; + +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.module.system.dal.dataobject.parser.ParserDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author 解析器 Mapper + */ +@Mapper +public interface ParserMapper extends BaseMapperX { + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/parser/ParserTemplateMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/parser/ParserTemplateMapper.java new file mode 100644 index 000000000..430e89697 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/parser/ParserTemplateMapper.java @@ -0,0 +1,19 @@ +package com.cf.imes.module.system.dal.mysql.parser; + + +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.module.system.dal.dataobject.parser.ParserTemplateDO; +import org.apache.ibatis.annotations.Mapper; + + +/** + * @author 解析器模板 Mapper + */ +@Mapper +public interface ParserTemplateMapper extends BaseMapperX { + + + + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/framework/rpc/config/RpcConfiguration.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/framework/rpc/config/RpcConfiguration.java index 4f10eaa34..e2f0de47c 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/framework/rpc/config/RpcConfiguration.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/framework/rpc/config/RpcConfiguration.java @@ -1,6 +1,7 @@ package com.cf.imes.module.system.framework.rpc.config; import com.cf.imes.module.executor.api.customplateno.OrderCustomPlateNoApi; +import com.cf.imes.module.executor.api.funds.ExecutorFundsApi; import com.cf.imes.module.executor.api.orderProcess.OrderProcessApi; import com.cf.imes.module.executor.api.plan.OrderPlanApi; import com.cf.imes.module.infra.api.file.FileApi; @@ -9,6 +10,6 @@ import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Configuration; @Configuration(proxyBeanMethods = false) -@EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class, OrderProcessApi.class, OrderPlanApi.class, OrderCustomPlateNoApi.class}) +@EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class, OrderProcessApi.class, OrderPlanApi.class, OrderCustomPlateNoApi.class, ExecutorFundsApi.class}) public class RpcConfiguration { } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/job/advertisement/UpdateAdStatus.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/job/advertisement/UpdateAdStatus.java new file mode 100644 index 000000000..07d41353d --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/job/advertisement/UpdateAdStatus.java @@ -0,0 +1,57 @@ +package com.cf.imes.module.system.job.advertisement; + + +import com.cf.imes.module.system.dal.mysql.funds.advertisement.AdvertisementMapper; +import com.cf.imes.module.system.enums.advertisement.AdvertisementStatusEnum; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.time.LocalDate; + +/** + * @author 定时任务修改广告的发布状态 + */ +@Component +public class UpdateAdStatus { + + @Resource + private AdvertisementMapper advertisementMapper; + + + // 修改广告的发布状态,将 未发布 修改为 发布,凌晨一点执行 + // @Scheduled(cron = "0 0 1 * * ?") + public void updateAdStatusIsPublish() { + + LocalDate now = LocalDate.now(); + + + /** + * 修改广告的发布状态,修改 未发布 为 发布 + * @param now 现在的时间 + * @param status 未发布的状态 + */ + advertisementMapper.updateAdStatusIsPublish(now,AdvertisementStatusEnum.UNPUBLISHED.getStatus()); + + + } + + + + // 修改广告的发布状态,将 发布 修改为 已结束,晚上 11点半执行 + // @Scheduled(cron = "0 30 23 * * ?") + public void updateAdStatusIsEndPublished(){ + + LocalDate now = LocalDate.now(); + + /** + * 修改广告的发布状态,修改 发布 为 未发布 + * @param now 现在的时间 + * @param status 发布的状态 + */ + advertisementMapper.updateAdStatusIsEndPublished(now,AdvertisementStatusEnum.PUBLISHED.getStatus()); + + } + + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/mq/producer/advertisement/AdvertisementProducer.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/mq/producer/advertisement/AdvertisementProducer.java index c53993f86..091acc11c 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/mq/producer/advertisement/AdvertisementProducer.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/mq/producer/advertisement/AdvertisementProducer.java @@ -10,6 +10,7 @@ import org.springframework.web.context.request.RequestContextHolder; import javax.annotation.Resource; import java.time.Duration; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.UUID; @@ -36,7 +37,7 @@ public class AdvertisementProducer { * @param triggerTime 到期时间 */ - public String sendAdvertisementSendMessage(Long adId, String action, LocalDateTime triggerTime) { + public String sendAdvertisementSendMessage(Long adId, String action, LocalDate triggerTime) { String messageId = UUID.randomUUID().toString(); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/advertisement/AdvertisementService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/advertisement/AdvertisementService.java deleted file mode 100644 index 4c473d2d5..000000000 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/advertisement/AdvertisementService.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.cf.imes.module.system.service.advertisement; - - -import com.cf.imes.framework.common.pojo.PageResult; -import com.cf.imes.module.system.controller.admin.advertisement.vo.AdvertisementPageReqVO; -import com.cf.imes.module.system.controller.admin.advertisement.vo.AdvertisementSaveReqVO; -import com.cf.imes.module.system.dal.dataobject.advertisement.AdvertisementDO; - -import javax.validation.Valid; - -public interface AdvertisementService { - - /** - * 创建广告 - * - * @param createReqVO 产品名称 - * @return 编号 - */ - Long create(@Valid AdvertisementSaveReqVO createReqVO); - - /** - * 更新广告 - * - * @param updateReqVO 更新信息 - */ - void update(@Valid AdvertisementDO updateReqVO, Integer index); - - /** - * 更新广告状态 - * - * @param id 更新信息 - */ - void update(Long id, Integer status); - - /** - * 删除广告 - * - * @param id 编号 - */ - void delete(Long id); - - /** - * 获得广告 - * - * @param id 编号 - */ - AdvertisementDO get(Long id); - - /** - * 获得广告 分页 - * - * @param pageReqVO 分页查询 - */ - PageResult getPage(AdvertisementPageReqVO pageReqVO); - -} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/advertisement/AdvertisementServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/advertisement/AdvertisementServiceImpl.java deleted file mode 100644 index be9be6f60..000000000 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/advertisement/AdvertisementServiceImpl.java +++ /dev/null @@ -1,251 +0,0 @@ -package com.cf.imes.module.system.service.advertisement; - -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.nacos.common.utils.StringUtils; -import com.cf.imes.framework.common.pojo.PageResult; -import com.cf.imes.framework.common.util.object.BeanUtils; -import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.cf.imes.framework.mybatis.core.query.LambdaUpdateWrapperX; -import com.cf.imes.module.system.controller.admin.advertisement.vo.AdvertisementPageReqVO; -import com.cf.imes.module.system.controller.admin.advertisement.vo.AdvertisementSaveReqVO; -import com.cf.imes.module.system.dal.dataobject.advertisement.AdvertisementDO; -import com.cf.imes.module.system.dal.dataobject.advertisement.AdvertisementTaskDO; -import com.cf.imes.module.system.dal.mysql.advertisement.AdvertisementMapper; -import com.cf.imes.module.system.dal.mysql.advertisement.AdvertisementTaskMapper; -import com.cf.imes.module.system.enums.advertisement.AdvertisementStatusEnum; -import com.cf.imes.module.system.enums.advertisement.MessageStatusEnum; -import com.cf.imes.module.system.mq.producer.advertisement.AdvertisementProducer; -import com.cf.imes.module.system.service.dict.DictDataService; -import com.cf.imes.module.system.util.SnowflakeIdWorker3rd; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; - -import javax.annotation.Resource; -import java.time.LocalDateTime; -import java.util.Arrays; - -import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; - -/** - * 广告表 advertisement Service 实现类 - * - * @author 晨丰科技 - */ -@Service -@Validated -@Slf4j -public class AdvertisementServiceImpl implements AdvertisementService{ - - private static final String ADVERTISEMENT_POSITION = "advertisement_position"; - - private static final String EMPTY_STRING = new String(); - - @Value("${chenfeng.info.name}") - private String SOFT_WARE_ID; // 获取软件标识-可修改 - - @Resource - private DictDataService dictDataService; - - @Resource - private AdvertisementMapper advertisementMapper; - - @Resource - private AdvertisementTaskMapper advertisementTaskMapper; - - @Resource - private SnowflakeIdWorker3rd idWorker; - - @Resource - private AdvertisementProducer advertisementProducer; - - @Override - @Transactional(rollbackFor = Exception.class) - public Long create(AdvertisementSaveReqVO createReqVO) { - // 遍历adPosition验证广告位置是否存在 - for (Integer adPosition : createReqVO.getAdPosition()) { - if (dictDataService.getDictData(ADVERTISEMENT_POSITION, adPosition.toString()) == null) { - throw exception(ADVERTISEMENT_POSITION_NO_EXIST); - } - } - // 插入广告 - Long id = idWorker.nextId(); - createReqVO.setId(id); - AdvertisementDO advertisementDO = BeanUtils.toBean(createReqVO, AdvertisementDO.class) - .setAdPosition(Arrays.toString(createReqVO.getAdPosition())) -// .setStartTime(createReqVO.getStartTime().toLocalDate().atStartOfDay()) // 开始结束时间设置为每天00:00:00 -// .setEndTime(createReqVO.getEndTime().toLocalDate().atStartOfDay()) - .setStatus(validateAdvertisementStatus(createReqVO.getStartTime(), createReqVO.getEndTime())) - .setSoftwareId(SOFT_WARE_ID); - advertisementMapper.insert(advertisementDO); - - // 使用子线程,添加生产者队列,待到达发布时间进行广告状态修改为已发布 - sendDelayMessages(advertisementDO); - return advertisementDO.getId(); - } - - /** - * 发送初始延迟消息 - * - * 根据状态发送延迟信息 - */ - private void sendDelayMessages(AdvertisementDO ad) { - - // 删除可能存在的旧消息 - cancelExistingMessages(ad.getId()); - - // 发送发布消息 - if (ad.getStartTime().isAfter(LocalDateTime.now())) { - String publishMsgId = advertisementProducer.sendAdvertisementSendMessage(ad.getId(), AdvertisementStatusEnum.PUBLISHED.getName(), ad.getStartTime()); // 发布 - trackMessage(ad.getId(), publishMsgId, AdvertisementStatusEnum.PUBLISHED.getStatus(), MessageStatusEnum.PENDING.getStatus()); - } - - // 发送结束消息 - if (ad.getEndTime().isAfter(LocalDateTime.now())) { - String expireMsgId = advertisementProducer.sendAdvertisementSendMessage(ad.getId(), AdvertisementStatusEnum.ENDED.getName(), ad.getEndTime()); // 结束 - trackMessage(ad.getId(), expireMsgId, AdvertisementStatusEnum.ENDED.getStatus(), MessageStatusEnum.PENDING.getStatus()); - } - } - - /** - * 记录消息追踪 - */ - private void trackMessage(Long adId, String messageId, Integer advertisementStatus, Integer messageStatus) { - if (StringUtils.isNotBlank(messageId)) { - advertisementTaskMapper.insert(new AdvertisementTaskDO() - .setAdvertisementId(adId) - .setMessageId(messageId) - .setMessageStatus(messageStatus) - .setAdvertisementStatus(advertisementStatus) - ); - log.info("[trackMessage][adId({}) messageId({}) 记录消息追踪成功]", adId, messageId); - } - } - - /** - * 取消关联的消息 - */ - private void cancelExistingMessages(Long adId) { - // 标记消息为已取消(实际消费时检查) - advertisementTaskMapper.updateToDeletedById(adId,true, MessageStatusEnum.CANCELLED.getStatus()); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void update(AdvertisementDO updateReqVO, Integer index) { - // 确认广告是否存在 - validateAdvertisementExists(updateReqVO.getId(), false); - // 更新内容 - AdvertisementDO advertisementDO = BeanUtils.toBean(updateReqVO, AdvertisementDO.class); - // 删除现有广告的延迟队列 - if (index == 0) { // 全部更新 - advertisementDO.setAdRedirectUrl(getEmpty(advertisementDO.getAdRedirectUrl())) - .setSort(getZeroInt(advertisementDO.getSort())) - .setStatus(validateAdvertisementStatus(advertisementDO.getStartTime(), advertisementDO.getEndTime())); - - } else { - advertisementDO = getAdvertisementDO(updateReqVO.getId(), false) - .setStartTime(updateReqVO.getStartTime()) - .setEndTime(updateReqVO.getEndTime()) - .setStatus(validateAdvertisementStatus(advertisementDO.getStartTime(), advertisementDO.getEndTime())); - - } - // 根据修改时间,新增广告状态修改延迟队列 - advertisementMapper.updateById(advertisementDO); - - // 使用子线程,添加生产者队列,待到达发布时间进行广告状态修改为已发布 - sendDelayMessages(advertisementDO); - } - // 判断广告状态 - public int validateAdvertisementStatus(LocalDateTime startTime, LocalDateTime endTime) { - // 当前时间 - LocalDateTime now = LocalDateTime.now(); - if (now.isBefore(startTime)) { // 未开始 - return AdvertisementStatusEnum.UNPUBLISHED.getStatus(); - } else if (now.isAfter(endTime)) { // 已结束 - return AdvertisementStatusEnum.ENDED.getStatus(); - } else { // 进行中 - return AdvertisementStatusEnum.PUBLISHED.getStatus(); - } - } - - /** - * value为空返回EMPTY_STRING - * - * @param value - * @return - */ - private String getEmpty(String value) { - return StringUtils.defaultIfEmpty(value, EMPTY_STRING); - } - - /** - * value为空返回0.0 - * - * @param value - * @return - */ - private int getZeroInt(Integer value) { - return ObjectUtil.defaultIfNull(value, 0); - } - - private void validateAdvertisementExists(Long id, Boolean deleted) { - AdvertisementDO advertisementDO = advertisementMapper.selectOne(new LambdaQueryWrapperX() - .eq(AdvertisementDO::getId, id) - .eq(AdvertisementDO::getDeleted, deleted)); - if (advertisementDO == null) { - throw exception(ADVERTISEMENT_NO_EXIST); - } - } - - private AdvertisementDO getAdvertisementDO(Long id, Boolean deleted) { - return advertisementMapper.selectOne(new LambdaQueryWrapperX() - .eq(AdvertisementDO::getId, id) - .eq(AdvertisementDO::getDeleted, deleted)); - } - - @Override - public void update(Long id, Integer status) { // 发布,结束 - if (status.equals(AdvertisementStatusEnum.PUBLISHED.getStatus())) { // 立即发布 - if (LocalDateTime.now().isAfter(getAdvertisementDO(id, false).getStartTime())) { - throw exception(ADVERTISEMENT_STATUS_ERROR); - } - if (LocalDateTime.now().isAfter(getAdvertisementDO(id, false).getEndTime())) { - throw exception(ADVERTISEMENT_STATUS_ERROR2); - } - - } else if (status.equals(AdvertisementStatusEnum.ENDED.getStatus())) { // 结束发布 - if (LocalDateTime.now().isBefore(getAdvertisementDO(id, false).getStartTime())) { - throw exception(ADVERTISEMENT_END_ERROR); - } - if (LocalDateTime.now().isAfter(getAdvertisementDO(id, false).getEndTime())) { - throw exception(ADVERTISEMENT_END_ERROR2); - } - } - advertisementMapper.update(new AdvertisementDO().setStatus(status), - new LambdaUpdateWrapperX() - .eq(AdvertisementDO::getId, id) - .eq(AdvertisementDO::getDeleted, false)); - } - - @Override - public void delete(Long id) { - // 确认广告是否存在 - validateAdvertisementExists(id, false); - advertisementMapper.deleteById(id); - } - - @Override - public AdvertisementDO get(Long id) { - validateAdvertisementExists(id, false); - return getAdvertisementDO(id, false); - } - - @Override - public PageResult getPage(AdvertisementPageReqVO pageReqVO) { - return advertisementMapper.selectPage(pageReqVO, false); - } -} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/advertisement/AdvertisementCompensateTask.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/advertisement/AdvertisementCompensateTask.java similarity index 87% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/advertisement/AdvertisementCompensateTask.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/advertisement/AdvertisementCompensateTask.java index 2df521899..ee6b7bca8 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/advertisement/AdvertisementCompensateTask.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/advertisement/AdvertisementCompensateTask.java @@ -1,11 +1,11 @@ -package com.cf.imes.module.system.service.advertisement; +package com.cf.imes.module.system.service.funds.advertisement; import com.alibaba.nacos.common.utils.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.cf.imes.module.system.dal.dataobject.advertisement.AdvertisementDO; -import com.cf.imes.module.system.dal.dataobject.advertisement.AdvertisementTaskDO; -import com.cf.imes.module.system.dal.mysql.advertisement.AdvertisementMapper; -import com.cf.imes.module.system.dal.mysql.advertisement.AdvertisementTaskMapper; +import com.cf.imes.module.system.dal.dataobject.funds.advertisement.AdvertisementDO; +import com.cf.imes.module.system.dal.dataobject.funds.advertisement.AdvertisementTaskDO; +import com.cf.imes.module.system.dal.mysql.funds.advertisement.AdvertisementMapper; +import com.cf.imes.module.system.dal.mysql.funds.advertisement.AdvertisementTaskMapper; import com.cf.imes.module.system.enums.advertisement.AdvertisementStatusEnum; import com.cf.imes.module.system.enums.advertisement.MessageStatusEnum; import com.cf.imes.module.system.mq.message.advertisement.AdvertisementSendMessage; @@ -17,6 +17,7 @@ import org.springframework.web.context.request.RequestContextHolder; import javax.annotation.Resource; import java.time.Duration; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; import java.util.UUID; @@ -47,7 +48,7 @@ public class AdvertisementCompensateTask { // @Scheduled(cron = "0 0/30 * * * ?") public void checkAdStatusConsistency() { // 1. 检查应发布但未发布的广告 - List unpublishedAds = advertisementMapper.selectList(LocalDateTime.now(), AdvertisementStatusEnum.UNPUBLISHED.getStatus()); + List unpublishedAds = advertisementMapper.selectList(LocalDate.now().atStartOfDay(), AdvertisementStatusEnum.UNPUBLISHED.getStatus()); unpublishedAds.forEach(ad -> { updateAdStatus(ad, AdvertisementStatusEnum.PUBLISHED.getStatus()); rescheduleExpireMessage(ad); @@ -63,8 +64,8 @@ public class AdvertisementCompensateTask { } private void rescheduleExpireMessage(AdvertisementDO ad) { - if (ad.getEndTime().isAfter(LocalDateTime.now())) { - String newMsgId = sendSingleMessage(ad.getId(), "expire", ad.getEndTime()); + if (ad.getEndTime().isAfter(LocalDate.now())) { + String newMsgId = sendSingleMessage(ad.getId(), "expire", ad.getEndTime().atStartOfDay()); trackMessage(ad.getId(), newMsgId, AdvertisementStatusEnum.PUBLISHED.getStatus(), MessageStatusEnum.CANCELLED.getStatus()); } } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/advertisement/AdvertisementService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/advertisement/AdvertisementService.java new file mode 100644 index 000000000..0447b904d --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/advertisement/AdvertisementService.java @@ -0,0 +1,55 @@ +package com.cf.imes.module.system.service.funds.advertisement; + + +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.module.system.controller.admin.funds.advertisement.vo.AdvertisementPageReqVO; +import com.cf.imes.module.system.controller.admin.funds.advertisement.vo.AdvertisementPublishReqVO; +import com.cf.imes.module.system.controller.admin.funds.advertisement.vo.AdvertisementRespVO; +import com.cf.imes.module.system.controller.admin.funds.advertisement.vo.AdvertisementSaveReqVO; + +import java.util.List; + +public interface AdvertisementService { + + /** + * 创建广告 + * + * @param createReqVO 产品名称 + * @return 编号 + */ + Long create(AdvertisementSaveReqVO createReqVO); + + /** + * 更新广告 + * + * @param reqVO 更新信息 + */ + void update(AdvertisementSaveReqVO reqVO); + + /** + * 删除广告 + * + * @param id 编号 + */ + void delete(Long id); + + /** + * 获得广告 + * + * @param id 编号 + */ + AdvertisementRespVO get(Long id); + + /** + * 获得广告 分页 + * + * @param pageReqVO 分页查询 + */ + PageResult getPage(AdvertisementPageReqVO pageReqVO); + + + void updatePublishStatus(AdvertisementPublishReqVO reqVO); + + List getAdvertisementByPosition(Integer adPosition); + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/advertisement/AdvertisementServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/advertisement/AdvertisementServiceImpl.java new file mode 100644 index 000000000..8f771fa3f --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/advertisement/AdvertisementServiceImpl.java @@ -0,0 +1,494 @@ +package com.cf.imes.module.system.service.funds.advertisement; + +import cn.hutool.core.collection.CollUtil; +import com.cf.imes.framework.common.exception.ServiceException; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.common.util.Assert.AssertUtils; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.system.controller.admin.funds.advertisement.vo.*; +import com.cf.imes.module.system.dal.dataobject.funds.advertisement.AdvertisementDO; +import com.cf.imes.module.system.dal.mysql.funds.advertisement.AdvertisementMapper; +import com.cf.imes.module.system.dal.mysql.funds.advertisement.AdvertisementTaskMapper; +import com.cf.imes.module.system.enums.advertisement.AdvertisementStatusEnum; +import com.cf.imes.module.system.mq.producer.advertisement.AdvertisementProducer; +import com.cf.imes.module.system.service.dict.DictDataService; +import com.cf.imes.module.system.util.SnowflakeIdWorker3rd; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.time.LocalDate; +import java.util.*; + +import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; + +/** + * 广告表 advertisement Service 实现类 + * + * @author 晨丰科技 + */ +@Service +@Validated +@Slf4j +public class AdvertisementServiceImpl implements AdvertisementService{ + + private static final String ADVERTISEMENT_POSITION = "advertisement_position"; + + private static final String EMPTY_STRING = new String(); + + @Value("${chenfeng.info.name}") + private String SOFT_WARE_ID; // 获取软件标识-可修改 + + @Resource + private DictDataService dictDataService; + + @Resource + private AdvertisementMapper advertisementMapper; + + @Resource + private AdvertisementTaskMapper advertisementTaskMapper; + + @Resource + private SnowflakeIdWorker3rd idWorker; + + @Resource + private AdvertisementProducer advertisementProducer; + + @Resource + private AdImageFilePath adImageFilePath; + + + private static final String FIELD_AD_ID = "广告ID为:"; + + + @Override + @Transactional(rollbackFor = Exception.class) + public Long create(AdvertisementSaveReqVO createReqVO) { + + if(createReqVO.getStartTime().isAfter(createReqVO.getEndTime())){ + + throw exception(ADVERTISEMENT_TIME_ERROR); + } + + AdvertisementDO aDo = advertisementMapper.selectAdByAdName(createReqVO.getAdName(),null); + + AssertUtils.empty(aDo,ADVERTISEMENT_NAME_IS_EXIST); + + Long id = idWorker.nextId(); + + String filePath = ""; + if(createReqVO.getAdImageFile() != null) { + filePath = uploadAdImageFile(createReqVO.getAdImageFile(), id); + } + + // 插入广告 + createReqVO.setId(id); + AdvertisementDO advertisementDO = BeanUtils.toBean(createReqVO, AdvertisementDO.class) + .setAdPosition(Arrays.toString(createReqVO.getAdPosition())) + .setStatus(validateAdvertisementStatus(createReqVO.getStartTime())) + .setAdImagePath(filePath) + .setSoftwareId(SOFT_WARE_ID); + + advertisementMapper.insert(advertisementDO); + + return advertisementDO.getId(); + + } + + + + + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(AdvertisementSaveReqVO reqVO) { + + // 确认广告是否存在 + AdvertisementDO validated = validateAdvertisementExists(reqVO.getId()); + + AdvertisementDO aDo = advertisementMapper.selectAdByAdName(reqVO.getAdName(),reqVO.getId()); + + AssertUtils.empty(aDo,ADVERTISEMENT_NAME_IS_EXIST); + + if(reqVO.getStartTime().isAfter(reqVO.getEndTime())){ + throw exception(ADVERTISEMENT_TIME_ERROR); + } + + + String adImagePath = validated.getAdImagePath(); + if(reqVO.getAdImageFile() != null) { + adImagePath = uploadAdImageFile(reqVO.getAdImageFile(), reqVO.getId()); + + } + + + // 更新内容 + AdvertisementDO advertisementDO = BeanUtils.toBean(reqVO, AdvertisementDO.class) + .setAdPosition(Arrays.toString(reqVO.getAdPosition())) + .setStatus(validateAdvertisementStatus(reqVO.getStartTime())) + .setAdImagePath(adImagePath) + .setSoftwareId(SOFT_WARE_ID); + + advertisementMapper.updateById(advertisementDO); + + + } + + + + @Override + public void delete(Long id) { + + // 确认广告是否存在 + AdvertisementDO advertisementDO = validateAdvertisementExists(id); + + if(advertisementDO.getStatus().equals(AdvertisementStatusEnum.PUBLISHED.getStatus())){ + throw exception(ADVERTISEMENT_NO_DELETE); + } + + advertisementMapper.deleteById(id); + + deleteFilesById(adImageFilePath.getFilePath(),id.toString()); + + } + + + + + @Override + public AdvertisementRespVO get(Long id) { + + AdvertisementDO advertisementDO = validateAdvertisementExists(id); + + AdvertisementRespVO respVO = BeanUtils.toBean(advertisementDO, AdvertisementRespVO.class); + + viewImage(respVO); + + return respVO; + } + + + + @Override + public PageResult getPage(AdvertisementPageReqVO pageReqVO) { + + PageResult pageResult = advertisementMapper.selectPage(pageReqVO); + + if (CollUtil.isEmpty(pageResult.getList())) { + return new PageResult<>(pageResult.getTotal()); + } + + List respVOS = BeanUtils.toBean(pageResult.getList(), AdvertisementRespVO.class); + + respVOS.forEach(f->{ + f.setLaunchTime(f.getStartTime() + "~" + f.getEndTime()); + viewImage(f); + }); + + return new PageResult<>(respVOS,pageResult.getTotal()); + + } + + + + + @Override + public void updatePublishStatus(AdvertisementPublishReqVO reqVO) { + + Long id = reqVO.getId(); + + Integer status = reqVO.getStatus(); + + AdvertisementDO advertisementDO = validateAdvertisementExists(id); + + // 广告的开始时间 + LocalDate startTime = advertisementDO.getStartTime(); + + // 广告的结束时间 + LocalDate endTime = advertisementDO.getEndTime(); + + // 立即发布 + if (status.equals(AdvertisementStatusEnum.PUBLISHED.getStatus())) { + + if (LocalDate.now().isAfter(startTime)) { + throw exception(ADVERTISEMENT_STATUS_ERROR); + } + if (LocalDate.now().isAfter(endTime)) { + throw exception(ADVERTISEMENT_STATUS_ERROR2); + } + + advertisementDO.setStatus(status); + } + // 结束发布 + else if (status.equals(AdvertisementStatusEnum.ENDED.getStatus())) { + if (LocalDate.now().isBefore(startTime)) { + throw exception(ADVERTISEMENT_END_ERROR); + } + if (LocalDate.now().isAfter(endTime)) { + throw exception(ADVERTISEMENT_END_ERROR2); + } + + advertisementDO.setStatus(status); + } + // 重新发布 + else if(Boolean.TRUE.equals(reqVO.getIsRepublish())){ + + // 重新投放开始时间 + LocalDate isRepublishStartTime = Optional.ofNullable(reqVO.getStartTime()).orElseThrow(() -> new ServiceException(ADVERTISEMENT_REPUBLISH_NO_TIME)); + + // 重新投放结束时间 + LocalDate isRepublishEndTime = Optional.ofNullable(reqVO.getEndTime()).orElseThrow(() -> new ServiceException(ADVERTISEMENT_REPUBLISH_NO_TIME)); + + if(isRepublishStartTime.isAfter(isRepublishEndTime)){ + throw exception(ADVERTISEMENT_TIME_ERROR); + } + + validateAdvertisementStatus(isRepublishStartTime); + + advertisementDO.setStatus(AdvertisementStatusEnum.PUBLISHED.getStatus()); + + } + + advertisementMapper.updateById(advertisementDO); + + + } + + + + + + + @Override + public List getAdvertisementByPosition(Integer adPosition) { + + List respVOS = advertisementMapper.selectAdList(adPosition, AdvertisementStatusEnum.PUBLISHED.getStatus(), LocalDate.now()); + + if(CollUtil.isEmpty(respVOS)){ + return new ArrayList<>(); + } + + respVOS.forEach(this::viewImage); + + return respVOS; + + } + + + + + + + + + // 判断广告状态 + public int validateAdvertisementStatus(LocalDate startTime) { + + // 当前时间 + LocalDate now = LocalDate.now(); + + if(now.equals(startTime)){ + // 已上架 + return AdvertisementStatusEnum.PUBLISHED.getStatus(); + + }else if(now.isAfter(startTime)){ + throw exception(ADVERTISEMENT_START_TIME_ERROR); + + }else { + // 未上架 + return AdvertisementStatusEnum.UNPUBLISHED.getStatus(); + + } + + } + + + + + + private AdvertisementDO validateAdvertisementExists(Long id) { + + AdvertisementDO advertisementDO = advertisementMapper.selectOne(new LambdaQueryWrapperX() + .eq(AdvertisementDO::getDeleted, false) + .eq(AdvertisementDO::getId, id)); + if (advertisementDO == null) { + throw exception(ADVERTISEMENT_NO_EXIST); + } + return advertisementDO; + } + + + + + + + // 上传图片 + private String uploadAdImageFile(MultipartFile file,Long id){ + + try { + + // 删除之前的图片 + deleteFilesById(adImageFilePath.getFilePath(),id.toString()); + + // 获取原始文件名并提取扩展名 + String originalFilename = file.getOriginalFilename(); + String extension = null; + + int dotIndex = originalFilename.lastIndexOf('.'); + if (dotIndex != -1) { + + extension = originalFilename.substring(dotIndex); + } + + // 文件名: id + .扩展名 + String filename = id + extension; + + // 确保目录存在 + File dir = new File(adImageFilePath.getFilePath()); + if (!dir.exists()) { + dir.mkdirs(); + } + + File dest = new File(dir, filename); + file.transferTo(dest); + + return filename; + + } catch (Exception e) { + log.error("图片上传失败:"+e.getMessage()); + throw exception(IMAGE_UPLOAD_ERROR); + } + + } + + + + + + + + // 删除图片 + public static void deleteFilesById(String directoryPath, String id) { + File dir = new File(directoryPath); + if (!dir.exists() || !dir.isDirectory()) { + // 路径不存在或不是文件夹,不做处理 + return; + } + + File[] files = dir.listFiles(); + if (files == null) { + return; + } + + for (File file : files) { + if (file.isFile()) { + String fileName = file.getName(); + if (fileName.startsWith(id + ".")) { + file.delete(); // 删除文件,不管结果(失败不会抛异常) + } + } + } + } + + + + + + + + // 查询图片,广告管理界面,广告位置查询,错误只写到日志,页面不显示错误 + public void viewImage(AdvertisementRespVO respVO) { + + File dir = new File(adImageFilePath.getFilePath()); + if (!dir.exists()) { + log.error(FIELD_AD_ID + respVO.getId() + ",的图片查询失败,其目录不存在"); + return; + } + + File[] matches = dir.listFiles((d, name) -> name.startsWith(respVO.getId().toString() + ".")); + if (matches == null || matches.length == 0) { + log.error(FIELD_AD_ID + respVO.getId() + ",的图片查询失败,未找到对应图片"); + return; + } + + File imageFile = matches[0]; + + try { + + // 图片字节数据 + byte[] imageBytes = Files.readAllBytes(imageFile.toPath()); + + // 图片的文件类型 + respVO.setAdImageFileType(Files.probeContentType(imageFile.toPath())); + + // 图片的 Base64 字符串形式 + respVO.setAdImageBase64(Base64.getEncoder().encodeToString(imageBytes)); + + } catch (IOException e) { + + log.error(FIELD_AD_ID + respVO.getId() + ",的图片读取失败," + e.getMessage()); + } + + } + + + + + + + + + + + public ResponseEntity getImage(Long adId){ + + + File dir = new File(adImageFilePath.getFilePath()); + + if (!dir.exists()) { + return ResponseEntity.notFound().build(); + } + + // 找到文件名以 adId 开头的文件,例如 "123.png" + File[] matches = dir.listFiles((d, name) -> name.startsWith(adId.toString() + ".")); + + if (matches == null || matches.length == 0) { + return ResponseEntity.notFound().build(); + } + + + File imageFile = matches[0]; + + try { + + byte[] imageBytes = Files.readAllBytes(imageFile.toPath()); + String contentType = Files.probeContentType(imageFile.toPath()); + + return ResponseEntity.ok() + .contentType(MediaType.parseMediaType(contentType)) + .body(imageBytes); + } catch (IOException e) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + + + } + + + + + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/invoice/InvoiceService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/invoice/InvoiceService.java new file mode 100644 index 000000000..839b5a0b1 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/invoice/InvoiceService.java @@ -0,0 +1,12 @@ +package com.cf.imes.module.system.service.funds.invoice; + + +import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceTitleReqVO; + +/** + * @author 发票管理接口 + */ +public interface InvoiceService { + + void insetInvoiceTitle(InvoiceTitleReqVO reqVO); +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/invoice/InvoiceServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/invoice/InvoiceServiceImpl.java new file mode 100644 index 000000000..6784d1278 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/invoice/InvoiceServiceImpl.java @@ -0,0 +1,51 @@ +package com.cf.imes.module.system.service.funds.invoice; + + +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceTitleReqVO; +import com.cf.imes.module.system.dal.dataobject.funds.invoice.InvoiceTitleInfoDO; +import com.cf.imes.module.system.dal.mysql.funds.invoice.InvoiceTitleInfoMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + + +/** + * @author 发票管理接口 实现类 + */ +@Slf4j +@Service +public class InvoiceServiceImpl implements InvoiceService{ + + + @Resource + private InvoiceTitleInfoMapper invoiceTitleInfoMapper; + + + @Override + public void insetInvoiceTitle(InvoiceTitleReqVO reqVO) { + + + if(reqVO.getId() != null){ + InvoiceTitleInfoDO titleInfoDO = BeanUtils.toBean(reqVO, InvoiceTitleInfoDO.class); + invoiceTitleInfoMapper.updateById(titleInfoDO); + return; + } + + + invoiceTitleInfoMapper.insert(InvoiceTitleInfoDO.builder() + .invoiceTitle(reqVO.getInvoiceTitle()) + .invoiceType(reqVO.getInvoiceType()) + .issueType(reqVO.getIssueType()) + .taxpayerId(reqVO.getTaxpayerId()) + .bankName(reqVO.getBankName()) + .bankAccount(reqVO.getBankAccount()) + .registeredAddress(reqVO.getRegisteredAddress()) + .fixedPhone(reqVO.getFixedPhone()) + .email(reqVO.getEmail()) + .build()); + + } + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountService.java new file mode 100644 index 000000000..2127036b4 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountService.java @@ -0,0 +1,18 @@ +package com.cf.imes.module.system.service.funds.organamount; + + +import com.cf.imes.module.system.controller.admin.funds.organamount.vo.AllOrganAmountRespVO; +import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganAmountRespVO; + +/** + * @author 资金管理接口 + */ +public interface OrganAmountService { + + + OrganAmountRespVO getOrganAmount(Long organId); + + + AllOrganAmountRespVO getOrganAmountAll(); + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountServiceImpl.java new file mode 100644 index 000000000..49c98d4f0 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountServiceImpl.java @@ -0,0 +1,96 @@ +package com.cf.imes.module.system.service.funds.organamount; + + +import cn.hutool.core.util.ObjectUtil; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.module.executor.api.funds.ExecutorFundsApi; +import com.cf.imes.module.system.controller.admin.funds.organamount.vo.AllOrganAmountRespVO; +import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganAmountRespVO; +import com.cf.imes.module.system.dal.dataobject.funds.organamount.OrganAmountDO; +import com.cf.imes.module.system.dal.mysql.funds.organamount.OrganAmountMapper; +import com.cf.imes.module.system.service.organ.OrganService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +import java.math.BigDecimal; + +import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.ORGAN_AMOUNT_NO_EXIST; + +/** + * @author 资金管理接口 实现类 + */ +@Slf4j +@Service +public class OrganAmountServiceImpl implements OrganAmountService { + + + @Resource + private OrganAmountMapper organAmountMapper; + + @Resource + private OrganService organService; + + + @Resource + private ExecutorFundsApi executorFundsApi; + + + + + @Override + public OrganAmountRespVO getOrganAmount(Long organId) { + + organService.validOrgan(organId); + + OrganAmountDO organAmountDO = validateOrganAmountExists(organId); + + OrganAmountRespVO organAmountRespVO = BeanUtils.toBean(organAmountDO, OrganAmountRespVO.class); + + organAmountRespVO.setAvailableAmount(organAmountRespVO.getAmount().add(organAmountRespVO.getGiftAmount())); + + return organAmountRespVO; + + } + + + + + + @Override + public AllOrganAmountRespVO getOrganAmountAll() { + + AllOrganAmountRespVO respVO = new AllOrganAmountRespVO(); + + BigDecimal allOrganAmount = organAmountMapper.selectAllOrganAmount(); + + BigDecimal examineAmount = executorFundsApi.getToExamineAmount().getCheckedData(); + + respVO.setAllOrganAmount(allOrganAmount); + respVO.setToExamineAmount(examineAmount); + + return respVO; + + } + + + + + + + private OrganAmountDO validateOrganAmountExists(Long organId) { + + OrganAmountDO organAmountDO = organAmountMapper.selectById(organId); + + if (ObjectUtil.isNull(organAmountDO)) { + throw exception(ORGAN_AMOUNT_NO_EXIST); + } + + return organAmountDO; + + } + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/products/ProductsDetailService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/products/ProductsDetailService.java similarity index 72% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/products/ProductsDetailService.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/products/ProductsDetailService.java index 95b578893..1e697b277 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/products/ProductsDetailService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/products/ProductsDetailService.java @@ -1,9 +1,9 @@ -package com.cf.imes.module.system.service.products; +package com.cf.imes.module.system.service.funds.products; import com.cf.imes.framework.common.pojo.PageResult; -import com.cf.imes.module.system.controller.admin.products.vo.productDetails.ProductDetailsPageReqVO; -import com.cf.imes.module.system.controller.admin.products.vo.productDetails.ProductDetailsSaveReqVO; -import com.cf.imes.module.system.dal.dataobject.products.ProductsDetailDO; +import com.cf.imes.module.system.controller.admin.funds.products.vo.productDetails.ProductDetailsPageReqVO; +import com.cf.imes.module.system.controller.admin.funds.products.vo.productDetails.ProductDetailsSaveReqVO; +import com.cf.imes.module.system.dal.dataobject.funds.products.ProductsDetailDO; import javax.validation.Valid; import java.util.List; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/products/ProductsDetailServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/products/ProductsDetailServiceImpl.java new file mode 100644 index 000000000..6fc271c1f --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/products/ProductsDetailServiceImpl.java @@ -0,0 +1,265 @@ +package com.cf.imes.module.system.service.funds.products; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.nacos.common.utils.StringUtils; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.common.util.Assert.AssertUtils; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.system.controller.admin.funds.products.vo.productDetails.ProductDetailsPageReqVO; +import com.cf.imes.module.system.controller.admin.funds.products.vo.productDetails.ProductDetailsSaveReqVO; +import com.cf.imes.module.system.dal.dataobject.funds.products.ProductsDO; +import com.cf.imes.module.system.dal.dataobject.funds.products.ProductsDetailDO; +import com.cf.imes.module.system.dal.mysql.funds.products.ProductsDetailMapper; +import com.cf.imes.module.system.dal.mysql.funds.products.ProductsMapper; +import com.cf.imes.module.system.enums.products.DurationUnitEnum; +import com.cf.imes.module.system.enums.products.ProductStatusEnum; +import com.cf.imes.module.system.enums.products.ProductsPurchaseTypeEnum; +import com.cf.imes.module.system.util.SnowflakeIdWorker3rd; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.List; + +import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; + +/** + * 产品明细 productsDetails Service 实现类 + * + * @author 晨丰科技 + */ +@Service +@Validated +public class ProductsDetailServiceImpl implements ProductsDetailService { + + @Resource + private ProductsDetailMapper productDetailsMapper; + + @Resource + private ProductsMapper productsMapper; + + @Resource + private SnowflakeIdWorker3rd idWorker; + + + + + @Override + public Long create(ProductDetailsSaveReqVO createReqVO) { + + // 校验是否有这个产品 + validateProductExist(createReqVO.getProductId()); + + if (createReqVO.getPurchaseType().equals(ProductsPurchaseTypeEnum.DURATION.getStatus())) { + + String duration = createReqVO.getDuration(); + + AssertUtils.notEmpty(duration,PRODUCTS_DURATION_NOT_NULL); + + // 校验时长 + duration = checkDuration(duration); + + String giftDuration = null; + if (createReqVO.getGiftDuration() != null) { + giftDuration = checkDuration(createReqVO.getGiftDuration()); + } + + createReqVO.setDuration(duration) + .setGiftDuration(giftDuration); + + // 查询是否有重复的定价 + checkProductDetails(createReqVO); + + } else if (createReqVO.getPurchaseType().equals(ProductsPurchaseTypeEnum.OUTPUT.getStatus())) { + if (StringUtils.isBlank(createReqVO.getDuration())) { + throw exception(PRODUCTS_OUTPUT_NOT_NULL); + } + } + + Long id = idWorker.nextId(); + createReqVO.setId(id); + ProductsDetailDO productDetailsDO = BeanUtils.toBean(createReqVO, ProductsDetailDO.class).setId(id); + productDetailsMapper.insert(productDetailsDO); + return id; + + } + + + + + + + @Override + public void update(ProductDetailsSaveReqVO updateReqVO) { + + validateProductExist(updateReqVO.getProductId()); + + validateProductDetailsExists(updateReqVO.getId()); + + if (updateReqVO.getPurchaseType().equals(ProductsPurchaseTypeEnum.DURATION.getStatus())) { + + if (StringUtils.isBlank(updateReqVO.getDuration())) { + throw exception(PRODUCTS_DURATION_NOT_NULL); + } + // 校验时长 + String duration = checkDuration(updateReqVO.getDuration()); + String giftDuration = null; + if (updateReqVO.getGiftDuration() != null) { + giftDuration = checkDuration(updateReqVO.getGiftDuration()); + } + updateReqVO.setDuration(duration).setGiftDuration(giftDuration); + + // 校验同时长是否还有其他的定价规则 + checkProductDetails(updateReqVO); + + + } else if (updateReqVO.getPurchaseType().equals(ProductsPurchaseTypeEnum.OUTPUT.getStatus())) { + if (StringUtils.isBlank(updateReqVO.getDuration())) { + throw exception(PRODUCTS_OUTPUT_NOT_NULL); + } + } + + ProductsDetailDO productDetailsDO = BeanUtils.toBean(updateReqVO, ProductsDetailDO.class) + .setDiscount(getZeroBigDecimal(updateReqVO.getDiscount())) + .setOriginalPrice(getZeroBigDecimal(updateReqVO.getOriginalPrice())) + .setIsDiscounted(updateReqVO.getIsDiscounted()); + productDetailsMapper.updateById(productDetailsDO); + } + + + + /** + * value为空返回0.0 + * + * @param value + * @return + */ + private BigDecimal getZeroBigDecimal(BigDecimal value) { + return ObjectUtil.defaultIfNull(value, BigDecimal.ZERO); + } + + @Override + public void delete(Long id) { + + ProductsDetailDO productsDetailDO = validateProductDetailsExists(id); + + validateProductExist(productsDetailDO.getProductId()); + + productDetailsMapper.deleteById(id); + + } + + @Override + public List get(Long id) { + validateProductDetailsExists(id); + return productDetailsMapper.selectList(); + } + + @Override + public PageResult getPage(ProductDetailsPageReqVO pageReqVO) { + return productDetailsMapper.selectPage(pageReqVO.setDeleted(0)); + } + + + + private ProductsDetailDO validateProductDetailsExists(Long id) { + if (id == null) { + throw exception(PRODUCTS_DETAIL_NO_EXIST); + } + + ProductsDetailDO productsDetailDO = productDetailsMapper.selectOne(new LambdaQueryWrapperX() + .eq(ProductsDetailDO::getId, id) + .eq(ProductsDetailDO::getDeleted, false)); + + if (productsDetailDO == null) { + throw exception(PRODUCTS_DETAIL_NO_EXIST); + } + + return productsDetailDO; + } + + + + + + // 时长校验 + private String checkDuration(String duration){ + + if (duration == null || !duration.contains("-")) { + throw new IllegalArgumentException("格式错误,格式为:时长值-单位,例如 10-月"); + } + + String[] parts = duration.split("-", 2); + String valueStr = parts[0].trim(); + String timeUnit = parts[1].trim(); + + // 校验时长值 + if (valueStr.isEmpty() || !valueStr.matches("^\\d+$")) { + throw exception(PRODUCTS_DURATION_INT_ERR); + } + + // 去除前导 0 + valueStr = valueStr.replaceFirst("^0+(?!$)", ""); + + int timeValue = Integer.parseInt(valueStr); + if (timeValue <= 0) { + throw exception(PRODUCTS_DURATION_INT_ERR); + } + + // 校验时间单位 + if (timeUnit.isEmpty() + || !(timeUnit.equals(DurationUnitEnum.YEAR.getName()) + || timeUnit.equals(DurationUnitEnum.MONTH.getName()) + || timeUnit.equals(DurationUnitEnum.DAY.getName()))) { + + throw exception(PRODUCTS_DURATION_UNIT_ERR); + } + + return timeValue + timeUnit; + + } + + + + // 产品存在性校验 + private void validateProductExist(Long productId){ + ProductsDO productsDO = productsMapper.selectOne(new LambdaQueryWrapperX() + .eq(ProductsDO::getId, productId) + .eq(ProductsDO::getDeleted, false)); + + AssertUtils.notEmpty(productsDO,PRODUCTS_NO_EXIST); + + if(productsDO.getStatus().equals(ProductStatusEnum.PRODUCT_UPDATES.getStatus())){ + throw exception(PRODUCTS_DETAIL_NO_UPDATE); + } + + } + + + + + // 时长/产量去重 + private void checkProductDetails(ProductDetailsSaveReqVO createReqVO){ + int count; + if (createReqVO.getPurchaseType() == 0){ + // 时长去重 + count = productDetailsMapper.selectCountByDuration(createReqVO.getDuration(), createReqVO.getProductId()); + if (count > 0) { + throw exception(PRODUCTS_DETAIL_DURATION_EXIST); + } + }else if (createReqVO.getPurchaseType() == 1){ + //产量去重 + count = productDetailsMapper.selectCountByOutput(createReqVO.getOutput(), createReqVO.getProductId()); + if (count > 0) { + throw exception(PRODUCTS_DETAIL_OUTPUT_EXIST); + } + } + } + + + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/products/ProductsService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/products/ProductsService.java similarity index 78% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/products/ProductsService.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/products/ProductsService.java index de4b43fe1..824ab495d 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/products/ProductsService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/products/ProductsService.java @@ -1,8 +1,8 @@ -package com.cf.imes.module.system.service.products; +package com.cf.imes.module.system.service.funds.products; import com.cf.imes.framework.common.pojo.PageResult; -import com.cf.imes.module.system.controller.admin.products.vo.product.ProductPageReqVO; -import com.cf.imes.module.system.dal.dataobject.products.ProductsDO; +import com.cf.imes.module.system.controller.admin.funds.products.vo.product.ProductPageReqVO; +import com.cf.imes.module.system.dal.dataobject.funds.products.ProductsDO; import javax.validation.Valid; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/products/ProductsServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/products/ProductsServiceImpl.java new file mode 100644 index 000000000..4f82e3258 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/products/ProductsServiceImpl.java @@ -0,0 +1,117 @@ +package com.cf.imes.module.system.service.funds.products; + + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.common.util.Assert.AssertUtils; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.system.controller.admin.funds.products.vo.product.ProductPageReqVO; +import com.cf.imes.module.system.dal.dataobject.funds.products.ProductsDO; +import com.cf.imes.module.system.dal.mysql.funds.products.ProductsMapper; +import com.cf.imes.module.system.enums.products.ProductStatusEnum; +import com.cf.imes.module.system.util.SnowflakeIdWorker3rd; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +import java.util.List; + +import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; + +/** + * 产品 products Service 实现类 + * + * @author 晨丰科技 + */ +@Service +@Validated +public class ProductsServiceImpl implements ProductsService{ + + @Resource + private ProductsMapper productsMapper; + + @Resource + private SnowflakeIdWorker3rd idWorker; + + @Override + public Long create(String productName) { + + List productsDOS = productsMapper.selectList(new LambdaQueryWrapperX() + .eq(ProductsDO::getDeleted, false) + .eq(ProductsDO::getProductName, productName) + .select(ProductsDO::getId)); + + AssertUtils.empty(productsDOS,PRODUCTS_IS_EXIST); + + Long id = idWorker.nextId(); + productsMapper.insert( + new ProductsDO() + .setId(id) + .setProductName(productName) + .setStatus(ProductStatusEnum.PRODUCT_WAITING_UPDATES.getStatus()) + .setSoftwareId(0) + ); + return id; + } + + + + @Override + public void update(ProductsDO updateReqVO) { + Integer status = validateProductPlateExists(updateReqVO.getId()).getStatus(); + + if(status.equals(ProductStatusEnum.PRODUCT_UPDATES.getStatus())){ + throw exception(PRODUCTS_NO_UPDATE); + + } + + productsMapper.updateById(updateReqVO); + + } + + + @Override + public void delete(Long id) { + + ProductsDO productsDO = validateProductPlateExists(id); + + if(productsDO.getStatus().equals(ProductStatusEnum.PRODUCT_UPDATES.getStatus())){ + throw exception(PRODUCTS_NO_DELETE); + } + + productsMapper.update(new LambdaUpdateWrapper() + .eq(ProductsDO::getId,id) + .set(ProductsDO::getDeleted, true)); + + } + + + @Override + public ProductsDO get(Long id) { + return validateProductPlateExists(id); + } + + @Override + public PageResult getPage(ProductPageReqVO pageReqVO) { + return productsMapper.selectPage(pageReqVO, false); + } + + + + + private ProductsDO validateProductPlateExists(Long id) { + ProductsDO productsDO = productsMapper.selectOne(new LambdaQueryWrapperX() + .eq(ProductsDO::getId, id) + .eq(ProductsDO::getDeleted, false)); + + if (productsDO == null) { + throw exception(PRODUCTS_NO_EXIST); + } + return productsDO; + } + + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/recharge/RechargeActiveService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/recharge/RechargeActiveService.java similarity index 74% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/recharge/RechargeActiveService.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/recharge/RechargeActiveService.java index 491784d0d..cfc180bc2 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/recharge/RechargeActiveService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/recharge/RechargeActiveService.java @@ -1,9 +1,9 @@ -package com.cf.imes.module.system.service.recharge; +package com.cf.imes.module.system.service.funds.recharge; import com.cf.imes.framework.common.pojo.PageResult; -import com.cf.imes.module.system.controller.admin.recharge.vo.RechargePageReqVO; -import com.cf.imes.module.system.controller.admin.recharge.vo.RechargeSaveReqVO; -import com.cf.imes.module.system.dal.dataobject.recharge.GiftMoneyDetailsDO; +import com.cf.imes.module.system.controller.admin.funds.recharge.vo.RechargePageReqVO; +import com.cf.imes.module.system.controller.admin.funds.recharge.vo.RechargeSaveReqVO; +import com.cf.imes.module.system.dal.dataobject.funds.recharge.GiftMoneyDetailsDO; import javax.validation.Valid; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/recharge/RechargeActiveServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/recharge/RechargeActiveServiceImpl.java new file mode 100644 index 000000000..8cfa0f6fc --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/recharge/RechargeActiveServiceImpl.java @@ -0,0 +1,105 @@ +package com.cf.imes.module.system.service.funds.recharge; + +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.common.util.Assert.AssertUtils; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.system.controller.admin.funds.recharge.vo.RechargePageReqVO; +import com.cf.imes.module.system.controller.admin.funds.recharge.vo.RechargeSaveReqVO; +import com.cf.imes.module.system.dal.dataobject.funds.recharge.GiftMoneyDetailsDO; +import com.cf.imes.module.system.dal.mysql.funds.recharge.GiftMoneyDetailsMapper; +import com.cf.imes.module.system.util.SnowflakeIdWorker3rd; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.RECHARGE_ACTIVE_NAME_IS_EXIST; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.RECHARGE_ACTIVE_NO_EXIST; + +/** + * 充值活动详情表 gift_money_details Service 实现类 + * + * @author 晨丰科技 + */ +@Service +@Validated +public class RechargeActiveServiceImpl implements RechargeActiveService{ + + @Resource + private SnowflakeIdWorker3rd idWorker; + + @Resource + private GiftMoneyDetailsMapper giftMoneyDetailsMapper; + + @Override + public Long create(RechargeSaveReqVO createReqVO) { + + Long id = idWorker.nextId(); + + GiftMoneyDetailsDO giftMoneyDetailsDO = giftMoneyDetailsMapper.selectOne(new LambdaQueryWrapperX() + .eq(GiftMoneyDetailsDO::getDeleted, false) + .eq(GiftMoneyDetailsDO::getActivityName,createReqVO.getActivityName())); + + AssertUtils.empty(giftMoneyDetailsDO,RECHARGE_ACTIVE_NAME_IS_EXIST); + + GiftMoneyDetailsDO giftMoneyDetailsDOn = BeanUtils.toBean(createReqVO, GiftMoneyDetailsDO.class).setId(id); + giftMoneyDetailsMapper.insert(giftMoneyDetailsDOn); + return id; + } + + @Override + public void update(RechargeSaveReqVO updateReqVO) { + validateRechargeActiveExists(updateReqVO.getId()); + + GiftMoneyDetailsDO giftMoneyDetailsDO = giftMoneyDetailsMapper.selectOne(new LambdaQueryWrapperX() + .eq(GiftMoneyDetailsDO::getDeleted, false) + .eq(GiftMoneyDetailsDO::getActivityName,updateReqVO.getActivityName()) + .ne(GiftMoneyDetailsDO::getId,updateReqVO.getId())); + + AssertUtils.empty(giftMoneyDetailsDO,RECHARGE_ACTIVE_NAME_IS_EXIST); + + GiftMoneyDetailsDO giftMoneyDetailsDOn = BeanUtils.toBean(updateReqVO, GiftMoneyDetailsDO.class); + giftMoneyDetailsMapper.updateById(giftMoneyDetailsDOn); + + } + + + @Override + public void delete(Long id) { + validateRechargeActiveExists(id); + giftMoneyDetailsMapper.deleteById(id); + } + + + @Override + public GiftMoneyDetailsDO get(Long id) { + return validateRechargeActiveExists(id); + } + + + @Override + public PageResult getPage(RechargePageReqVO pageReqVO) { + return giftMoneyDetailsMapper.selectPage(pageReqVO); + } + + + + // 校验是否存在 + private GiftMoneyDetailsDO validateRechargeActiveExists(Long id) { + if (id == null) { + throw exception(RECHARGE_ACTIVE_NO_EXIST); + } + GiftMoneyDetailsDO giftMoneyDetailsDO = giftMoneyDetailsMapper.selectOne(new LambdaQueryWrapperX() + .eq(GiftMoneyDetailsDO::getId, id) + .eq(GiftMoneyDetailsDO::getDeleted, false)); + if (giftMoneyDetailsDO == null) { + throw exception(RECHARGE_ACTIVE_NO_EXIST); + } + + return giftMoneyDetailsDO; + } + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/parser/ParserService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/parser/ParserService.java new file mode 100644 index 000000000..6fbdd13a7 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/parser/ParserService.java @@ -0,0 +1,32 @@ +package com.cf.imes.module.system.service.parser; + + +import com.cf.imes.module.system.controller.admin.parser.vo.ParserReqVO; +import com.cf.imes.module.system.controller.admin.parser.vo.ParserRespVO; +import com.cf.imes.module.system.controller.admin.parser.vo.ParserSimpleRespVO; + +import java.util.List; +import java.util.Map; + +/** + * @author 解析器管理 Service 接口 + */ +public interface ParserService { + + + void update(ParserReqVO reqVO); + + + Map> getParserTree(Long type); + + + Map> getParserSimple(Long type); + + + ParserRespVO getParser(Long id); + + + + +} + diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/parser/ParserServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/parser/ParserServiceImpl.java new file mode 100644 index 000000000..108e83374 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/parser/ParserServiceImpl.java @@ -0,0 +1,135 @@ +package com.cf.imes.module.system.service.parser; + + +import cn.hutool.core.collection.CollUtil; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.system.controller.admin.parser.vo.ParserReqVO; +import com.cf.imes.module.system.controller.admin.parser.vo.ParserRespVO; +import com.cf.imes.module.system.controller.admin.parser.vo.ParserSimpleRespVO; +import com.cf.imes.module.system.dal.dataobject.parser.ParserDO; +import com.cf.imes.module.system.dal.mysql.parser.ParserMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.PARSER_NO_EXIST; + +/** + * @author 解析器管理 Service 实现类 + */ +@Service +@Validated +@Slf4j +public class ParserServiceImpl implements ParserService{ + + + + @Resource + private ParserMapper parserMapper; + + + + @Override + public void update(ParserReqVO reqVO) { + + ParserDO parserDO = validateParserExists(reqVO.getId()); + + parserDO.setName(reqVO.getName()); + parserDO.setSetting(reqVO.getSetting()); + + parserMapper.updateById(parserDO); + + + } + + + + + + @Override + public Map> getParserTree(Long type) { + + + List parserDOS = parserMapper.selectList(new LambdaQueryWrapperX() + .eqIfPresent(ParserDO::getOrganId, getUserOrganId()) + .eq(ParserDO::getDeleted,false) + .eqIfPresent(ParserDO::getParserType, type)); + + + if(CollUtil.isEmpty(parserDOS)){ + return new HashMap<>(); + } + + + List respVOS = BeanUtils.toBean(parserDOS, ParserRespVO.class); + + return respVOS.stream().collect(Collectors.groupingBy(ParserRespVO::getParserType)); + + } + + + + + + @Override + public Map> getParserSimple(Long type) { + + List parserDOS = parserMapper.selectList(new LambdaQueryWrapperX() + .eqIfPresent(ParserDO::getOrganId, getUserOrganId()) + .eq(ParserDO::getDeleted,false) + .eqIfPresent(ParserDO::getParserType, type) + .select(ParserDO::getId,ParserDO::getName,ParserDO::getParserType)); + + if(CollUtil.isEmpty(parserDOS)){ + return new HashMap<>(); + } + + List respVOS = BeanUtils.toBean(parserDOS, ParserSimpleRespVO.class); + + return respVOS.stream().collect(Collectors.groupingBy(ParserSimpleRespVO::getParserType)); + + } + + + + + + + @Override + public ParserRespVO getParser(Long id) { + + ParserDO parserDO = validateParserExists(id); + + return BeanUtils.toBean(parserDO,ParserRespVO.class); + + } + + + + + + + + private ParserDO validateParserExists(Long id) { + + ParserDO parserDO = parserMapper.selectById(id); + if (parserDO == null) { + + throw exception(PARSER_NO_EXIST); + } + + return parserDO; + + } + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/parser/ParserTemplateService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/parser/ParserTemplateService.java new file mode 100644 index 000000000..fffe9b2d2 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/parser/ParserTemplateService.java @@ -0,0 +1,34 @@ +package com.cf.imes.module.system.service.parser; + + +import com.cf.imes.module.system.controller.admin.parser.vo.ParserTemplateReqVO; +import com.cf.imes.module.system.controller.admin.parser.vo.ParserTemplateRespVO; +import com.cf.imes.module.system.controller.admin.parser.vo.TemplateLimitReqVO; +import com.cf.imes.module.system.controller.admin.parser.vo.TemplateSimpleRespVO; + +import java.util.List; +import java.util.Map; + +/** + * @author 解析器模板管理 Service 接口 + */ +public interface ParserTemplateService { + + + void update(ParserTemplateReqVO reqVO); + + + Map> getParserTemplateTree(Long type); + + + ParserTemplateRespVO getParserTemplate(Long id); + + + void updateParserTemplateLimit(TemplateLimitReqVO reqVO); + + Map> getParserTemplateSimple(Long type); + + + List getOrganParserTemplateLimit(Long organId); + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/parser/ParserTemplateServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/parser/ParserTemplateServiceImpl.java new file mode 100644 index 000000000..0fcf7e0a0 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/parser/ParserTemplateServiceImpl.java @@ -0,0 +1,241 @@ +package com.cf.imes.module.system.service.parser; + + +import cn.hutool.core.collection.CollUtil; +import com.alibaba.fastjson.JSON; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.system.controller.admin.parser.vo.ParserTemplateReqVO; +import com.cf.imes.module.system.controller.admin.parser.vo.ParserTemplateRespVO; +import com.cf.imes.module.system.controller.admin.parser.vo.TemplateLimitReqVO; +import com.cf.imes.module.system.controller.admin.parser.vo.TemplateSimpleRespVO; +import com.cf.imes.module.system.dal.dataobject.parser.ParserDO; +import com.cf.imes.module.system.dal.dataobject.parser.ParserLimitDO; +import com.cf.imes.module.system.dal.dataobject.parser.ParserTemplateDO; +import com.cf.imes.module.system.dal.mysql.parser.ParserLimitMapper; +import com.cf.imes.module.system.dal.mysql.parser.ParserMapper; +import com.cf.imes.module.system.dal.mysql.parser.ParserTemplateMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.PARSER_TEMPLATE_NO_EXIST; + + +/** + * @author 解析器模板管理 Service 实现类 + */ +@Service +@Slf4j +public class ParserTemplateServiceImpl implements ParserTemplateService{ + + + @Resource + private ParserTemplateMapper parserTemplateMapper; + + @Resource + private ParserMapper parserMapper; + + + @Resource + private ParserLimitMapper parserLimitMapper; + + + + @Override + public void update(ParserTemplateReqVO reqVO) { + + ParserTemplateDO parserTemplateDO = validateParserTemplateExists(reqVO.getId()); + + parserTemplateDO.setName(reqVO.getName()); + parserTemplateDO.setSetting(reqVO.getSetting()); + parserTemplateDO.setIsEnabled(reqVO.getIsEnabled()); + + parserTemplateMapper.updateById(parserTemplateDO); + + } + + + + + @Override + public Map> getParserTemplateTree(Long type) { + + List parserTemplateDOS = parserTemplateMapper.selectList(new LambdaQueryWrapperX() + .eq(ParserTemplateDO::getDeleted,false) + .eqIfPresent(ParserTemplateDO::getParserType, type)); + + if(CollUtil.isEmpty(parserTemplateDOS)){ + return new HashMap<>(); + } + + List respVOS = BeanUtils.toBean(parserTemplateDOS, ParserTemplateRespVO.class); + + return respVOS.stream().collect(Collectors.groupingBy(ParserTemplateRespVO::getParserType)); + + } + + + + + @Override + public ParserTemplateRespVO getParserTemplate(Long id) { + + ParserTemplateDO parserTemplateDO = validateParserTemplateExists(id); + + return BeanUtils.toBean(parserTemplateDO,ParserTemplateRespVO.class); + + } + + + + + + @Override + public void updateParserTemplateLimit(TemplateLimitReqVO reqVO) { + + Long organId = reqVO.getOrganId(); + + ParserLimitDO parserLimitDO = parserLimitMapper.selectById(organId); + + if(parserLimitDO == null){ + return; + } + + List parserTemplateIds = reqVO.getParserTemplateIds(); + + if(CollUtil.isNotEmpty(parserTemplateIds)){ + + String templateIds = Optional.ofNullable(parserLimitDO.getParserIds()).orElse("[]"); + + List templateIdList = JSON.parseArray(templateIds).toJavaList(Long.class).stream().distinct().toList(); + + Result result = compareLists(parserTemplateIds, templateIdList); + + // 组织新增解析器 + List onlyInA = result.onlyInA; + if(CollUtil.isNotEmpty(onlyInA)){ + List parserTemplateDOS = parserTemplateMapper.selectBatchIds(onlyInA); + + List parserDOS = new ArrayList<>(); + parserTemplateDOS.forEach(f-> parserDOS.add( + ParserDO.builder() + .parserType(f.getParserType()) + .parserTemplateId(f.getId()) + .organId(organId) + .name(f.getName()) + .setting(f.getSetting()) + .build() + )); + + parserMapper.insertBatch(parserDOS); + + } + + // 删除组织的解析器 + List onlyInB = result.onlyInB; + if(CollUtil.isNotEmpty(onlyInB)){ + parserMapper.delete(new LambdaQueryWrapperX() + .eq(ParserDO::getOrganId, organId) + .eq(ParserDO::getDeleted,false) + .in(ParserDO::getId, onlyInB)); + + } + + } + + } + + + + + + @Override + public Map> getParserTemplateSimple(Long type) { + + List parserTemplateDOS = parserTemplateMapper.selectList(new LambdaQueryWrapperX() + .eq(ParserTemplateDO::getDeleted,false) + .eq(ParserTemplateDO::getIsEnabled,true) + .eqIfPresent(ParserTemplateDO::getParserType, type) + .select(ParserTemplateDO::getId,ParserTemplateDO::getName,ParserTemplateDO::getParserType)); + + if(CollUtil.isEmpty(parserTemplateDOS)){ + return new HashMap<>(); + } + + List respVOS = BeanUtils.toBean(parserTemplateDOS, TemplateSimpleRespVO.class); + + return respVOS.stream().collect(Collectors.groupingBy(TemplateSimpleRespVO::getParserType)); + + } + + + + + + @Override + public List getOrganParserTemplateLimit(Long organId) { + + ParserLimitDO parserLimitDO = parserLimitMapper.selectById(organId); + if(parserLimitDO == null){ + return new ArrayList<>(); + } + + String templateIds = Optional.ofNullable(parserLimitDO.getParserIds()).orElse("[]"); + + return JSON.parseArray(templateIds).toJavaList(Long.class).stream().distinct().toList(); + + } + + + + + + + private ParserTemplateDO validateParserTemplateExists(Long id) { + + ParserTemplateDO parserTemplateDO = parserTemplateMapper.selectById(id); + if (parserTemplateDO == null) { + + throw exception(PARSER_TEMPLATE_NO_EXIST); + } + + return parserTemplateDO; + + } + + + + + public static Result compareLists(List a, List b) { + Set setA = new HashSet<>(a); + Set setB = new HashSet<>(b); + + // 创建副本用于计算差集 + Set onlyInA = new HashSet<>(setA); + onlyInA.removeAll(setB); // A 中有但 B 中没有的 + + Set onlyInB = new HashSet<>(setB); + onlyInB.removeAll(setA); // B 中有但 A 中没有的 + + return new Result(new ArrayList<>(onlyInA), new ArrayList<>(onlyInB)); + } + + + + static class Result { + List onlyInA; + List onlyInB; + + public Result(List onlyInA, List onlyInB) { + this.onlyInA = onlyInA; + this.onlyInB = onlyInB; + } + } + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/products/ProductsDetailServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/products/ProductsDetailServiceImpl.java deleted file mode 100644 index 7eea99c78..000000000 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/products/ProductsDetailServiceImpl.java +++ /dev/null @@ -1,253 +0,0 @@ -package com.cf.imes.module.system.service.products; - -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.nacos.common.utils.StringUtils; -import com.cf.imes.framework.common.pojo.PageResult; -import com.cf.imes.framework.common.util.object.BeanUtils; -import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.cf.imes.module.system.controller.admin.products.vo.productDetails.ProductDetailsPageReqVO; -import com.cf.imes.module.system.controller.admin.products.vo.productDetails.ProductDetailsSaveReqVO; -import com.cf.imes.module.system.dal.dataobject.products.ProductsDO; -import com.cf.imes.module.system.dal.dataobject.products.ProductsDetailDO; -import com.cf.imes.module.system.dal.mysql.products.ProductsDetailMapper; -import com.cf.imes.module.system.dal.mysql.products.ProductsMapper; -import com.cf.imes.module.system.enums.products.DurationUnitEnum; -import com.cf.imes.module.system.enums.products.ProductsPurchaseTypeEnum; -import com.cf.imes.module.system.util.SnowflakeIdWorker3rd; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import javax.annotation.Resource; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; - -/** - * 产品明细 productsDetails Service 实现类 - * - * @author 晨丰科技 - */ -@Service -@Validated -public class ProductsDetailServiceImpl implements ProductsDetailService { - - @Resource - private ProductsDetailMapper productDetailsMapper; - - @Resource - private ProductsMapper productsMapper; - - @Resource - private SnowflakeIdWorker3rd idWorker; - - private static final String EMPTY_STRING = new String(); - private static final String DURATION_NUM = "\\d+"; - private static final String DURATION_UNIT = "[a-zA-Z]+"; - - @Override - public Long create(ProductDetailsSaveReqVO createReqVO) { -// 校验是否有这个产品 - validateProductExist(createReqVO.getProductId(), false); - - if (createReqVO.getPurchaseType() == ProductsPurchaseTypeEnum.DURATION.getStatus()) { - if (StringUtils.isBlank(createReqVO.getDuration())) { - throw exception(PRODUCTS_DURATION_NOT_NULL); - } -// 校验时长 - String duration = checkDuration(createReqVO.getDuration()); - String giftDuration = null; - if (createReqVO.getGiftDuration() != null) { - giftDuration = checkDuration(createReqVO.getGiftDuration()); - } - createReqVO.setDuration(duration).setGiftDuration(giftDuration); - -// 时长/产量 去重 - checkProductDetails(createReqVO, false); - } else if (createReqVO.getPurchaseType() == ProductsPurchaseTypeEnum.OUTPUT.getStatus()) { - if (StringUtils.isBlank(createReqVO.getDuration())) { - throw exception(PRODUCTS_OUTPUT_NOT_NULL); - } - } - - Long id = idWorker.nextId(); - createReqVO.setId(id); - ProductsDetailDO productDetailsDO = BeanUtils.toBean(createReqVO, ProductsDetailDO.class).setId(id); - productDetailsMapper.insert(productDetailsDO); - return id ; - } - -// 时长校验 - private String checkDuration(String duration){ - int number = extractDuration(duration); - String unit = extractDurationUnit(duration); - return number + "-" + unit; - } - -// 数字提取 - private int extractDuration(String duration) { - Pattern pattern = Pattern.compile(DURATION_NUM); - Matcher matcher = pattern.matcher(duration); - - List numbers = new ArrayList<>(); - while (matcher.find()) { - numbers.add(matcher.group()); - } - - if (numbers.size() != 1) { - throw exception(PRODUCTS_DURATION_NUM_ERR); - } - - String numberStr = numbers.get(0); - int number; - try { - number = Integer.parseInt(numberStr); - } catch (NumberFormatException e) { - throw exception(PRODUCTS_DURATION_NUM_ERR); - } - - // 校验数值是否为正整数(>0) - if (number < 0) { - throw exception(PRODUCTS_DURATION_INT_ERR); - } - - // 校验字符串格式(禁止前导零) - if (numberStr.startsWith("0") && numberStr.length() > 1) { - throw exception(PRODUCTS_DURATION_NUM_ERR); - } - - return number; - } - -// 时长单位提取 - private String extractDurationUnit(String duration){ - Pattern pattern = Pattern.compile(DURATION_UNIT); - Matcher matcher = pattern.matcher(duration); - - while (matcher.find()) { - String unit = matcher.group(); - if (DurationUnitEnum.isYear(unit)) { - return DurationUnitEnum.YEAR.getName(); - } else if (DurationUnitEnum.isMonth(unit)) { - return DurationUnitEnum.MONTH.getName(); - } else if (DurationUnitEnum.isDay(unit)) { - return DurationUnitEnum.DAY.getName(); - } - } - throw exception(PRODUCTS_DURATION_UNIT_ERR); - } -// 产品存在性校验 - private void validateProductExist(Long productId, boolean deleted){ - ProductsDO productsDO = productsMapper.selectOne(new LambdaQueryWrapperX() - .eq(ProductsDO::getId, productId) - .eq(ProductsDO::getDeleted, deleted)); - if (productsDO == null) { - throw exception(PRODUCTS_NO_EXIST); - } - } -// 时长/产量去重 - private void checkProductDetails(ProductDetailsSaveReqVO createReqVO, Boolean flag){ - int count; - if (createReqVO.getPurchaseType() == 0){ - //时长去重 - count = productDetailsMapper.selectCountByDuration(createReqVO.getDuration(), createReqVO.getProductId(), flag); - if (count > 0) { - throw exception(PRODUCTS_DETAIL_DURATION_EXIST); - } - }else if (createReqVO.getPurchaseType() == 1){ - //产量去重 - count = productDetailsMapper.selectCountByOutput(createReqVO.getOutput(), createReqVO.getProductId(), flag); - if (count > 0) { - throw exception(PRODUCTS_DETAIL_OUTPUT_EXIST); - } - } - } - - @Override - public void update(ProductDetailsSaveReqVO updateReqVO) { -// 校验是否有这个产品 - validateProductExist(updateReqVO.getProductId(), false); - - validateProductDetailsExists(updateReqVO.getId(), false); - - if (updateReqVO.getPurchaseType() == ProductsPurchaseTypeEnum.DURATION.getStatus()) { - if (StringUtils.isBlank(updateReqVO.getDuration())) { - throw exception(PRODUCTS_DURATION_NOT_NULL); - } -// 校验时长 - String duration = checkDuration(updateReqVO.getDuration()); - String giftDuration = null; - if (updateReqVO.getGiftDuration() != null) { - giftDuration = checkDuration(updateReqVO.getGiftDuration()); - } - updateReqVO.setDuration(duration).setGiftDuration(giftDuration); - -// 时长/产量 去重 - checkProductDetails(updateReqVO, true); - } else if (updateReqVO.getPurchaseType() == ProductsPurchaseTypeEnum.OUTPUT.getStatus()) { - if (StringUtils.isBlank(updateReqVO.getDuration())) { - throw exception(PRODUCTS_OUTPUT_NOT_NULL); - } - } - ProductsDetailDO productDetailsDO = BeanUtils.toBean(updateReqVO, ProductsDetailDO.class) - .setDiscount(getZeroBigDecimal(updateReqVO.getDiscount())) - .setOriginalPrice(getZeroBigDecimal(updateReqVO.getOriginalPrice())) - .setIsDiscounted(updateReqVO.getIsDiscounted() ? Boolean.TRUE : Boolean.FALSE); - productDetailsMapper.updateById(productDetailsDO); - } - - /** - * value为空返回EMPTY_STRING - * - * @param value - * @return - */ - private String getEmpty(String value) { - return StringUtils.defaultIfEmpty(value, EMPTY_STRING); - } - - /** - * value为空返回0.0 - * - * @param value - * @return - */ - private BigDecimal getZeroBigDecimal(BigDecimal value) { - return ObjectUtil.defaultIfNull(value, BigDecimal.ZERO); - } - - @Override - public void delete(Long id) { -// 判单是否存在 - validateProductDetailsExists(id, false); - productDetailsMapper.deleteById(id); - } - - @Override - public List get(Long id) { - validateProductDetailsExists(id, false); - return productDetailsMapper.selectList(); - } - - @Override - public PageResult getPage(ProductDetailsPageReqVO pageReqVO) { - return productDetailsMapper.selectPage(pageReqVO.setDeleted(0)); - } - -// 判断是否存在 - private void validateProductDetailsExists(Long id, boolean deleted) { - if (id == null) { - throw exception(PRODUCTS_DETAIL_NO_EXIST); - } - if (productDetailsMapper.selectOne(new LambdaQueryWrapperX() - .eq(ProductsDetailDO::getId, id) - .eq(ProductsDetailDO::getDeleted, false)) == null) { - throw exception(PRODUCTS_DETAIL_NO_EXIST); - } - } - -} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/products/ProductsServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/products/ProductsServiceImpl.java deleted file mode 100644 index d239b225e..000000000 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/products/ProductsServiceImpl.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.cf.imes.module.system.service.products; - - -import com.cf.imes.framework.common.pojo.PageResult; -import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.cf.imes.module.system.controller.admin.products.vo.product.ProductPageReqVO; -import com.cf.imes.module.system.dal.dataobject.products.ProductsDO; -import com.cf.imes.module.system.dal.mysql.products.ProductsMapper; -import com.cf.imes.module.system.util.SnowflakeIdWorker3rd; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import javax.annotation.Resource; - -import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.cf.imes.module.system.enums.ErrorCodeConstants.PRODUCTS_NO_EXIST; - -/** - * 产品 products Service 实现类 - * - * @author 晨丰科技 - */ -@Service -@Validated -public class ProductsServiceImpl implements ProductsService{ - - @Resource - private ProductsMapper productsMapper; - - @Resource - private SnowflakeIdWorker3rd idWorker; - - @Override - public Long create(String productName) { - Long id = idWorker.nextId(); - productsMapper.insert( - new ProductsDO() - .setId(id) - .setProductName(productName) - .setStatus(1) - .setSoftwareId(0) - ); - return id; - } - - @Override - public void update(ProductsDO updateReqVO) { - validateProductPlateExists(updateReqVO.getId()); - - productsMapper.updateById(updateReqVO); - } - - private void validateProductPlateExists(Long id) { - ProductsDO productsDO = getProductWithFalse(id); - if (productsDO == null) { - throw exception(PRODUCTS_NO_EXIST); - } - } - - public ProductsDO getProductWithFalse(Long id) { - return productsMapper.selectOne(new LambdaQueryWrapperX() - .eq(ProductsDO::getId, id) - .eq(ProductsDO::getDeleted, false)); - - } - - @Override - public void delete(Long id) { - validateProductPlateExists(id); - productsMapper.updateById( - new ProductsDO() - .setId(id) - .setDeleted(true) - ); - } - - @Override - public ProductsDO get(Long id) { - return getProductWithFalse(id); - } - - @Override - public PageResult getPage(ProductPageReqVO pageReqVO) { - return productsMapper.selectPage(pageReqVO, false); - } -} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/recharge/RechargeActiveServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/recharge/RechargeActiveServiceImpl.java deleted file mode 100644 index 50894949e..000000000 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/recharge/RechargeActiveServiceImpl.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.cf.imes.module.system.service.recharge; - -import com.cf.imes.framework.common.pojo.PageResult; -import com.cf.imes.framework.common.util.object.BeanUtils; -import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.cf.imes.module.system.controller.admin.recharge.vo.RechargePageReqVO; -import com.cf.imes.module.system.controller.admin.recharge.vo.RechargeSaveReqVO; -import com.cf.imes.module.system.dal.dataobject.recharge.GiftMoneyDetailsDO; -import com.cf.imes.module.system.dal.mysql.recharge.GiftMoneyDetailsMapper; -import com.cf.imes.module.system.util.SnowflakeIdWorker3rd; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import javax.annotation.Resource; - -import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.cf.imes.module.system.enums.ErrorCodeConstants.RECHARGE_ACTIVE_NO_EXIST; - -/** - * 充值活动详情表 gift_money_details Service 实现类 - * - * @author 晨丰科技 - */ -@Service -@Validated -public class RechargeActiveServiceImpl implements RechargeActiveService{ - - @Resource - private SnowflakeIdWorker3rd idWorker; - - @Resource - private GiftMoneyDetailsMapper giftMoneyDetailsMapper; - - @Override - public Long create(RechargeSaveReqVO createReqVO) { - Long id = idWorker.nextId(); - GiftMoneyDetailsDO giftMoneyDetailsDOn = BeanUtils.toBean(createReqVO, GiftMoneyDetailsDO.class).setId(id); - giftMoneyDetailsMapper.insert(giftMoneyDetailsDOn); - return id; - } - - @Override - public void update(RechargeSaveReqVO updateReqVO) { - validateRechargeActiveExists(updateReqVO.getId(), false); - } - - // 校验是否存在 - private void validateRechargeActiveExists(Long id, boolean deleted) { - if (id == null) { - throw exception(RECHARGE_ACTIVE_NO_EXIST); - } - GiftMoneyDetailsDO dictType = giftMoneyDetailsMapper.selectOne(new LambdaQueryWrapperX() - .eq(GiftMoneyDetailsDO::getId, id) - .eq(GiftMoneyDetailsDO::getDeleted, deleted)); - if (dictType == null) { - throw exception(RECHARGE_ACTIVE_NO_EXIST); - } - } - @Override - public void delete(Long id) { - validateRechargeActiveExists(id, false); - giftMoneyDetailsMapper.deleteById(id); - } - - @Override - public GiftMoneyDetailsDO get(Long id) { - validateRechargeActiveExists(id, false); - return giftMoneyDetailsMapper.selectById(id); - } - - @Override - public PageResult getPage(RechargePageReqVO pageReqVO) { - return giftMoneyDetailsMapper.selectPage(pageReqVO); - } -} diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/application-local.yaml b/cf-module-system/cf-module-system-biz/src/main/resources/application-local.yaml index 45e9078ac..be35c7cc6 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/application-local.yaml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/application-local.yaml @@ -88,6 +88,10 @@ xxl: admin: addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 +# 广告图片文件 +adImageFile: + filepath: E:\ceshi123\ + --- #################### 服务保障相关配置 #################### # Lock4j 配置项 diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/funds/advertisement/AdvertisementMapper.xml b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/funds/advertisement/AdvertisementMapper.xml new file mode 100644 index 000000000..1fb7c6111 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/funds/advertisement/AdvertisementMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + update advertisement + set stats = 1 + where deleted = false + and start_time = #{now} + and status = #{status} + + + + + + + + update advertisement + set stats = 2 + where deleted = false + and end_time = #{now} + and status = #{status} + + + + + + + + + \ No newline at end of file