From 93c6b3567bb2f5aa3d62b19f5949d0aca4b0cc47 Mon Sep 17 00:00:00 2001 From: fengxiaohang <15076273430@163.com> Date: Tue, 24 Jun 2025 09:41:03 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=B8=E9=94=80?= =?UTF-8?q?=E3=80=81=E8=AE=A2=E5=8D=95=E5=94=AE=E5=90=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...8fab7c1b52eed45d1b_订单售后数据.xlsx | Bin 0 -> 5326 bytes ...96b1284da19117d9e5_订单售后数据.xlsx | Bin 0 -> 5326 bytes ...899a882eaaa8f4b8a2_订单售后数据.xlsx | Bin 0 -> 5326 bytes ...08810316c4dc7da48e_订单售后数据.xlsx | Bin 0 -> 5326 bytes qrcode/12342424.png | Bin 0 -> 444 bytes .../web/controller/IndexController.java | 13 +- ruoyi-common/ruoyi-common-core/pom.xml | 8 + .../common/core}/utils/SecurityUtils.java | 5 +- ruoyi-common/ruoyi-common-security/pom.xml | 8 + .../wzj/soopin/content/mapper/VlogMapper.java | 4 + .../soopin/goods/mapper/ProductMapper.java | 13 ++ .../wzj/soopin/member/domain/po/Withdraw.java | 4 + .../soopin/member/mapper/FeedbackMapper.java | 1 + .../soopin/member/mapper/MemberMapper.java | 3 + .../soopin/member/mapper/WithdrawMapper.java | 9 + .../member/service/IWithdrawService.java | 7 + .../service/impl/WithdrawServiceImpl.java | 11 + ruoyi-modules/ruoyi-order/pom.xml | 9 +- .../order/controller/AftersaleController.java | 35 +--- .../order/controller/OrderController.java | 6 +- .../VerificationCodeController.java | 8 +- .../order/domain/dto/CodeVerificationDto.java | 16 ++ .../soopin/order/domain/vo/AftersaleVO.java | 4 + .../soopin/order/mapper/AftersaleMapper.java | 5 + .../wzj/soopin/order/mapper/OrderMapper.java | 9 + .../soopin/order/service/OrderService.java | 5 +- .../service/VerificationCodeService.java | 3 +- .../service/impl/AftersaleServiceImpl.java | 13 ++ .../order/service/impl/OrderServiceImpl.java | 95 ++++++++- .../impl/VerificationCodeServiceImpl.java | 6 +- .../main/resources/mapper/AftersaleMapper.xml | 25 +++ .../src/main/resources/mapper/OrderMapper.xml | 17 +- ruoyi-modules/ruoyi-system/pom.xml | 11 +- .../system/controller/BaseController.java | 194 ++++++++++++++++++ .../system/controller/ConfigController.java | 34 +++ .../system/mapper/SysConfigMapper.java | 60 ++++++ .../system/mapper/SysTenantMapper.java | 11 + .../org/dromara/system/page/PageDomain.java | 102 +++++++++ .../org/dromara/system/page/TableSupport.java | 56 +++++ .../system/service/ISysConfigService.java | 22 ++ .../service/impl/SysConfigServiceImpl.java | 65 ++++++ 41 files changed, 843 insertions(+), 54 deletions(-) create mode 100644 null/download/0952cc1651f0458fab7c1b52eed45d1b_订单售后数据.xlsx create mode 100644 null/download/62f9b95dc78e4096b1284da19117d9e5_订单售后数据.xlsx create mode 100644 null/download/7899d2d8a00f4f899a882eaaa8f4b8a2_订单售后数据.xlsx create mode 100644 null/download/ee3cbbae3c454908810316c4dc7da48e_订单售后数据.xlsx create mode 100644 qrcode/12342424.png rename {ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order => ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core}/utils/SecurityUtils.java (98%) create mode 100644 ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/WithdrawMapper.java create mode 100644 ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IWithdrawService.java create mode 100644 ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/WithdrawServiceImpl.java create mode 100644 ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/dto/CodeVerificationDto.java create mode 100644 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/BaseController.java create mode 100644 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/ConfigController.java create mode 100644 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/page/PageDomain.java create mode 100644 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/page/TableSupport.java diff --git a/null/download/0952cc1651f0458fab7c1b52eed45d1b_订单售后数据.xlsx b/null/download/0952cc1651f0458fab7c1b52eed45d1b_订单售后数据.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..661a91ed5c32fc89e7f57518b0fcd2191b2c6396 GIT binary patch literal 5326 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 literal 0 HcmV?d00001 diff --git a/null/download/7899d2d8a00f4f899a882eaaa8f4b8a2_订单售后数据.xlsx b/null/download/7899d2d8a00f4f899a882eaaa8f4b8a2_订单售后数据.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..deebb7b946a8f7e4e3aa971f3d45e10410885e90 GIT binary patch literal 5326 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 + @GetMapping("/count") + public R getCount() { + return R.ok(orderService.getCount()); + } /** * 获取今日待办任务 diff --git a/ruoyi-common/ruoyi-common-core/pom.xml b/ruoyi-common/ruoyi-common-core/pom.xml index 5a9dd1b31..9f74e347f 100644 --- a/ruoyi-common/ruoyi-common-core/pom.xml +++ b/ruoyi-common/ruoyi-common-core/pom.xml @@ -98,6 +98,14 @@ org.lionsoul ip2region + + org.springframework.security + spring-security-crypto + + + org.springframework.security + spring-security-core + diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/utils/SecurityUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/SecurityUtils.java similarity index 98% rename from ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/utils/SecurityUtils.java rename to ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/SecurityUtils.java index 291e18a46..3ace4b297 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/utils/SecurityUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/SecurityUtils.java @@ -1,9 +1,10 @@ -package com.wzj.soopin.order.utils; +package org.dromara.common.core.utils; + +import org.springframework.security.core.Authentication; import org.dromara.common.core.constant.HttpStatus; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.exception.ServiceException; -import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; diff --git a/ruoyi-common/ruoyi-common-security/pom.xml b/ruoyi-common/ruoyi-common-security/pom.xml index 5b39df293..9d860f0bd 100644 --- a/ruoyi-common/ruoyi-common-security/pom.xml +++ b/ruoyi-common/ruoyi-common-security/pom.xml @@ -20,6 +20,14 @@ org.dromara ruoyi-common-satoken + + org.springframework.security + spring-security-crypto + + + org.springframework.security + spring-security-core + diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/VlogMapper.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/VlogMapper.java index 8289883a9..56b3a5d08 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/VlogMapper.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/VlogMapper.java @@ -10,6 +10,7 @@ import com.wzj.soopin.content.domain.vo.CommentVO; import com.wzj.soopin.content.domain.vo.IndexVlogVO; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import java.util.List; @@ -94,4 +95,7 @@ public interface VlogMapper extends BaseMapper { * @return 分页结果,包含视频信息及统计数据 */ IPage> selectVlogListWithAggregatedData(Page> page, @Param("vlogBO") VlogBO vlogBO); + + @Select("SELECT COUNT(*) FROM t_vlog where status = 0") + Object countVlog(); } diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/wzj/soopin/goods/mapper/ProductMapper.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/wzj/soopin/goods/mapper/ProductMapper.java index 94f586f84..ebcafee88 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/wzj/soopin/goods/mapper/ProductMapper.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/wzj/soopin/goods/mapper/ProductMapper.java @@ -7,8 +7,10 @@ import com.wzj.soopin.goods.domain.bo.ProductBo; import com.wzj.soopin.goods.domain.entity.Product; import com.wzj.soopin.goods.domain.vo.ProductVO; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; +import java.util.Map; /** * 商品信息Mapper接口 @@ -25,4 +27,15 @@ public interface ProductMapper extends BaseMapper { List selectByEntity(Product product); IPage getlist(@Param("page") Page page, @Param("query") ProductBo query); + + + + @Select("SELECT " + + "SUM(CASE WHEN auth_flag = 1 THEN 1 ELSE 0 END) AS count1, " + + "SUM(CASE WHEN auth_flag = 2 THEN 1 ELSE 0 END) AS count2 " + + "FROM pms_product") + Map countProduct(); + +// @Select("SELECT COUNT(*) FROM pms_product WHERE auth_flag = 1") +// Object AuditProduct(); } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/po/Withdraw.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/po/Withdraw.java index cf6ed0d9d..e1149d86c 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/po/Withdraw.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/po/Withdraw.java @@ -1,6 +1,8 @@ package com.wzj.soopin.member.domain.po; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; import org.dromara.common.core.domain.model.BaseAudit; import java.math.BigDecimal; @@ -12,6 +14,8 @@ import java.time.LocalDateTime; * @author wzj * @date 2023-03-07 */ +@Data +@TableName("ums_withdraw") public class Withdraw extends BaseAudit { private Long id; diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/FeedbackMapper.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/FeedbackMapper.java index 12a0506e0..9fb655a57 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/FeedbackMapper.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/FeedbackMapper.java @@ -2,6 +2,7 @@ package com.wzj.soopin.member.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.wzj.soopin.member.domain.po.Feedback; +import org.apache.ibatis.annotations.Select; import java.util.List; diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/MemberMapper.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/MemberMapper.java index 616a76dbb..2f43b1b5e 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/MemberMapper.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/MemberMapper.java @@ -49,4 +49,7 @@ public interface MemberMapper extends BaseMapper { "WHERE id = #{memberId} \n" + " AND expert = 1;") Member isExpert(String memberId); + + @Select("SELECT COUNT(*) FROM ums_member") + Object countMember(); } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/WithdrawMapper.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/WithdrawMapper.java new file mode 100644 index 000000000..cd8de3c45 --- /dev/null +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/mapper/WithdrawMapper.java @@ -0,0 +1,9 @@ +package com.wzj.soopin.member.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wzj.soopin.member.domain.po.Withdraw; +import org.apache.ibatis.annotations.Select; + +public interface WithdrawMapper extends BaseMapper { + +} diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IWithdrawService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IWithdrawService.java new file mode 100644 index 000000000..ffb728ebf --- /dev/null +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IWithdrawService.java @@ -0,0 +1,7 @@ +package com.wzj.soopin.member.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.wzj.soopin.member.domain.po.Withdraw; + +public interface IWithdrawService extends IService { +} diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/WithdrawServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/WithdrawServiceImpl.java new file mode 100644 index 000000000..da1202697 --- /dev/null +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/WithdrawServiceImpl.java @@ -0,0 +1,11 @@ +package com.wzj.soopin.member.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wzj.soopin.member.domain.po.Withdraw; +import com.wzj.soopin.member.mapper.WithdrawMapper; +import com.wzj.soopin.member.service.IWithdrawService; +import org.springframework.stereotype.Service; + +@Service +public class WithdrawServiceImpl extends ServiceImpl implements IWithdrawService { +} diff --git a/ruoyi-modules/ruoyi-order/pom.xml b/ruoyi-modules/ruoyi-order/pom.xml index 2caa69b34..a162ef5a7 100644 --- a/ruoyi-modules/ruoyi-order/pom.xml +++ b/ruoyi-modules/ruoyi-order/pom.xml @@ -157,7 +157,14 @@ hutool-all 5.8.22 - + + org.dromara + ruoyi-content + + + org.dromara + ruoyi-content + diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/controller/AftersaleController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/controller/AftersaleController.java index e5afbfb7b..989bbd248 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/controller/AftersaleController.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/controller/AftersaleController.java @@ -1,35 +1,20 @@ package com.wzj.soopin.order.controller; -import cn.dev33.satoken.annotation.SaCheckPermission; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.wzj.soopin.member.domain.bo.FeedbackBO; -import com.wzj.soopin.member.domain.bo.MemberAccountBO; -import com.wzj.soopin.member.domain.bo.MemberBO; -import com.wzj.soopin.member.domain.po.Feedback; -import com.wzj.soopin.member.domain.po.Member; -import com.wzj.soopin.member.domain.po.MemberAccount; -import com.wzj.soopin.member.domain.vo.FeedbackVO; -import com.wzj.soopin.member.domain.vo.MemberAccountVO; -import com.wzj.soopin.member.domain.vo.MemberVO; import com.wzj.soopin.order.convert.AftersaleConvert; import com.wzj.soopin.order.domain.bo.AftersaleBo; -import com.wzj.soopin.order.domain.entity.OrderOperateHistory; import com.wzj.soopin.order.service.AftersaleService; import com.wzj.soopin.order.domain.entity.Aftersale; import com.wzj.soopin.order.domain.form.DealWithAftersaleForm; -import com.wzj.soopin.order.domain.form.ManagerAftersaleOrderForm; -import com.wzj.soopin.order.domain.query.AftersaleQuery; import com.wzj.soopin.order.domain.vo.*; import com.wzj.soopin.order.service.impl.AftersaleServiceImpl; -import com.wzj.soopin.order.utils.SecurityUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.model.LoginUser; +import org.dromara.common.core.utils.SecurityUtils; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; @@ -64,9 +49,8 @@ public class AftersaleController extends BaseController { @Tag(name ="查询订单售后列表") @PostMapping("/list") - public R> list(@RequestBody AftersaleBo query, Page page) { - Page list = aftersaleService.page(page,query.toWrapper() ); - return R.ok(convert.toVO(list)); + public R> list(@RequestBody AftersaleBo query, Page page) { + return R.ok(service.getlist(page,query)); } @@ -88,8 +72,8 @@ public class AftersaleController extends BaseController { @Tag(name ="新增订单售后") @Log(title = "订单售后", businessType = BusinessType.INSERT) @PostMapping("/add") - public R add(@RequestBody AftersaleBo query) { - return R.ok(service.save(convert.toPo(query))); + public R add(@RequestBody Aftersale aftersale) { + return R.ok(service.save(aftersale)); } @Tag(name ="修改订单售后") @@ -99,13 +83,14 @@ public class AftersaleController extends BaseController { return R.ok(service.updateById(aftersale)); } - @Tag(name ="删除订单售后") + @Tag(name = "删除订单售后") @Log(title = "订单售后", businessType = BusinessType.DELETE) - @DeleteMapping("/{id}") - public ResponseEntity remove(@PathVariable Long id) { - return ResponseEntity.ok(service.deleteById(id)); + @DeleteMapping("/{id}") + public R remove(@PathVariable Long id) { + return R.ok(service.removeById(id)); } + @Tag(name ="售后订单操作") @PostMapping("/dealWith") public ResponseEntity updateStatus(@RequestBody DealWithAftersaleForm request){ diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/controller/OrderController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/controller/OrderController.java index 0db694d7c..1deb2b2a2 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/controller/OrderController.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/controller/OrderController.java @@ -9,12 +9,10 @@ import com.wzj.soopin.order.domain.form.DeliverProductForm; import com.wzj.soopin.order.domain.vo.*; import com.wzj.soopin.order.service.OrderService; import com.wzj.soopin.order.service.impl.OrderServiceImpl; -import com.wzj.soopin.order.utils.SecurityUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.R; +import org.dromara.common.core.utils.SecurityUtils; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; @@ -22,9 +20,7 @@ import org.dromara.common.redis.redis.RedisService; import org.dromara.common.web.core.BaseController; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/controller/VerificationCodeController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/controller/VerificationCodeController.java index b7f88fc96..e2f731da3 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/controller/VerificationCodeController.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/controller/VerificationCodeController.java @@ -1,5 +1,6 @@ package com.wzj.soopin.order.controller; +import com.wzj.soopin.order.domain.dto.CodeVerificationDto; import com.wzj.soopin.order.service.VerificationCodeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -31,15 +32,12 @@ public class VerificationCodeController { /** * 扫码核销接口 - * @param codeValue 核销码 - * @param usedMerchantId 使用商家ID * @return 核销结果z */ @PostMapping("/verify") @Tag(name = "扫码核销接口") - public R verifyCode(@RequestParam String codeValue, - @RequestParam Long usedMerchantId) { - return verificationCodeService.verifyCode(codeValue, usedMerchantId); + public R verifyCode(@RequestBody CodeVerificationDto codeVerificationDto) { + return verificationCodeService.verifyCode(codeVerificationDto); } } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/dto/CodeVerificationDto.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/dto/CodeVerificationDto.java new file mode 100644 index 000000000..91e17cbfa --- /dev/null +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/dto/CodeVerificationDto.java @@ -0,0 +1,16 @@ +package com.wzj.soopin.order.domain.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "核销订单请求VO") +public class CodeVerificationDto { + + @Schema(description = "核销码") + private String codeValue; + + @Schema(description = "商家id") + private Long usedMerchantId; + +} diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/vo/AftersaleVO.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/vo/AftersaleVO.java index aa85c1859..ae89b67a2 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/vo/AftersaleVO.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/vo/AftersaleVO.java @@ -31,6 +31,10 @@ public class AftersaleVO extends BaseAudit { @Excel(name = "订单id") private Long orderId; + @Schema(description = "订单编号") + private Long orderSn; + + /** 退款金额 */ @Schema(description = "退款金额") @Excel(name = "退款金额") diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/mapper/AftersaleMapper.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/mapper/AftersaleMapper.java index 858c87d30..13ecfb8ca 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/mapper/AftersaleMapper.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/mapper/AftersaleMapper.java @@ -3,10 +3,14 @@ package com.wzj.soopin.order.mapper; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wzj.soopin.order.domain.bo.AftersaleBo; import com.wzj.soopin.order.domain.entity.Aftersale; import com.wzj.soopin.order.domain.form.ManagerAftersaleOrderForm; +import com.wzj.soopin.order.domain.vo.AftersaleVO; import com.wzj.soopin.order.domain.vo.ManagerRefundOrderVO; import com.wzj.soopin.order.domain.vo.OrderAndAftersaleStatisticsVO; +import com.wzj.soopin.order.domain.vo.OrderVO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -31,4 +35,5 @@ public interface AftersaleMapper extends BaseMapper { OrderAndAftersaleStatisticsVO statPendingAndProcessing(); + IPage getlist(@Param("page") Page page, @Param("query")AftersaleBo query); } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/mapper/OrderMapper.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/mapper/OrderMapper.java index 725af5028..01e7cba30 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/mapper/OrderMapper.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/mapper/OrderMapper.java @@ -11,9 +11,11 @@ import com.wzj.soopin.order.domain.entity.SystemStatistics; import com.wzj.soopin.order.domain.form.ManagerOrderQueryForm; import com.wzj.soopin.order.domain.vo.*; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.time.LocalDateTime; import java.util.List; +import java.util.Map; /** * 订单表Mapper接口 @@ -54,6 +56,13 @@ public interface OrderMapper extends BaseMapper { IPage getlist(@Param("page") Page page,@Param("query") OrderBo query); + @Select("SELECT " + + "COUNT(*) AS count1, " + + "SUM(CASE WHEN aftersale_status = 2 THEN 1 ELSE 0 END) AS count2 " + + "FROM oms_order") + Map countOrder(); + + // IPage getlist(@Param("page") Page objectPage, @Param("query") OrderBo query); } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/OrderService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/OrderService.java index d9a3a1deb..656c54972 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/OrderService.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/OrderService.java @@ -9,10 +9,11 @@ import com.wzj.soopin.order.domain.entity.Order; import com.wzj.soopin.order.domain.vo.OrderVO; import com.wzj.soopin.order.domain.vo.PageVO; +import java.util.Map; + public interface OrderService extends IService { + Map getCount(); IPage getlist(Page page, OrderBo query); - -// IPage getlist(PageVO pageVO, OrderBo query); } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/VerificationCodeService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/VerificationCodeService.java index f561185d5..a890e404b 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/VerificationCodeService.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/VerificationCodeService.java @@ -1,6 +1,7 @@ package com.wzj.soopin.order.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.wzj.soopin.order.domain.dto.CodeVerificationDto; import com.wzj.soopin.order.domain.entity.VerificationCodes; import org.dromara.common.core.domain.R; @@ -9,5 +10,5 @@ public interface VerificationCodeService extends IService { R generateVerificationCode(Long orderId); - R verifyCode(String codeValue, Long usedMerchantId); + R verifyCode(CodeVerificationDto codeVerificationDto); } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/AftersaleServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/AftersaleServiceImpl.java index ffefd630c..99c251fa7 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/AftersaleServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/AftersaleServiceImpl.java @@ -7,7 +7,9 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.wechat.pay.java.service.refund.model.Refund; import com.wechat.pay.java.service.refund.model.RefundNotification; @@ -16,6 +18,7 @@ import com.wzj.soopin.member.domain.po.Member; import com.wzj.soopin.member.domain.po.MemberWechat; import com.wzj.soopin.member.mapper.MemberMapper; import com.wzj.soopin.member.mapper.MemberWechatMapper; +import com.wzj.soopin.order.domain.bo.AftersaleBo; import com.wzj.soopin.order.service.AftersaleService; import com.wzj.soopin.order.convert.OrderOperateHistoryConvert; import com.wzj.soopin.order.domain.entity.*; @@ -469,4 +472,14 @@ public class AftersaleServiceImpl extends ServiceImpl getlist(Page page, AftersaleBo query) { + IPage resultPage = aftersaleMapper.getlist(page,query); + return resultPage; + } + +// public Page getlist(Page page, AftersaleBo query) { +// IPage resultPage = aftersaleMapper.getlist(page,query); +// return resultPage; +// } } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java index e6e538d93..8d6649f35 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java @@ -8,11 +8,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wzj.soopin.content.domain.po.Vlog; +import com.wzj.soopin.content.mapper.VlogMapper; +import com.wzj.soopin.content.service.impl.VlogServiceImpl; import com.wzj.soopin.goods.convert.SkuConvert; import com.wzj.soopin.goods.domain.entity.Sku; import com.wzj.soopin.goods.mapper.ProductMapper; import com.wzj.soopin.goods.mapper.SkuMapper; +import com.wzj.soopin.member.domain.po.Feedback; import com.wzj.soopin.member.domain.po.Member; +import com.wzj.soopin.member.domain.po.Withdraw; +import com.wzj.soopin.member.mapper.*; +import com.wzj.soopin.member.service.impl.FeedbackServiceImpl; +import com.wzj.soopin.member.service.impl.MemberServiceImpl; +import com.wzj.soopin.member.service.impl.WithdrawServiceImpl; import com.wzj.soopin.order.convert.OrderConvert; import com.wzj.soopin.order.convert.OrderOperateHistoryConvert; import com.wzj.soopin.order.domain.bo.OrderBo; @@ -30,10 +39,10 @@ import com.wzj.soopin.order.mapper.OrderMapper; import com.wzj.soopin.order.mapper.OrderOperateHistoryMapper; import com.wzj.soopin.order.service.OrderService; import com.wzj.soopin.order.service.VerificationCodeService; -import com.wzj.soopin.order.utils.SecurityUtils; import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.event.Constants; import org.dromara.common.core.utils.PhoneUtils; +import org.dromara.common.core.utils.SecurityUtils; import org.dromara.system.domain.SysTenant; import org.dromara.system.mapper.SysOperLogMapper; import org.dromara.system.mapper.SysTenantMapper; @@ -43,9 +52,6 @@ import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.wzj.soopin.member.mapper.MemberAddressMapper; -import com.wzj.soopin.member.mapper.MemberCartMapper; -import com.wzj.soopin.member.mapper.MemberMapper; import java.time.LocalDateTime; import java.util.*; @@ -95,6 +101,27 @@ public class OrderServiceImpl extends ServiceImpl implements @Autowired private SysTenantMapper sysTenantMapper; + + @Autowired + private VlogMapper vlogMapper; + + @Autowired + private FeedbackMapper feedbackMapper; + + @Autowired + private WithdrawMapper withdrawMapper; + + @Autowired + private MemberServiceImpl memberService; + + @Autowired + private FeedbackServiceImpl feedbackService; + + @Autowired + private WithdrawServiceImpl withdrawService; + + + /** * 查询订单表 * @@ -540,7 +567,65 @@ public class OrderServiceImpl extends ServiceImpl implements return resultPage; } - } + +// @Override +// public Map getCount() { +// Map result = new HashMap<>(); +// result.put("MemberCount", memberMapper.countMember()); +// result.put("storeCount", sysTenantMapper.countStore()); +// result.put("productCount", productMapper.countProduct()); +// result.put("orderCount", orderMapper.countOrder()); +// +// +// +//// result.put("productAudit", productMapper.AuditProduct()); +//// +//// List> incomeExpenseList = incomeExpenseMapper.getIncomeExpenseByMonth(); +//// result.put("incomeExpense", incomeExpenseList); +// +// return result; +// } + +@Override +public Map getCount() { + Map result = new HashMap<>(); + result.put("memberCount", memberService.count()); //用户数量 + result.put("vlogCount", vlogMapper.countVlog()); //待审核视频 + +// 待审核举报统计 + QueryWrapper FeedbackWrapper = new QueryWrapper<>(); + FeedbackWrapper.eq("status", 0); + result.put("feedbackCount", feedbackService.count(FeedbackWrapper)); + + // 待审核提现统计 + QueryWrapper withdrawQueryWrapper = new QueryWrapper<>(); + withdrawQueryWrapper.eq("audit_status", 0); + result.put("WithdrawCount", withdrawService.count(withdrawQueryWrapper)); + +// 商品统计、待审核商品统计 + Map productCounts = productMapper.countProduct(); + result.put("productCount", productCounts.get("count1")); + result.put("productAudit", productCounts.get("count2")); + +// 店铺统计、待审核店铺统计 + Map StoreCounts = sysTenantMapper.countProduct(); + result.put("storeCount", StoreCounts.get("count1")); + result.put("StoreAudit", StoreCounts.get("count2")); + +// 订单统计、待审核退款统计 + Map OrderCounts = orderMapper.countOrder(); + result.put("orderCount", OrderCounts.get("count1")); + result.put("orderAudit", OrderCounts.get("count2")); + + + + + return result; +} + + + +} // @Override // public IPage getlist(PageVO pageVO, OrderBo query) { diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/VerificationCodeServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/VerificationCodeServiceImpl.java index 7fa2f618a..6b60f9ae1 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/VerificationCodeServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/VerificationCodeServiceImpl.java @@ -2,6 +2,7 @@ package com.wzj.soopin.order.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wzj.soopin.order.domain.dto.CodeVerificationDto; import com.wzj.soopin.order.domain.entity.Order; import com.wzj.soopin.order.domain.entity.VerificationCodes; import com.wzj.soopin.order.domain.entity.VerificationLogs; @@ -95,7 +96,10 @@ public class VerificationCodeServiceImpl extends ServiceImpl + + diff --git a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/OrderMapper.xml b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/OrderMapper.xml index 962d947eb..032abaa21 100644 --- a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/OrderMapper.xml +++ b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/OrderMapper.xml @@ -298,14 +298,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND um.phone_encrypted LIKE CONCAT('%', #{query.memberPhoneEncrypted}, '%') + + AND o.receiver_province LIKE CONCAT('%', #{query.receiverProvince}, '%') + + + AND o.receiver_city LIKE CONCAT('%', #{query.receiverCity}, '%') + + + AND o.receiver_district LIKE CONCAT('%', #{query.receiverDistrict}, '%') + AND o.receiver_phone LIKE CONCAT('%', #{query.receiverPhone}, '%') - - AND o.status LIKE CONCAT('%', #{query.status}, '%') + + AND o.status = #{query.status} - - AND o.type LIKE CONCAT('%', #{query.type}, '%') + + AND o.type = #{query.type} AND o.withdraw_status LIKE CONCAT('%', #{query.withdrawStatus}, '%') diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml index dd960febd..2e857c0d1 100644 --- a/ruoyi-modules/ruoyi-system/pom.xml +++ b/ruoyi-modules/ruoyi-system/pom.xml @@ -118,19 +118,26 @@ org.springframework.boot spring-boot-starter-websocket - + jakarta.websocket jakarta.websocket-api - + org.apache.tomcat.embed tomcat-embed-websocket + + + com.github.pagehelper + pagehelper-spring-boot-starter + 1.4.1 + + diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/BaseController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/BaseController.java new file mode 100644 index 000000000..5cb9a0aff --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/BaseController.java @@ -0,0 +1,194 @@ +package org.dromara.system.controller; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.dromara.common.core.constant.HttpStatus; +import org.dromara.common.core.domain.model.LoginUser; +import org.dromara.common.core.utils.DateUtils; +import org.dromara.common.core.utils.SecurityUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.core.utils.sql.SqlUtil; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.system.config.AjaxResult; +import org.dromara.system.page.PageDomain; +import org.dromara.system.page.TableSupport; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; + +import java.beans.PropertyEditorSupport; +import java.util.Date; +import java.util.List; + +/** + * web层通用数据处理 + * + * @author ruoyi + */ +public class BaseController +{ + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + /** + * 将前台传递过来的日期格式的字符串,自动转化为Date类型 + */ + @InitBinder + public void initBinder(WebDataBinder binder) + { + // Date 类型转换 + binder.registerCustomEditor(Date.class, new PropertyEditorSupport() + { + @Override + public void setAsText(String text) + { + setValue(DateUtils.parseDate(text)); + } + }); + } + + /** + * 设置请求分页数据 + */ + protected void startPage() + { + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) + { + String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); + Boolean reasonable = pageDomain.getReasonable(); + PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable); + } + } + + /** + * 设置请求排序数据 + */ + protected void startOrderBy() + { + PageDomain pageDomain = TableSupport.buildPageRequest(); + if (StringUtils.isNotEmpty(pageDomain.getOrderBy())) + { + String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); + PageHelper.orderBy(orderBy); + } + } + + /** + * 响应请求分页数据 + */ + @SuppressWarnings({"rawtypes", "unchecked"}) + protected TableDataInfo getDataTable(List list) { + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(HttpStatus.SUCCESS); + rspData.setMsg("查询成功"); + rspData.setRows(list); + rspData.setTotal(new PageInfo(list).getTotal()); + return rspData; + } + + protected TableDataInfo getDataTable(Page page) { + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(HttpStatus.SUCCESS); + rspData.setMsg("查询成功"); + rspData.setRows(page.getContent()); + rspData.setTotal(page.getTotalElements()); + return rspData; + } + + /** + * 返回成功 + */ + public AjaxResult success() { + return AjaxResult.success(); + } + + /** + * 返回失败消息 + */ + public AjaxResult error() + { + return AjaxResult.error(); + } + + /** + * 返回成功消息 + */ + public AjaxResult success(String message) + { + return AjaxResult.success(message); + } + + /** + * 返回失败消息 + */ + public AjaxResult error(String message) + { + return AjaxResult.error(message); + } + + /** + * 响应返回结果 + * + * @param rows 影响行数 + * @return 操作结果 + */ + protected AjaxResult toAjax(int rows) + { + return rows > 0 ? AjaxResult.success() : AjaxResult.error(); + } + + /** + * 响应返回结果 + * + * @param result 结果 + * @return 操作结果 + */ + protected AjaxResult toAjax(boolean result) + { + return result ? success() : error(); + } + + /** + * 页面跳转 + */ + public String redirect(String url) + { + return StringUtils.format("redirect:{}", url); + } + + /** + * 获取用户缓存信息 + */ + public LoginUser getLoginUser() + { + return SecurityUtils.getLoginUser(); + } + + /** + * 获取登录用户id + */ + public Long getUserId() + { + return getLoginUser().getUserId(); + } + + /** + * 获取登录部门id + */ + public Long getDeptId() + { + return getLoginUser().getDeptId(); + } + + /** + * 获取登录用户名 + */ + public String getUsername() + { + return getLoginUser().getUsername(); + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/ConfigController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/ConfigController.java new file mode 100644 index 000000000..f56ceb313 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/ConfigController.java @@ -0,0 +1,34 @@ +package org.dromara.system.controller; + +import org.dromara.system.config.AjaxResult; +import org.dromara.system.domain.SysConfig; +import org.dromara.system.domain.vo.SysConfigVo; +import org.dromara.system.service.ISysConfigService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/sys/config") +public class ConfigController extends BaseController { + + @Autowired + private ISysConfigService configService; + + @GetMapping(value = "/configKey2/{configKey}") + public AjaxResult getConfigKey2(@PathVariable String configKey) { + return AjaxResult.success(configService.selectConfigByKey2(configKey)); + } + + @PostMapping("/addOrUpdate") + public AjaxResult addOrUpdate(@RequestBody SysConfigVo content) { + SysConfig config = new SysConfig(); + BeanUtils.copyProperties(content,config); + if (config.getConfigId() == null) { + config.setCreateBy(getUserId()); + return toAjax(configService.insertConfig1(config)); + } + config.setUpdateBy(getUserId()); + return toAjax(configService.updateConfig1(config)); + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysConfigMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysConfigMapper.java index 0eaaee8f4..3ba76816f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysConfigMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysConfigMapper.java @@ -4,6 +4,8 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.system.domain.SysConfig; import org.dromara.system.domain.vo.SysConfigVo; +import java.util.List; + /** * 参数配置 数据层 * @@ -11,4 +13,62 @@ import org.dromara.system.domain.vo.SysConfigVo; */ public interface SysConfigMapper extends BaseMapperPlus { + + /** + * 查询参数配置信息 + * + * @param config 参数配置信息 + * @return 参数配置信息 + */ + public SysConfig selectConfig(SysConfig config); + + /** + * 查询参数配置列表 + * + * @param config 参数配置信息 + * @return 参数配置集合 + */ + public List selectConfigList(SysConfig config); + + /** + * 根据键名查询参数配置信息 + * + * @param configKey 参数键名 + * @return 参数配置信息 + */ + public SysConfig checkConfigKeyUnique(String configKey); + + /** + * 新增参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + public int insertConfig(SysConfig config); + + /** + * 修改参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + public int updateConfig(SysConfig config); + + /** + * 删除参数配置 + * + * @param configId 参数ID + * @return 结果 + */ + public int deleteConfigById(Long configId); + + /** + * 批量删除参数信息 + * + * @param configIds 需要删除的参数ID + * @return 结果 + */ + public int deleteConfigByIds(Long[] configIds); + + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysTenantMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysTenantMapper.java index 7e1167aa3..54a678316 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysTenantMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysTenantMapper.java @@ -1,9 +1,12 @@ package org.dromara.system.mapper; +import org.apache.ibatis.annotations.Select; import org.dromara.system.domain.SysTenant; import org.dromara.system.domain.vo.SysTenantVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import java.util.Map; + /** * 租户Mapper接口 * @@ -11,4 +14,12 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; */ public interface SysTenantMapper extends BaseMapperPlus { + @Select("SELECT COUNT(*) FROM sys_tenant WHERE status = 0") + Object countStore(); + + @Select("SELECT " + + "SUM(CASE WHEN status = 0 THEN 1 ELSE 0 END) AS count1, " + + "SUM(CASE WHEN status = 2 THEN 1 ELSE 0 END) AS count2 " + + "FROM sys_tenant") + Map countProduct(); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/page/PageDomain.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/page/PageDomain.java new file mode 100644 index 000000000..25526e5dd --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/page/PageDomain.java @@ -0,0 +1,102 @@ +package org.dromara.system.page; + + +import org.dromara.common.core.utils.StringUtils; + +/** + * 分页数据 + * + * @author ruoyi + */ +public class PageDomain +{ + /** 当前记录起始索引 */ + private Integer pageNum; + + /** 每页显示记录数 */ + private Integer pageSize; + + /** 排序列 */ + private String orderByColumn; + + /** 排序的方向desc或者asc */ + private String isAsc = "asc"; + + /** 分页参数合理化 */ + private Boolean reasonable = true; + + public String getOrderBy() + { + if (StringUtils.isEmpty(orderByColumn)) + { + return ""; + } + return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc; + } + + public Integer getPageNum() + { + return pageNum; + } + + public void setPageNum(Integer pageNum) + { + this.pageNum = pageNum; + } + + public Integer getPageSize() + { + return pageSize; + } + + public void setPageSize(Integer pageSize) + { + this.pageSize = pageSize; + } + + public String getOrderByColumn() + { + return orderByColumn; + } + + public void setOrderByColumn(String orderByColumn) + { + this.orderByColumn = orderByColumn; + } + + public String getIsAsc() + { + return isAsc; + } + + public void setIsAsc(String isAsc) + { + if (StringUtils.isNotEmpty(isAsc)) + { + // 兼容前端排序类型 + if ("ascending".equals(isAsc)) + { + isAsc = "asc"; + } + else if ("descending".equals(isAsc)) + { + isAsc = "desc"; + } + this.isAsc = isAsc; + } + } + + public Boolean getReasonable() + { + if (StringUtils.isNull(reasonable)) + { + return Boolean.TRUE; + } + return reasonable; + } + + public void setReasonable(Boolean reasonable) + { + this.reasonable = reasonable; + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/page/TableSupport.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/page/TableSupport.java new file mode 100644 index 000000000..b45ff51aa --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/page/TableSupport.java @@ -0,0 +1,56 @@ +package org.dromara.system.page; + + +import org.dromara.common.core.utils.ServletUtils; + +/** + * 表格数据处理 + * + * @author ruoyi + */ +public class TableSupport +{ + /** + * 当前记录起始索引 + */ + public static final String PAGE_NUM = "pageNum"; + + /** + * 每页显示记录数 + */ + public static final String PAGE_SIZE = "pageSize"; + + /** + * 排序列 + */ + public static final String ORDER_BY_COLUMN = "orderByColumn"; + + /** + * 排序的方向 "desc" 或者 "asc". + */ + public static final String IS_ASC = "isAsc"; + + /** + * 分页参数合理化 + */ + public static final String REASONABLE = "reasonable"; + + /** + * 封装分页对象 + */ + public static PageDomain getPageDomain() + { + PageDomain pageDomain = new PageDomain(); + pageDomain.setPageNum(ServletUtils.getParameterToInt(PAGE_NUM)); + pageDomain.setPageSize(ServletUtils.getParameterToInt(PAGE_SIZE)); + pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN)); + pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC)); + pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE)); + return pageDomain; + } + + public static PageDomain buildPageRequest() + { + return getPageDomain(); + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysConfigService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysConfigService.java index f7efda7af..a54b61a80 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysConfigService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysConfigService.java @@ -2,6 +2,7 @@ package org.dromara.system.service; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.system.domain.SysConfig; import org.dromara.system.domain.bo.SysConfigBo; import org.dromara.system.domain.vo.SysConfigVo; @@ -64,6 +65,24 @@ public interface ISysConfigService { */ String updateConfig(SysConfigBo bo); + + /** + * 新增参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + public int insertConfig1(SysConfig config); + + /** + * 修改参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + public int updateConfig1(SysConfig config); + + /** * 批量删除参数信息 * @@ -84,4 +103,7 @@ public interface ISysConfigService { */ boolean checkConfigKeyUnique(SysConfigBo config); + + public SysConfig selectConfigByKey2(String configKey); + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java index d92647c44..a96def490 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.constant.SystemConstants; +import org.dromara.common.core.domain.event.Constants; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.service.ConfigService; import org.dromara.common.core.utils.MapstructUtils; @@ -16,6 +17,7 @@ import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.redis.redis.RedisCache; import org.dromara.common.redis.utils.CacheUtils; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.system.domain.SysConfig; @@ -24,6 +26,7 @@ import org.dromara.system.domain.vo.SysConfigVo; import org.dromara.system.mapper.SysConfigMapper; import org.dromara.system.service.ISysConfigService; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @@ -43,6 +46,12 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService { private final SysConfigMapper baseMapper; + @Autowired + private SysConfigMapper configMapper; + + @Autowired + private RedisCache redisCache; + @Override public TableDataInfo selectPageConfigList(SysConfigBo config, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(config); @@ -162,6 +171,31 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService { throw new ServiceException("操作失败"); } + @Override + public int insertConfig1(SysConfig config) { + int row = configMapper.insertConfig(config); + if (row > 0) { + if ("Y".equals(config.getConfigType())){ + redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + } + return row; + } + + @Override + public int updateConfig1(SysConfig config) { + int row = configMapper.updateConfig(config); + if (row > 0) { + if ("N".equals(config.getConfigType())){ + redisCache.setCacheObject(getCacheKey2(config.getConfigKey()), config); + redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } else { + redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + } + return row; + } + /** * 批量删除参数信息 * @@ -214,4 +248,35 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService { return SpringUtils.getAopProxy(this).selectConfigByKey(configKey); } + + @Override + public SysConfig selectConfigByKey2(String configKey) { + SysConfig config = redisCache.getCacheObject(getCacheKey2(configKey)); + if (config != null) { + return config; + } + SysConfig configQuery = new SysConfig(); + configQuery.setConfigKey(configKey); + SysConfig retConfig = configMapper.selectConfig(configQuery); + if (StringUtils.isNotNull(retConfig)) { + redisCache.setCacheObject(getCacheKey2(configKey), retConfig); + return retConfig; + } + return null; + } + + /** + * 设置cache key + * + * @param configKey 参数键 + * @return 缓存键key + */ + private String getCacheKey(String configKey) { + return Constants.SYS_CONFIG_KEY + configKey; + } + + private String getCacheKey2(String configKey) { + return Constants.SYS_CONFIG_KEY + configKey + "_all"; + } + } From e01d3c4f746e84fdfbdb8cadc14ac99d2fd26b42 Mon Sep 17 00:00:00 2001 From: fengxiaohang <15076273430@163.com> Date: Tue, 24 Jun 2025 09:52:05 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=B8=E9=94=80?= =?UTF-8?q?=E3=80=81=E8=AE=A2=E5=8D=95=E5=94=AE=E5=90=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wzj/soopin/member/domain/po/Withdraw.java | 51 ++++++++ .../member/service/IWithdrawService.java | 8 ++ .../service/impl/WithdrawServiceImpl.java | 116 +++++++++++++++++- ruoyi-modules/ruoyi-system/pom.xml | 13 ++ 4 files changed, 187 insertions(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/po/Withdraw.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/po/Withdraw.java index e1149d86c..b56f92bae 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/po/Withdraw.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/po/Withdraw.java @@ -1,7 +1,12 @@ package com.wzj.soopin.member.domain.po; +import com.alibaba.excel.annotation.format.DateTimeFormat; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; import lombok.Data; import org.dromara.common.core.domain.model.BaseAudit; @@ -14,29 +19,75 @@ import java.time.LocalDateTime; * @author wzj * @date 2023-03-07 */ +@Schema(description="提现") @Data @TableName("ums_withdraw") +@Builder(toBuilder = true) public class Withdraw extends BaseAudit { + /** + * 主键 + */ + @TableId private Long id; + /** + * 提现码 + */ private String code; + /** + * 会员id + */ private Long memberId; + /** + * 金额 + */ private BigDecimal money; + /** + * 手续费 + */ private BigDecimal fee; + /** + * 实际金额 + */ private BigDecimal actualMoney; + + /** + * 状态 + */ private Integer status; + /** + * 类型 + */ private Integer type; + /** + * 审核人 + */ private Long auditBy; + /** + * 审核时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime auditTime; + /** + * 提现方式 + */ private Integer method; + /** + * 审核状态 + */ private Integer auditStatus; + + /** + * 审核原因 + */ + private String auditReason; } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IWithdrawService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IWithdrawService.java index ffb728ebf..c666c6132 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IWithdrawService.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IWithdrawService.java @@ -1,7 +1,15 @@ package com.wzj.soopin.member.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.wzj.soopin.member.domain.bo.WithdrawBO; +import com.wzj.soopin.member.domain.po.Feedback; import com.wzj.soopin.member.domain.po.Withdraw; +import com.wzj.soopin.member.domain.vo.FeedbackVO; + +import java.io.Serializable; public interface IWithdrawService extends IService { + boolean audit(WithdrawBO bo); + + boolean withdraw(Long id); } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/WithdrawServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/WithdrawServiceImpl.java index da1202697..d91f25422 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/WithdrawServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/WithdrawServiceImpl.java @@ -1,11 +1,125 @@ package com.wzj.soopin.member.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wzj.soopin.member.domain.bo.WithdrawBO; +import com.wzj.soopin.member.domain.po.Charge; +import com.wzj.soopin.member.domain.po.MemberAccount; +import com.wzj.soopin.member.domain.po.MemberAccountChangeRecord; import com.wzj.soopin.member.domain.po.Withdraw; +import com.wzj.soopin.member.domain.vo.YishengAccountVO; +import com.wzj.soopin.member.enums.MemberAccountChangeRecordChangeTypeEnum; +import com.wzj.soopin.member.enums.MemberAccountChangeRecordSourceEnum; +import com.wzj.soopin.member.enums.WithdrawAuditStatus; +import com.wzj.soopin.member.enums.WithdrawStatus; +import com.wzj.soopin.member.mapper.ChargeMapper; +import com.wzj.soopin.member.mapper.MemberAccountMapper; import com.wzj.soopin.member.mapper.WithdrawMapper; -import com.wzj.soopin.member.service.IWithdrawService; +import com.wzj.soopin.member.service.*; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.satoken.utils.LoginHelper; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Objects; + +/** + * 会员封禁 + * + * @author zcc + */ @Service +@RequiredArgsConstructor +@Slf4j public class WithdrawServiceImpl extends ServiceImpl implements IWithdrawService { + + private final IMemberAccountService memberAccountService; + + /** + * 易生账户充值服务 + */ + private final IYishengService yishengService; + + private final IMemberAccountChangeRecordService memberAccountChangeRecordService; + + @Override + public boolean audit(WithdrawBO bo) { + Withdraw withdraw = getById(bo.getId()); + if (withdraw == null) { + throw new RuntimeException("提现申请不存在"); + } + if (!Objects.equals(WithdrawAuditStatus.PENDING.getCode(), withdraw.getAuditStatus())) { + throw new RuntimeException("提现申请已处理"); + } + withdraw = Withdraw.builder().id(bo.getId()) + .auditReason(bo.getAuditReason()) + .auditTime(LocalDateTime.now()) + .auditStatus(bo.getAuditStatus()) + .auditBy(LoginHelper.getUserId()) + .build(); + return this.updateById(withdraw); + } + + @Override + public boolean save(Withdraw entity) { + entity.setStatus(WithdrawStatus.WAITING.getCode()); + return super.save(entity); + } + + public boolean withdraw(Long id) { + Withdraw withdraw = getById(id); + //获取用户余额信息 + MemberAccount memberAccount = memberAccountService.getById(withdraw.getMemberId()); + if (memberAccount == null) { + throw new RuntimeException("用户不存在"); + } + //检查当前用于的账户余额是否充足 + BigDecimal balance = memberAccount.getMoneyBalance(); + + if (balance.compareTo(withdraw.getMoney()) < 0) { + throw new RuntimeException("用户余额不足"); + } + //调用三方支付平台获取用户余额 + YishengAccountVO yishengAccountVO = yishengService.getYishengAccount(withdraw.getMemberId()); + + if (yishengAccountVO == null) { + throw new RuntimeException("用户余额获取失败"); + } + + BigDecimal yishengBalance = yishengAccountVO.getBalance(); + if (yishengBalance.compareTo(withdraw.getMoney()) < 0) { + throw new RuntimeException("用户余额不足"); + } + + if (!yishengBalance.equals(balance)) { + throw new RuntimeException("用户余额不一致"); + } + + //发起提现 + boolean chargeSuccess = yishengService.withdraw(withdraw.getMemberId(), withdraw.getMoney()); + + if (chargeSuccess) { + //提现成功后,更新会员账户余额 + //从易生取,别用自己计算的 + //// TODO: 2025/6/21 测试的时候用计算的 测试完用易生的 + BigDecimal finalBalance = balance.subtract(withdraw.getMoney()); + yishengAccountVO = yishengService.getYishengAccount(withdraw.getMemberId()); + memberAccountService.updateById(memberAccount.toBuilder().moneyBalance(balance.subtract(finalBalance)).build()); + //生成账户变动记录bh + MemberAccountChangeRecord memberAccountChangeRecord = MemberAccountChangeRecord.builder() + .memberId(withdraw.getMemberId()) + .moneyBalance(finalBalance) + .beforeBalance(balance) + .afterBalance(yishengAccountVO.getBalance()) + .changeType(MemberAccountChangeRecordChangeTypeEnum.WITHDRAW.getCode()) + .changeDesc("提现") + .source(MemberAccountChangeRecordSourceEnum.WITHDRAW.getCode()).build(); + memberAccountChangeRecordService.save(memberAccountChangeRecord); + + } else { + return false; + } + return true; + } } diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml index 2e857c0d1..69ab71a07 100644 --- a/ruoyi-modules/ruoyi-system/pom.xml +++ b/ruoyi-modules/ruoyi-system/pom.xml @@ -138,6 +138,19 @@ 1.4.1 + + + org.apache.rocketmq + rocketmq-spring-boot-starter + 2.2.3 + + + + + org.springframework + spring-messaging + +