From a190205309818b0702ec76f3b4df4a77fa50e96a Mon Sep 17 00:00:00 2001 From: 18796357645 <674126018@qq.com> Date: Sun, 8 Jun 2025 10:53:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=85=85=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/controller/ArticleController.java | 214 +++++++------- .../{SysUserDao.xml => AccountService.xml} | 0 .../java/io/modules/item/dao/ArticleDao.java | 4 +- .../java/io/modules/item/dto/AccountDTO.java | 24 ++ .../java/io/modules/item/dto/ArticleDTO.java | 56 ---- .../java/io/modules/item/dto/OrderDTO.java | 1 + .../java/io/modules/item/dto/UserDTO.java | 5 +- .../io/modules/item/entity/AccountEntity.java | 26 ++ .../io/modules/item/entity/ArticleEntity.java | 68 ----- .../io/modules/item/entity/DictEntity.java | 3 - .../modules/item/entity/FrontUserEntity.java | 7 +- .../item/entity/UserBehaviorEntity.java | 3 - .../modules/item/service/AccountService.java | 14 + .../modules/item/service/ArticleService.java | 14 - .../io/modules/item/service/OrderService.java | 3 - .../item/service/impl/AccountServiceImpl.java | 29 ++ .../item/service/impl/ArticleServiceImpl.java | 42 --- .../item/service/impl/OrderServiceImpl.java | 1 + db/bookstore.sql | 2 +- .../java/io/controller/AccountController.java | 79 ++++++ .../java/io/controller/OrderController.java | 48 +++- .../java/io/controller/UserController.java | 63 ++++- front/src/main/java/io/dto/RegisterDTO.java | 8 +- front/src/main/java/io/entity/UserEntity.java | 3 +- ui/src/components/front/info-top.vue | 2 - ui/src/layouts/frontUserInfo.vue | 4 +- ui/src/pages/address/index.vue | 4 +- ui/src/pages/admin/order.vue | 12 +- ui/src/pages/admin/user.vue | 6 +- ui/src/pages/collect/index.vue | 67 ++--- ui/src/pages/info/[id].vue | 210 +++++++++++++- ui/src/pages/order/index.vue | 129 ++++----- ui/src/pages/user/index.vue | 263 +++++++++++++++--- 33 files changed, 921 insertions(+), 493 deletions(-) rename admin/src/main/resources/mapper/sys/{SysUserDao.xml => AccountService.xml} (100%) create mode 100644 common/src/main/java/io/modules/item/dto/AccountDTO.java delete mode 100644 common/src/main/java/io/modules/item/dto/ArticleDTO.java create mode 100644 common/src/main/java/io/modules/item/entity/AccountEntity.java delete mode 100644 common/src/main/java/io/modules/item/entity/ArticleEntity.java create mode 100644 common/src/main/java/io/modules/item/service/AccountService.java delete mode 100644 common/src/main/java/io/modules/item/service/ArticleService.java create mode 100644 common/src/main/java/io/modules/item/service/impl/AccountServiceImpl.java delete mode 100644 common/src/main/java/io/modules/item/service/impl/ArticleServiceImpl.java create mode 100644 front/src/main/java/io/controller/AccountController.java diff --git a/admin/src/main/java/io/modules/sys/controller/ArticleController.java b/admin/src/main/java/io/modules/sys/controller/ArticleController.java index 40e522c..4f94b79 100644 --- a/admin/src/main/java/io/modules/sys/controller/ArticleController.java +++ b/admin/src/main/java/io/modules/sys/controller/ArticleController.java @@ -1,107 +1,107 @@ -package io.modules.sys.controller; -import io.common.annotation.LogOperation; -import io.common.constant.Constant; -import io.modules.item.dto.ArticleDTO; - -import io.modules.item.service.ArticleService; -import io.common.page.PageData; -import io.common.utils.Result; -import io.common.validator.AssertUtils; -import io.common.validator.ValidatorUtils; -import io.common.validator.group.AddGroup; -import io.common.validator.group.DefaultGroup; -import io.common.validator.group.UpdateGroup; -import io.modules.item.service.DictService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.enums.ParameterIn; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Parameters; - -import java.util.List; -import java.util.Map; -/** - * 文章表 - - */ -@RestController -@RequestMapping("item/article") -@Tag(name="文章表") -public class ArticleController { - @Autowired - private ArticleService articleService; - - - @Autowired - private DictService dictService; - - @GetMapping("page") - @Operation(summary = "分页") - @Parameters({ - @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", in = ParameterIn.QUERY, required = true, ref="int") , - @Parameter(name = Constant.LIMIT, description = "每页显示记录数", in = ParameterIn.QUERY,required = true, ref="int") , - @Parameter(name = Constant.ORDER_FIELD, description = "排序字段", in = ParameterIn.QUERY, ref="String") , - @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)", in = ParameterIn.QUERY, ref="String"), - @Parameter(name = "type", description = "类型", in = ParameterIn.QUERY, ref="String") - }) - @RequiresPermissions("item:article:page") - public Result> page(@Parameter(hidden = true) @RequestParam Map params){ - PageData page = articleService.page(params); - return new Result>().ok(page); - } - - @GetMapping("{id}") - @Operation(summary = "信息") - @RequiresPermissions("item:article:info") - public Result get(@PathVariable("id") Long id){ - ArticleDTO data = articleService.get(id); - - return new Result().ok(data); - } - - @PostMapping - @Operation(summary = "保存") - @LogOperation("保存") - @RequiresPermissions("item:article:save") - public Result save(@RequestBody ArticleDTO dto){ - //效验数据 - ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); - List existsList = dictService.isExistsList(dto.getIntroduction()); - if (!existsList.isEmpty()){ - return new Result().error("简介出现敏感词:"+existsList); - } - List contentExistsList = dictService.isExistsList(dto.getContent()); - if (!contentExistsList.isEmpty()){ - return new Result().error("发布内容出现敏感词:"+ contentExistsList); - } - articleService.save(dto); - return new Result(); - } - @PutMapping - @Operation(summary = "修改") - @LogOperation("修改") - @RequiresPermissions("item:article:update") - public Result update(@RequestBody ArticleDTO dto){ - //效验数据 - ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); - articleService.update(dto); - return new Result(); - } - - @DeleteMapping - @Operation(summary = "删除") - @LogOperation("删除") - @RequiresPermissions("item:article:delete") - public Result delete(@RequestBody Long[] ids){ - //效验数据 - AssertUtils.isArrayEmpty(ids, "id"); - articleService.delete(ids); - return new Result(); - } - - - -} +//package io.modules.sys.controller; +//import io.common.annotation.LogOperation; +//import io.common.constant.Constant; +//import io.modules.item.dto.AccountDTO; +// +//import io.modules.item.service.AccountService; +//import io.common.page.PageData; +//import io.common.utils.Result; +//import io.common.validator.AssertUtils; +//import io.common.validator.ValidatorUtils; +//import io.common.validator.group.AddGroup; +//import io.common.validator.group.DefaultGroup; +//import io.common.validator.group.UpdateGroup; +//import io.modules.item.service.DictService; +//import io.swagger.v3.oas.annotations.Operation; +//import io.swagger.v3.oas.annotations.enums.ParameterIn; +//import io.swagger.v3.oas.annotations.tags.Tag; +//import org.apache.shiro.authz.annotation.RequiresPermissions; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.web.bind.annotation.*; +//import io.swagger.v3.oas.annotations.Parameter; +//import io.swagger.v3.oas.annotations.Parameters; +// +//import java.util.List; +//import java.util.Map; +///** +// * 文章表 +// +// */ +//@RestController +//@RequestMapping("item/article") +//@Tag(name="文章表") +//public class ArticleController { +// @Autowired +// private AccountService articleService; +// +// +// @Autowired +// private DictService dictService; +// +// @GetMapping("page") +// @Operation(summary = "分页") +// @Parameters({ +// @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", in = ParameterIn.QUERY, required = true, ref="int") , +// @Parameter(name = Constant.LIMIT, description = "每页显示记录数", in = ParameterIn.QUERY,required = true, ref="int") , +// @Parameter(name = Constant.ORDER_FIELD, description = "排序字段", in = ParameterIn.QUERY, ref="String") , +// @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)", in = ParameterIn.QUERY, ref="String"), +// @Parameter(name = "type", description = "类型", in = ParameterIn.QUERY, ref="String") +// }) +// @RequiresPermissions("item:article:page") +// public Result> page(@Parameter(hidden = true) @RequestParam Map params){ +// PageData page = articleService.page(params); +// return new Result>().ok(page); +// } +// +// @GetMapping("{id}") +// @Operation(summary = "信息") +// @RequiresPermissions("item:article:info") +// public Result get(@PathVariable("id") Long id){ +// AccountDTO data = articleService.get(id); +// +// return new Result().ok(data); +// } +// +// @PostMapping +// @Operation(summary = "保存") +// @LogOperation("保存") +// @RequiresPermissions("item:article:save") +// public Result save(@RequestBody AccountDTO dto){ +// //效验数据 +// ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); +// List existsList = dictService.isExistsList(dto.getIntroduction()); +// if (!existsList.isEmpty()){ +// return new Result().error("简介出现敏感词:"+existsList); +// } +// List contentExistsList = dictService.isExistsList(dto.getContent()); +// if (!contentExistsList.isEmpty()){ +// return new Result().error("发布内容出现敏感词:"+ contentExistsList); +// } +// articleService.save(dto); +// return new Result(); +// } +// @PutMapping +// @Operation(summary = "修改") +// @LogOperation("修改") +// @RequiresPermissions("item:article:update") +// public Result update(@RequestBody AccountDTO dto){ +// //效验数据 +// ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); +// articleService.update(dto); +// return new Result(); +// } +// +// @DeleteMapping +// @Operation(summary = "删除") +// @LogOperation("删除") +// @RequiresPermissions("item:article:delete") +// public Result delete(@RequestBody Long[] ids){ +// //效验数据 +// AssertUtils.isArrayEmpty(ids, "id"); +// articleService.delete(ids); +// return new Result(); +// } +// +// +// +//} diff --git a/admin/src/main/resources/mapper/sys/SysUserDao.xml b/admin/src/main/resources/mapper/sys/AccountService.xml similarity index 100% rename from admin/src/main/resources/mapper/sys/SysUserDao.xml rename to admin/src/main/resources/mapper/sys/AccountService.xml diff --git a/common/src/main/java/io/modules/item/dao/ArticleDao.java b/common/src/main/java/io/modules/item/dao/ArticleDao.java index d8eae19..784e4ff 100644 --- a/common/src/main/java/io/modules/item/dao/ArticleDao.java +++ b/common/src/main/java/io/modules/item/dao/ArticleDao.java @@ -1,13 +1,13 @@ package io.modules.item.dao; import io.common.dao.BaseDao; -import io.modules.item.entity.ArticleEntity; +import io.modules.item.entity.AccountEntity; import org.apache.ibatis.annotations.Mapper; /** * 文章表 */ @Mapper -public interface ArticleDao extends BaseDao { +public interface ArticleDao extends BaseDao { } diff --git a/common/src/main/java/io/modules/item/dto/AccountDTO.java b/common/src/main/java/io/modules/item/dto/AccountDTO.java new file mode 100644 index 0000000..8bfdc03 --- /dev/null +++ b/common/src/main/java/io/modules/item/dto/AccountDTO.java @@ -0,0 +1,24 @@ +package io.modules.item.dto; + +import io.swagger.v3.oas.annotations.media.SchemaProperty; +import lombok.Data; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + + +/** + * 用户账户操作记录 + */ +@Data +public class AccountDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @SchemaProperty(name = "编号") + private Long id; + private Long userId; + private String note; + private String paymentMethod; + private BigDecimal balance; + private Date createTime; +} diff --git a/common/src/main/java/io/modules/item/dto/ArticleDTO.java b/common/src/main/java/io/modules/item/dto/ArticleDTO.java deleted file mode 100644 index ea1fb35..0000000 --- a/common/src/main/java/io/modules/item/dto/ArticleDTO.java +++ /dev/null @@ -1,56 +0,0 @@ -package io.modules.item.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.SchemaProperty; -import lombok.Data; - -import java.io.Serializable; -import java.util.Date; - - -/** - * 文章表 - - */ -@Data -@Schema(name = "文章表") -public class ArticleDTO implements Serializable { - private static final long serialVersionUID = 1L; - - @SchemaProperty(name = "编号") - private Long id; - - @SchemaProperty(name = "文章标题") - private String title; - private String path; - @SchemaProperty(name = "简介") - private String introduction; - - @SchemaProperty(name = "发表用户") - private Long userId; - - @SchemaProperty(name = "内容") - private String content; - - @SchemaProperty(name = "排序") - private Integer sort; - - @SchemaProperty(name = "点赞数量") - private Integer star; - - @SchemaProperty(name = "封面图") - private String cover; - - @SchemaProperty(name = "创建时间") - private Date createTime; - - - private String tag; - - - private String type; - - private Integer audit; - private String feedback; - -} diff --git a/common/src/main/java/io/modules/item/dto/OrderDTO.java b/common/src/main/java/io/modules/item/dto/OrderDTO.java index 429e7a3..8178fe8 100644 --- a/common/src/main/java/io/modules/item/dto/OrderDTO.java +++ b/common/src/main/java/io/modules/item/dto/OrderDTO.java @@ -42,6 +42,7 @@ public class OrderDTO implements Serializable { @SchemaProperty(name = "订单总金额") private BigDecimal totalAmount; + private BigDecimal price; private AddressDTO addressDTO; @SchemaProperty(name = "支付状态") diff --git a/common/src/main/java/io/modules/item/dto/UserDTO.java b/common/src/main/java/io/modules/item/dto/UserDTO.java index fa8c701..e4c1135 100644 --- a/common/src/main/java/io/modules/item/dto/UserDTO.java +++ b/common/src/main/java/io/modules/item/dto/UserDTO.java @@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.SchemaProperty; import lombok.Data; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; @@ -34,7 +35,5 @@ public class UserDTO implements Serializable { private String nickName; @SchemaProperty(name = "介绍") - private String introduce; - - + private BigDecimal balance; } diff --git a/common/src/main/java/io/modules/item/entity/AccountEntity.java b/common/src/main/java/io/modules/item/entity/AccountEntity.java new file mode 100644 index 0000000..1a95ffd --- /dev/null +++ b/common/src/main/java/io/modules/item/entity/AccountEntity.java @@ -0,0 +1,26 @@ +package io.modules.item.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 用户账户操作记录 + */ +@Data +@TableName("tb_account") +public class AccountEntity { + + @TableId(value = "id",type = IdType.AUTO) + private Long id; + private Long userId; + private String note; + private String paymentMethod; + private BigDecimal balance; + private Date createTime; + +} diff --git a/common/src/main/java/io/modules/item/entity/ArticleEntity.java b/common/src/main/java/io/modules/item/entity/ArticleEntity.java deleted file mode 100644 index 942393e..0000000 --- a/common/src/main/java/io/modules/item/entity/ArticleEntity.java +++ /dev/null @@ -1,68 +0,0 @@ -package io.modules.item.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -import java.util.Date; - -/** - * 文章表 - - */ -@Data -@TableName("tb_article") -public class ArticleEntity { - - /** - * 编号 - */ - @TableId(value = "id",type = IdType.AUTO) - private Long id; - /** - * 文章标题 - */ - private String title; - private String path; - /** - * 简介 - */ - private String introduction; - /** - * 发表用户 - */ - private Long userId; - /** - * 内容 - */ - private String content; - /** - * 排序 - */ - private Integer sort; - /** - * 点赞数量 - */ - private Integer star; - private Integer audit; - /** - * 封面图 - */ - private String cover; - /** - * 创建时间 - */ - private Date createTime; - - /** - * 类型 - */ - private String type; - - - private String tag; - - private String feedback; - -} diff --git a/common/src/main/java/io/modules/item/entity/DictEntity.java b/common/src/main/java/io/modules/item/entity/DictEntity.java index 771b7d6..e9bb209 100644 --- a/common/src/main/java/io/modules/item/entity/DictEntity.java +++ b/common/src/main/java/io/modules/item/entity/DictEntity.java @@ -7,9 +7,6 @@ import java.util.Date; /** * 敏感词 - * - * @author Mark # - * @since 1.0.0 2024-12-12 */ @Data @TableName("tb_dict") diff --git a/common/src/main/java/io/modules/item/entity/FrontUserEntity.java b/common/src/main/java/io/modules/item/entity/FrontUserEntity.java index 94e4be8..ab208fa 100644 --- a/common/src/main/java/io/modules/item/entity/FrontUserEntity.java +++ b/common/src/main/java/io/modules/item/entity/FrontUserEntity.java @@ -2,6 +2,8 @@ package io.modules.item.entity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; + +import java.math.BigDecimal; import java.util.Date; /** @@ -30,8 +32,5 @@ public class FrontUserEntity { * 昵称 */ private String nickName; - /** - * 介绍 - */ - private String introduce; + private BigDecimal balance; } diff --git a/common/src/main/java/io/modules/item/entity/UserBehaviorEntity.java b/common/src/main/java/io/modules/item/entity/UserBehaviorEntity.java index db28a16..7251b37 100644 --- a/common/src/main/java/io/modules/item/entity/UserBehaviorEntity.java +++ b/common/src/main/java/io/modules/item/entity/UserBehaviorEntity.java @@ -7,9 +7,6 @@ import java.util.Date; /** * 用户行为表 - * - * @author Mark # - * @since 1.0.0 2024-12-16 */ @Data @TableName("tb_user_behavior") diff --git a/common/src/main/java/io/modules/item/service/AccountService.java b/common/src/main/java/io/modules/item/service/AccountService.java new file mode 100644 index 0000000..1dbc466 --- /dev/null +++ b/common/src/main/java/io/modules/item/service/AccountService.java @@ -0,0 +1,14 @@ +package io.modules.item.service; + + +import io.modules.item.dto.AccountDTO; +import io.modules.item.entity.AccountEntity; +import io.common.service.CrudService; + +/** + * 文章表 + + */ +public interface AccountService extends CrudService { + +} diff --git a/common/src/main/java/io/modules/item/service/ArticleService.java b/common/src/main/java/io/modules/item/service/ArticleService.java deleted file mode 100644 index 9967801..0000000 --- a/common/src/main/java/io/modules/item/service/ArticleService.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.modules.item.service; - - -import io.modules.item.dto.ArticleDTO; -import io.modules.item.entity.ArticleEntity; -import io.common.service.CrudService; - -/** - * 文章表 - - */ -public interface ArticleService extends CrudService { - -} diff --git a/common/src/main/java/io/modules/item/service/OrderService.java b/common/src/main/java/io/modules/item/service/OrderService.java index 160b8e5..41d4311 100644 --- a/common/src/main/java/io/modules/item/service/OrderService.java +++ b/common/src/main/java/io/modules/item/service/OrderService.java @@ -9,9 +9,6 @@ import java.util.List; /** * 订单表 - * - * @author Mark # - * @since 1.0.0 2025-02-14 */ public interface OrderService extends CrudService { diff --git a/common/src/main/java/io/modules/item/service/impl/AccountServiceImpl.java b/common/src/main/java/io/modules/item/service/impl/AccountServiceImpl.java new file mode 100644 index 0000000..5a861e4 --- /dev/null +++ b/common/src/main/java/io/modules/item/service/impl/AccountServiceImpl.java @@ -0,0 +1,29 @@ +package io.modules.item.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; + +import io.modules.item.dao.ArticleDao; +import io.modules.item.dto.AccountDTO; +import io.modules.item.entity.AccountEntity; +import io.modules.item.service.AccountService; +import cn.hutool.core.util.StrUtil; +import io.common.service.impl.CrudServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.Map; + + +@Service +public class AccountServiceImpl extends CrudServiceImpl implements AccountService { + + @Override + public QueryWrapper getWrapper(Map params){ + String id = (String)params.get("id"); + String userId = (String)params.get("userId"); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(StrUtil.isNotBlank(id), "id", id); + wrapper.eq("user_id", userId); + wrapper.orderByDesc("create_time"); + return wrapper; + } +} diff --git a/common/src/main/java/io/modules/item/service/impl/ArticleServiceImpl.java b/common/src/main/java/io/modules/item/service/impl/ArticleServiceImpl.java deleted file mode 100644 index dcbd6e0..0000000 --- a/common/src/main/java/io/modules/item/service/impl/ArticleServiceImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package io.modules.item.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; - -import io.modules.item.dao.ArticleDao; -import io.modules.item.dto.ArticleDTO; -import io.modules.item.entity.ArticleEntity; -import io.modules.item.service.ArticleService; -import cn.hutool.core.util.StrUtil; -import io.common.service.impl.CrudServiceImpl; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.Map; - -/** - * 文章表 - */ -@Service -public class ArticleServiceImpl extends CrudServiceImpl implements ArticleService { - - @Override - public QueryWrapper getWrapper(Map params){ - String id = (String)params.get("id"); - String type = (String)params.get("type"); - Long userId = (Long)params.get("userId"); - String audit = (String)params.get("audit"); - - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq(StrUtil.isNotBlank(id), "id", id); - wrapper.eq(StrUtil.isNotBlank(type), "type", type); - wrapper.eq(StrUtil.isNotBlank(audit), "audit", audit); - if (userId != null){ - wrapper.eq("user_id", userId); - } - - return wrapper; - } - - - -} diff --git a/common/src/main/java/io/modules/item/service/impl/OrderServiceImpl.java b/common/src/main/java/io/modules/item/service/impl/OrderServiceImpl.java index 02ff999..6b5fb21 100644 --- a/common/src/main/java/io/modules/item/service/impl/OrderServiceImpl.java +++ b/common/src/main/java/io/modules/item/service/impl/OrderServiceImpl.java @@ -41,6 +41,7 @@ public class OrderServiceImpl extends CrudServiceImpl> page(@Parameter(hidden = true) @RequestParam Map params,@Parameter(hidden = true) @RequestAttribute("userId") Long userId){ + params.put("userId",userId.toString()); + PageData page = articleService.page(params); + return new Result>().ok(page); + } + @GetMapping("{id}") + public Result get(@PathVariable("id") Long id){ + AccountDTO data = articleService.get(id); + return new Result().ok(data); + } + + @PostMapping + @Operation(summary = "保存") + public Result save(@RequestBody AccountDTO dto){ + //效验数据 + ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); + articleService.save(dto); + return new Result(); + } + @PutMapping + @Operation(summary = "修改") + public Result update(@RequestBody AccountDTO dto){ + //效验数据 + ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); + articleService.update(dto); + return new Result(); + } + + @DeleteMapping + @Operation(summary = "删除") + public Result delete(@RequestBody Long[] ids){ + //效验数据 + AssertUtils.isArrayEmpty(ids, "id"); + articleService.delete(ids); + return new Result(); + } + + + +} diff --git a/front/src/main/java/io/controller/OrderController.java b/front/src/main/java/io/controller/OrderController.java index 3448919..df19a39 100644 --- a/front/src/main/java/io/controller/OrderController.java +++ b/front/src/main/java/io/controller/OrderController.java @@ -2,7 +2,9 @@ package io.controller; import io.annotation.Login; +import io.annotation.LoginUser; import io.common.constant.Constant; +import io.common.exception.RenException; import io.common.page.PageData; import io.common.utils.Result; import io.common.validator.AssertUtils; @@ -10,10 +12,14 @@ import io.common.validator.ValidatorUtils; import io.common.validator.group.AddGroup; import io.common.validator.group.DefaultGroup; import io.common.validator.group.UpdateGroup; +import io.entity.UserEntity; +import io.modules.item.dto.AccountDTO; import io.modules.item.dto.ItemDTO; import io.modules.item.dto.OrderDTO; +import io.modules.item.service.AccountService; import io.modules.item.service.ItemService; import io.modules.item.service.OrderService; +import io.service.UserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.tags.Tag; @@ -23,6 +29,7 @@ import org.springframework.web.bind.annotation.*; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; +import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -41,6 +48,10 @@ public class OrderController { @Autowired private ItemService itemService; + @Autowired + private UserService userService; + @Autowired + private AccountService accountService; @Value("${upload.url}") private String uploadUrl; @@ -80,12 +91,45 @@ public class OrderController { @PostMapping @Operation(summary = "保存") @Login - public Result save(@RequestBody OrderDTO dto,@Parameter(hidden = true) @RequestAttribute("userId") Long userId){ - dto.setUserId(userId); + public Result save(@RequestBody OrderDTO dto, @Parameter(hidden = true) @LoginUser UserEntity user){ + + //判断余额是否充足 + BigDecimal balance = user.getBalance(); + BigDecimal totalAmount = dto.getTotalAmount(); + if (!isBalanceSufficient(balance, totalAmount)) { + throw new RenException("账户余额不足,当前余额: " + balance + ",需支付: " + totalAmount); + } + + //余额充足 + BigDecimal subtract = user.getBalance().subtract(totalAmount); + user.setBalance(subtract); + userService.updateById(user); + //添加日志 + AccountDTO account = new AccountDTO(); + account.setUserId(user.getId()); + account.setNote("购买"); + account.setBalance(subtract); + accountService.save(account); + dto.setUserId(user.getId()); orderService.save(dto); return new Result(); } + + public boolean isBalanceSufficient(BigDecimal userBalance, BigDecimal requiredAmount) { + // 1. 检查参数是否为null(安全防护) + if (userBalance == null || requiredAmount == null) { + throw new IllegalArgumentException("金额参数不能为null"); + } + + // 2. 比较余额是否足够(使用compareTo方法) + // compareTo返回: + // -1 表示 userBalance < requiredAmount + // 0 表示 userBalance = requiredAmount + // 1 表示 userBalance > requiredAmount + return userBalance.compareTo(requiredAmount) >= 0; + } + @PutMapping @Operation(summary = "修改") public Result update(@RequestBody OrderDTO dto){ diff --git a/front/src/main/java/io/controller/UserController.java b/front/src/main/java/io/controller/UserController.java index 578b3f8..78ce5a3 100644 --- a/front/src/main/java/io/controller/UserController.java +++ b/front/src/main/java/io/controller/UserController.java @@ -8,14 +8,18 @@ import io.common.validator.ValidatorUtils; import io.dto.LoginDTO; import io.dto.RegisterDTO; import io.entity.UserEntity; +import io.modules.item.dto.AccountDTO; +import io.modules.item.service.AccountService; import io.service.TokenService; import io.service.UserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; +import org.springframework.beans.BeanUtils; import org.springframework.web.bind.annotation.*; +import java.math.BigDecimal; import java.util.Date; import java.util.Map; @@ -30,6 +34,7 @@ import java.util.Map; public class UserController { private final UserService userService; + private final AccountService accountService; private final TokenService tokenService; @PostMapping("register") @Operation(summary = "注册") @@ -67,18 +72,60 @@ public class UserController { @PutMapping("update") @Operation(summary = "修改信息") public Result update(@RequestBody RegisterDTO dto) { + if (!dto.getPassword().equals(dto.getConfirmPassword())){ + return new Result().error("密码不一致"); + } //表单校验 ValidatorUtils.validateEntity(dto); UserEntity user = new UserEntity(); - user.setId(dto.getId()); - user.setUsername(dto.getUsername()); - user.setNickName(dto.getNickName()); - user.setIntroduce(dto.getIntroduce()); - user.setPassword(DigestUtil.sha256Hex(dto.getPassword())); + BeanUtils.copyProperties(dto,user); + if (dto.getPassword() !=null){ + user.setPassword(DigestUtil.sha256Hex(dto.getPassword())); + } userService.updateById(user); return new Result(); } + //充值 + @Login + @PostMapping("recharge") + @Operation(summary = "充值") + public Result recharge(@RequestBody AccountDTO dto, @Parameter(hidden = true) @LoginUser UserEntity user) { + //添加账户金额 + BigDecimal total = user.getBalance().add(dto.getBalance()); + user.setBalance(total); + userService.updateById(user); + //添加记录 + AccountDTO account = new AccountDTO(); + + account.setUserId(user.getId()); + account.setNote("充值"); + account.setBalance(total); + accountService.save(account); + return new Result(); + } + + + //提现 +// @Login +// @PostMapping("withdraw") +// @Operation(summary = "提现") +// public Result withdraw(@RequestBody AccountDTO dto, @Parameter(hidden = true) @LoginUser UserEntity user) { +// +// //添加账户金额 +// BigDecimal total = user.getBalance().add(dto.getBalance()); +// user.setBalance(total); +// userService.updateById(user); +// //添加记录 +// AccountDTO account = new AccountDTO(); +// account.setUserId(user.getId()); +// account.setDescribe("充值"); +// account.setBalance(total); +// accountService.save(account); +// return new Result(); +// } + + @Login @PostMapping("logout") @@ -95,10 +142,4 @@ public class UserController { return new Result().ok(user); } - @Login - @GetMapping("userId") - @Operation(summary = "获取用户ID") - public Result userInfo(@Parameter(hidden = true) @RequestAttribute("userId") Long userId) { - return new Result().ok(userId); - } } diff --git a/front/src/main/java/io/dto/RegisterDTO.java b/front/src/main/java/io/dto/RegisterDTO.java index c587bc7..c342863 100644 --- a/front/src/main/java/io/dto/RegisterDTO.java +++ b/front/src/main/java/io/dto/RegisterDTO.java @@ -6,6 +6,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import lombok.Data; +import java.math.BigDecimal; + /** * 注册表单 @@ -26,10 +28,6 @@ public class RegisterDTO { @Schema(title = "密码") @NotBlank(message="确认密码不能为空") private String confirmPassword; - - @Schema(title = "昵称") private String nickName; - - @Schema(title = "介绍") - private String introduce; + private BigDecimal balance; } diff --git a/front/src/main/java/io/entity/UserEntity.java b/front/src/main/java/io/entity/UserEntity.java index b7ba927..64e16d5 100644 --- a/front/src/main/java/io/entity/UserEntity.java +++ b/front/src/main/java/io/entity/UserEntity.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; /** @@ -32,7 +33,7 @@ public class UserEntity implements Serializable { /** * 介绍 */ - private String introduce; + private BigDecimal balance; /** * 用户名 */ diff --git a/ui/src/components/front/info-top.vue b/ui/src/components/front/info-top.vue index 139abe2..7ce4349 100644 --- a/ui/src/components/front/info-top.vue +++ b/ui/src/components/front/info-top.vue @@ -162,8 +162,6 @@ const handleBuy = () => { */ const handleChange = () => { state.buyForm.totalAmount = (state.info.price * state.buyForm.quantity).toFixed(2); - - } { diff --git a/ui/src/pages/order/index.vue b/ui/src/pages/order/index.vue index 16a688d..89ed530 100644 --- a/ui/src/pages/order/index.vue +++ b/ui/src/pages/order/index.vue @@ -1,83 +1,85 @@ + { "meta": {