SaaS平台开发实战(四):让基础模块和用户模块运行起来

在前面的章节我们创建了基础模块和用户模块, 从这一章开始,我们需要让这两个模块都运行起来。

如果您在本章发布之前跟着前面的章节实操,请从git重新拉取项目。

在运行前, 我们修改了第二章中的部分配置内容

bootstrap.yml

spring.application.name: saasdemo-master

删除spring.cloud.nacos.config.extension-configs[3] (vue-code-generator.yml)

这是用于vue代码生成的,在后面的章节会有详细描述。

启动MasterApplication, 出现以下输出表示启动成功!

打开数据库我们可以看到自动在数据库中生成了这些表, 由于这些表在基础库中已生成代码,此处我们就不再生成代码了。

接下来我们调试用户模块

启动UserApplication,出现以下内容表示成功

saas_user数据库自动建表

我们发现缺少了undo_log表,添加V1.0.1__create_undo_ddl.sql,再重新启动

上一章中saasdemo-user-dev.yml配置文件需要做如下调整,用于创建租户

在postman中进行测试,注意headers中增加

X-APP-ID表示应用类型,可查看ApplicationType

租户已入库,我们复制tenant_id,用于后面的测试

我们查看日志表,已正常保存日志,接下来我们需要为用户模块生成代码

调用生成代码接口,成功生成代码

Entity

  1 package org.example.saas.core.pojo;
  2 
  3 import com.baomidou.mybatisplus.annotation.FieldFill;
  4 import com.baomidou.mybatisplus.annotation.IdType;
  5 import com.baomidou.mybatisplus.annotation.TableField;
  6 import com.baomidou.mybatisplus.annotation.TableId;
  7 import com.baomidou.mybatisplus.annotation.TableName;
  8 import java.math.BigDecimal;
  9 import java.time.LocalDateTime;
 10 import java.io.Serializable;
 11 import io.swagger.annotations.ApiModel;
 12 import io.swagger.annotations.ApiModelProperty;
 13 import lombok.Data;
 14 import lombok.EqualsAndHashCode;
 15 import lombok.experimental.Accessors;
 16 
 17 /**
 18  * <p>
 19  * 余额账单
 20  * </p>
 21  *
 22  * @author Multi Tenant Auto Generator
 23  * @since 2024-02-24
 24  */
 25 @Data
 26 @EqualsAndHashCode(callSuper = false)
 27 @Accessors(chain = true)
 28 @TableName("saas_balance_bill")
 29 @ApiModel(value="BalanceBill对象", description="余额账单")
 30 public class BalanceBill implements Serializable {
 31 
 32 
 33     /**
 34      * 余额变更记录编号
 35      */
 36     @ApiModelProperty(value = "余额变更记录编号")
 37     @TableId(value = "bill_id", type = IdType.INPUT)
 38     private Long billId;
 39 
 40     /**
 41      * 客户编号
 42      */
 43     @ApiModelProperty(value = "客户编号")
 44     @TableField("`customer_id`")
 45     private Long customerId;
 46 
 47     /**
 48      * 租户编号
 49      */
 50     @ApiModelProperty(value = "租户编号")
 51     @TableField("`tenant_id`")
 52     private Long tenantId;
 53 
 54     /**
 55      * 变动金额
 56      */
 57     @ApiModelProperty(value = "变动金额")
 58     @TableField("`amount`")
 59     private BigDecimal amount;
 60 
 61     /**
 62      * 操作者
 63      */
 64     @ApiModelProperty(value = "操作者")
 65     @TableField("`operator`")
 66     private Long operator;
 67 
 68     /**
 69      * 原因
 70      */
 71     @ApiModelProperty(value = "原因")
 72     @TableField("`reason`")
 73     private String reason;
 74 
 75     /**
 76      * 备注
 77      */
 78     @ApiModelProperty(value = "备注")
 79     @TableField("`remark`")
 80     private String remark;
 81 
 82     /**
 83      * 触发应用编号
 84      */
 85     @ApiModelProperty(value = "触发应用编号")
 86     @TableField("`trigger`")
 87     private Byte trigger;
 88 
 89     /**
 90      * 交易编号
 91      */
 92     @ApiModelProperty(value = "交易编号")
 93     @TableField("`trade_id`")
 94     private Long tradeId;
 95 
 96     /**
 97      * 变动前余额
 98      */
 99     @ApiModelProperty(value = "变动前余额")
100     @TableField("`before`")
101     private BigDecimal before;
102 
103     /**
104      * 变动后余额
105      */
106     @ApiModelProperty(value = "变动后余额")
107     @TableField("`after`")
108     private BigDecimal after;
109 
110     /**
111      * 创建时间
112      */
113     @ApiModelProperty(value = "创建时间")
114     @TableField(value = "`create_time`", fill = FieldFill.INSERT)
115     private LocalDateTime createTime;
116 
117 
118 }
View Code

 

DTO

 1 package org.example.saas.core.domain.dto;
 2 
 3 import org.example.saas.core.pojo.BalanceBill;
 4 import io.swagger.annotations.ApiModel;
 5 import io.swagger.annotations.ApiModelProperty;
 6 import lombok.Data;
 7 import lombok.EqualsAndHashCode;
 8 /**
 9  * <p>
10  * 余额账单 DTO对象
11  * </p>
12  *
13  * @author Multi Tenant Auto Generator
14  * @since 2024-02-24
15  */
16 @Data
17 @EqualsAndHashCode(callSuper = true)
18 @ApiModel(value="BalanceBillDTO", description="余额账单DTO对象")
19 public class BalanceBillDTO extends BalanceBill {
20 }

 

Mapper

 1 package org.example.saas.core.mapper;
 2 
 3 import org.example.saas.core.pojo.BalanceBill;
 4 import com.chia.multienty.core.mybatis.KutaBaseMapper;
 5 
 6 /**
 7  * <p>
 8  * 余额账单 Mapper 接口
 9  * </p>
10  *
11  * @author Multi Tenant Auto Generator
12  * @since 2024-02-24
13  */
14 public interface BalanceBillMapper extends KutaBaseMapper<BalanceBill> {
15 
16 }

 

Parameter

 1 package org.example.saas.core.parameter.user;
 2 
 3 import lombok.Data;
 4 import com.chia.multienty.core.annotation.LogMetaId;
 5 import javax.validation.constraints.NotNull;
 6 import java.math.BigDecimal;
 7 import java.time.LocalDateTime;
 8 import io.swagger.annotations.ApiModel;
 9 import io.swagger.annotations.ApiModelProperty;
10 import lombok.experimental.Accessors;
11 /**
12  * <p>
13  * 余额账单删除请求
14  * </p>
15  *
16  * @author Multi Tenant Auto Generator
17  * @since 2024-02-24
18  */
19 
20 @Data
21 @ApiModel(value = "BalanceBillDeleteParameter",description = "余额账单删除请求")
22 @Accessors(chain = true)
23 public class BalanceBillDeleteParameter {
24 
25     /**
26      * 余额变更记录编号
27      */
28     @ApiModelProperty(value = "余额变更记录编号")
29     @LogMetaId
30     private Long billId;
31     /**
32      * 租户编号
33      */
34     @ApiModelProperty(value = "租户编号")
35     @NotNull
36     private Long tenantId;
37 
38 }
View Code

 

Service

 1 package org.example.saas.core.service.user;
 2 
 3 import org.example.saas.core.pojo.BalanceBill;
 4 import com.chia.multienty.core.mybatis.service.KutaBaseService;
 5 import com.baomidou.mybatisplus.core.metadata.IPage;
 6 import org.example.saas.core.domain.dto.BalanceBillDTO;
 7 import org.example.saas.core.parameter.user.BalanceBillDetailGetParameter;
 8 import org.example.saas.core.parameter.user.BalanceBillPageGetParameter;
 9 import org.example.saas.core.parameter.user.BalanceBillDeleteParameter;
10 import org.example.saas.core.parameter.user.BalanceBillSaveParameter;
11 import org.example.saas.core.parameter.user.BalanceBillUpdateParameter;
12 /**
13  * <p>
14  * 余额账单 服务类
15  * </p>
16  *
17  * @author Multi Tenant Auto Generator
18  * @since 2024-02-24
19  */
20 public interface BalanceBillService extends KutaBaseService<BalanceBill> {
21 
22     BalanceBillDTO getDetail(BalanceBillDetailGetParameter parameter);
23 
24     void delete(BalanceBillDeleteParameter parameter);
25 
26     IPage<BalanceBillDTO> getPage(BalanceBillPageGetParameter parameter);
27 
28     void save(BalanceBillSaveParameter parameter);
29 
30     void update(BalanceBillUpdateParameter parameter);
31 
32 }
View Code

 

Controller

 1 package org.example.saas.user.controller;
 2 
 3 
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.example.saas.core.service.user.BalanceBillService;
 6 import org.example.saas.core.domain.dto.BalanceBillDTO;
 7 import org.example.saas.core.pojo.BalanceBill;
 8 import org.example.saas.core.parameter.user.BalanceBillDetailGetParameter;
 9 import org.example.saas.core.parameter.user.BalanceBillPageGetParameter;
10 import org.example.saas.core.parameter.user.BalanceBillDeleteParameter;
11 import org.example.saas.core.parameter.user.BalanceBillSaveParameter;
12 import org.example.saas.core.parameter.user.BalanceBillUpdateParameter;
13 import com.baomidou.mybatisplus.core.metadata.IPage;
14 import org.springframework.validation.annotation.Validated;
15 import org.springframework.web.bind.annotation.*;
16 import com.chia.multienty.core.annotation.WebLog;
17 import com.chia.multienty.core.domain.basic.Result;
18 import org.springframework.web.bind.annotation.RestController;
19 import lombok.RequiredArgsConstructor;
20 import io.swagger.annotations.Api;
21 import io.swagger.annotations.ApiOperation;
22 /**
23  * <p>
24  * 余额账单 服务
25  * </p>
26  *
27  * @author Multi Tenant Auto Generator
28  * @since 2024-02-24
29  */
30 @RestController
31 @Validated
32 @RequestMapping("/balance-bill")
33 @RequiredArgsConstructor
34 @Api(tags = "余额账单")
35 public class BalanceBillController {
36     private final BalanceBillService balanceBillService;
37 
38     @PostMapping("/detail")
39     @ApiOperation("获取余额账单详情")
40     public Result<BalanceBillDTO> getDetail(@Validated @RequestBody BalanceBillDetailGetParameter parameter) {
41         BalanceBillDTO detail = balanceBillService.getDetail(parameter);
42         return new Result<>(detail);
43     }
44 
45     @PostMapping("/page")
46     @ApiOperation("获取余额账单分页列表")
47     public Result<IPage<BalanceBillDTO>> getPage(@Validated @RequestBody BalanceBillPageGetParameter parameter) {
48         IPage<BalanceBillDTO> page = balanceBillService.getPage(parameter);
49         return new Result<>(page);
50     }
51 
52     @PostMapping("/update")
53     @ApiOperation("更新余额账单")
54     @WebLog
55     public Result<Boolean> update(@Validated @RequestBody BalanceBillUpdateParameter parameter) {
56         balanceBillService.update(parameter);
57         return new Result<>(true);
58     }
59 
60     @PostMapping("/save")
61     @ApiOperation("保存余额账单")
62     @WebLog
63     public Result<Boolean> save(@Validated @RequestBody BalanceBillSaveParameter parameter) {
64         balanceBillService.save(parameter);
65         return new Result<>(true);
66     }
67 
68 
69     @DeleteMapping("/delete")
70     @ApiOperation("删除余额账单")
71     @WebLog
72     public Result<Boolean> delete(@Validated @RequestBody BalanceBillDeleteParameter parameter) {
73         balanceBillService.delete(parameter);
74         return new Result<>(true);
75     }
76 
77 }
View Code

 

代码生成器会根据shardingsphere的配置生成不同的代码,用户模块仅分库,会加入tenant_id,后续订单模块会有分表,到时候可以看到更多的变化。

本章已构造完毕基础数据,下一章将开始创建客户,加入订单模块

posted @ 2024-02-24 23:27  kutasms  阅读(36)  评论(0)    收藏  举报