【7.0.4】更新C端用户

pull/22/head
fengshuonan 2021-06-07 14:00:15 +08:00
parent d5cd8bb072
commit 0a88f66f16
22 changed files with 851 additions and 0 deletions

View File

@ -0,0 +1 @@
C端用户适用于BBS等to c 业务的用户管理

View File

@ -0,0 +1 @@
C端用户api

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>kernel-s-customer</artifactId>
<version>7.0.4</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>customer-api</artifactId>
<packaging>jar</packaging>
<dependencies>
</dependencies>
</project>

View File

@ -0,0 +1,36 @@
/*
* Copyright [2020-2030] [https://www.stylefeng.cn]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* GunsAPACHE LICENSE 2.0使
*
* 1.LICENSE
* 2.Guns
* 3.
* 4. https://gitee.com/stylefeng/guns
* 5. https://gitee.com/stylefeng/guns
* 6.
*/
package cn.stylefeng.roses.kernel.customer.api;
/**
* Capi
*
* @author fengshuonan
* @date 2021/6/7 11:31
*/
public interface CustomerApi {
}

View File

@ -0,0 +1,45 @@
/*
* Copyright [2020-2030] [https://www.stylefeng.cn]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* GunsAPACHE LICENSE 2.0使
*
* 1.LICENSE
* 2.Guns
* 3.
* 4. https://gitee.com/stylefeng/guns
* 5. https://gitee.com/stylefeng/guns
* 6.
*/
package cn.stylefeng.roses.kernel.customer.api.constants;
/**
* C
*
* @author fengshuonan
* @date 2021/6/7 11:28
*/
public interface CustomerConstants {
/**
* C
*/
String CUSTOMER_MODULE_NAME = "kernel-s-customer";
/**
*
*/
String CUSTOMER_EXCEPTION_STEP_CODE = "31";
}

View File

@ -0,0 +1,48 @@
/*
* Copyright [2020-2030] [https://www.stylefeng.cn]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* GunsAPACHE LICENSE 2.0使
*
* 1.LICENSE
* 2.Guns
* 3.
* 4. https://gitee.com/stylefeng/guns
* 5. https://gitee.com/stylefeng/guns
* 6.
*/
package cn.stylefeng.roses.kernel.customer.api.exception;
import cn.hutool.core.util.StrUtil;
import cn.stylefeng.roses.kernel.customer.api.constants.CustomerConstants;
import cn.stylefeng.roses.kernel.rule.exception.AbstractExceptionEnum;
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
/**
* C
*
* @author fengshuonan
* @date 2021/6/7 11:29
*/
public class CustomerException extends ServiceException {
public CustomerException(AbstractExceptionEnum exception, Object... params) {
super(CustomerConstants.CUSTOMER_MODULE_NAME, exception.getErrorCode(), StrUtil.format(exception.getUserTip(), params));
}
public CustomerException(AbstractExceptionEnum exception) {
super(CustomerConstants.CUSTOMER_MODULE_NAME, exception);
}
}

View File

@ -0,0 +1,61 @@
/*
* Copyright [2020-2030] [https://www.stylefeng.cn]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* GunsAPACHE LICENSE 2.0使
*
* 1.LICENSE
* 2.Guns
* 3.
* 4. https://gitee.com/stylefeng/guns
* 5. https://gitee.com/stylefeng/guns
* 6.
*/
package cn.stylefeng.roses.kernel.customer.api.exception.enums;
import cn.stylefeng.roses.kernel.customer.api.constants.CustomerConstants;
import cn.stylefeng.roses.kernel.rule.constants.RuleConstants;
import cn.stylefeng.roses.kernel.rule.exception.AbstractExceptionEnum;
import lombok.Getter;
/**
* C
*
* @author fengshuonan
* @date 2021/6/7 11:30
*/
@Getter
public enum CustomerExceptionEnum implements AbstractExceptionEnum {
/**
*
*/
CANT_FIND_CUSTOMER(RuleConstants.BUSINESS_ERROR_TYPE_CODE + CustomerConstants.CUSTOMER_EXCEPTION_STEP_CODE + "01", "查询不到对应用户用户id是{}");
/**
*
*/
private final String errorCode;
/**
*
*/
private final String userTip;
CustomerExceptionEnum(String errorCode, String userTip) {
this.errorCode = errorCode;
this.userTip = userTip;
}
}

View File

@ -0,0 +1 @@
C端用户管理业务模块

View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>kernel-s-customer</artifactId>
<version>7.0.4</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>customer-business</artifactId>
<packaging>jar</packaging>
<dependencies>
<!--c端用户api-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>customer-api</artifactId>
<version>${roses.version}</version>
</dependency>
<!--资源api模块-->
<!--用在资源控制器,资源扫描上-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>scanner-api</artifactId>
<version>${roses.version}</version>
</dependency>
<!--参数校验模块-->
<!--用在控制器,参数校验-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>validator-api</artifactId>
<version>${roses.version}</version>
</dependency>
<!--数据库sdk-->
<!--数据库初始化-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>db-sdk-init</artifactId>
<version>${roses.version}</version>
</dependency>
<!--数据库sdk-->
<!--数据库dao框架-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>db-sdk-mp</artifactId>
<version>${roses.version}</version>
</dependency>
<!--web模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,98 @@
package cn.stylefeng.roses.kernel.customer.modular.controller;
import cn.stylefeng.roses.kernel.customer.modular.request.CustomerRequest;
import cn.stylefeng.roses.kernel.customer.modular.service.CustomerService;
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource;
import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource;
import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* C
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
@RestController
@ApiResource(name = "C端用户表")
public class CustomerController {
@Resource
private CustomerService customerService;
/**
*
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
@PostResource(name = "添加", path = "/customer/add")
public ResponseData add(@RequestBody @Validated(CustomerRequest.add.class) CustomerRequest customerRequest) {
customerService.add(customerRequest);
return new SuccessResponseData();
}
/**
*
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
@PostResource(name = "删除", path = "/customer/delete")
public ResponseData delete(@RequestBody @Validated(CustomerRequest.delete.class) CustomerRequest customerRequest) {
customerService.del(customerRequest);
return new SuccessResponseData();
}
/**
*
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
@PostResource(name = "编辑", path = "/customer/edit")
public ResponseData edit(@RequestBody @Validated(CustomerRequest.edit.class) CustomerRequest customerRequest) {
customerService.edit(customerRequest);
return new SuccessResponseData();
}
/**
*
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
@GetResource(name = "查看详情", path = "/customer/detail")
public ResponseData detail(@Validated(CustomerRequest.detail.class) CustomerRequest customerRequest) {
return new SuccessResponseData(customerService.detail(customerRequest));
}
/**
*
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
@GetResource(name = "获取列表", path = "/customer/list")
public ResponseData list(CustomerRequest customerRequest) {
return new SuccessResponseData(customerService.findList(customerRequest));
}
/**
*
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
@GetResource(name = "分页查询", path = "/customer/page")
public ResponseData page(CustomerRequest customerRequest) {
return new SuccessResponseData(customerService.findPage(customerRequest));
}
}

View File

@ -0,0 +1,86 @@
package cn.stylefeng.roses.kernel.customer.modular.entity;
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* C
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
@TableName("toc_customer")
@Data
@EqualsAndHashCode(callSuper = true)
public class Customer extends BaseEntity {
/**
* id
*/
@TableId(value = "customer_id", type = IdType.ASSIGN_ID)
@ChineseDescription("主键id")
private Long customerId;
/**
*
*/
@TableField("account")
@ChineseDescription("账号")
private String account;
/**
*
*/
@TableField("password")
@ChineseDescription("密码")
private String password;
/**
*
*/
@TableField("nick_name")
@ChineseDescription("昵称(显示名称)")
private String nickName;
/**
*
*/
@TableField("email")
@ChineseDescription("邮箱")
private String email;
/**
*
*/
@TableField("telephone")
@ChineseDescription("手机")
private String telephone;
/**
* id
*/
@TableField("avatar")
@ChineseDescription("用户头像文件表id")
private Long avatar;
/**
*
*/
@TableField("avatar_object_name")
@ChineseDescription("用户头像的文件全名")
private String avatarObjectName;
/**
*
*/
@TableField("score")
@ChineseDescription("用户积分")
private Integer score;
}

View File

@ -0,0 +1,14 @@
package cn.stylefeng.roses.kernel.customer.modular.mapper;
import cn.stylefeng.roses.kernel.customer.modular.entity.Customer;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* C Mapper
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
public interface CustomerMapper extends BaseMapper<Customer> {
}

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.stylefeng.roses.kernel.customer.modular.mapper.CustomerMapper">
</mapper>

View File

@ -0,0 +1,79 @@
package cn.stylefeng.roses.kernel.customer.modular.request;
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* C
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class CustomerRequest extends BaseRequest {
/**
* id
*/
@NotNull(message = "主键id不能为空", groups = {edit.class, delete.class})
@ChineseDescription("主键id")
private Long customerId;
/**
*
*/
@NotBlank(message = "账号不能为空", groups = {add.class, edit.class})
@ChineseDescription("账号")
private String account;
/**
*
*/
@NotBlank(message = "密码不能为空", groups = {add.class, edit.class})
@ChineseDescription("密码")
private String password;
/**
*
*/
@NotBlank(message = "昵称(显示名称)不能为空", groups = {add.class, edit.class})
@ChineseDescription("昵称(显示名称)")
private String nickName;
/**
*
*/
@ChineseDescription("邮箱")
private String email;
/**
*
*/
@ChineseDescription("手机")
private String telephone;
/**
* id
*/
@ChineseDescription("用户头像文件表id")
private Long avatar;
/**
*
*/
@ChineseDescription("用户头像的文件全名")
private String avatarObjectName;
/**
*
*/
@ChineseDescription("用户积分")
private Integer score;
}

View File

@ -0,0 +1,66 @@
package cn.stylefeng.roses.kernel.customer.modular.service;
import cn.stylefeng.roses.kernel.customer.modular.entity.Customer;
import cn.stylefeng.roses.kernel.customer.modular.request.CustomerRequest;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* C
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
public interface CustomerService extends IService<Customer> {
/**
*
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
void add(CustomerRequest customerRequest);
/**
*
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
void del(CustomerRequest customerRequest);
/**
*
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
void edit(CustomerRequest customerRequest);
/**
*
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
Customer detail(CustomerRequest customerRequest);
/**
*
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
List<Customer> findList(CustomerRequest customerRequest);
/**
*
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
PageResult<Customer> findPage(CustomerRequest customerRequest);
}

View File

@ -0,0 +1,114 @@
package cn.stylefeng.roses.kernel.customer.modular.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.customer.modular.entity.Customer;
import cn.stylefeng.roses.kernel.customer.modular.mapper.CustomerMapper;
import cn.stylefeng.roses.kernel.customer.modular.request.CustomerRequest;
import cn.stylefeng.roses.kernel.customer.modular.service.CustomerService;
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
import cn.stylefeng.roses.kernel.rule.exception.enums.defaults.DefaultBusinessExceptionEnum;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* C
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
@Service
public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> implements CustomerService {
@Override
public void add(CustomerRequest customerRequest) {
Customer customer = new Customer();
BeanUtil.copyProperties(customerRequest, customer);
this.save(customer);
}
@Override
public void del(CustomerRequest customerRequest) {
Customer customer = this.queryCustomer(customerRequest);
this.removeById(customer.getCustomerId());
}
@Override
public void edit(CustomerRequest customerRequest) {
Customer customer = this.queryCustomer(customerRequest);
BeanUtil.copyProperties(customerRequest, customer);
this.updateById(customer);
}
@Override
public Customer detail(CustomerRequest customerRequest) {
return this.queryCustomer(customerRequest);
}
@Override
public PageResult<Customer> findPage(CustomerRequest customerRequest) {
LambdaQueryWrapper<Customer> wrapper = createWrapper(customerRequest);
Page<Customer> sysRolePage = this.page(PageFactory.defaultPage(), wrapper);
return PageResultFactory.createPageResult(sysRolePage);
}
@Override
public List<Customer> findList(CustomerRequest customerRequest) {
LambdaQueryWrapper<Customer> wrapper = this.createWrapper(customerRequest);
return this.list(wrapper);
}
/**
*
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
private Customer queryCustomer(CustomerRequest customerRequest) {
Customer customer = this.getById(customerRequest.getCustomerId());
if (ObjectUtil.isEmpty(customer)) {
throw new ServiceException(DefaultBusinessExceptionEnum.SYSTEM_RUNTIME_ERROR);
}
return customer;
}
/**
* wrapper
*
* @author fengshuonan
* @date 2021/06/07 11:40
*/
private LambdaQueryWrapper<Customer> createWrapper(CustomerRequest customerRequest) {
LambdaQueryWrapper<Customer> queryWrapper = new LambdaQueryWrapper<>();
Long customerId = customerRequest.getCustomerId();
String account = customerRequest.getAccount();
String password = customerRequest.getPassword();
String nickName = customerRequest.getNickName();
String email = customerRequest.getEmail();
String telephone = customerRequest.getTelephone();
Long avatar = customerRequest.getAvatar();
String avatarObjectName = customerRequest.getAvatarObjectName();
Integer score = customerRequest.getScore();
queryWrapper.eq(ObjectUtil.isNotNull(customerId), Customer::getCustomerId, customerId);
queryWrapper.like(ObjectUtil.isNotEmpty(account), Customer::getAccount, account);
queryWrapper.like(ObjectUtil.isNotEmpty(password), Customer::getPassword, password);
queryWrapper.like(ObjectUtil.isNotEmpty(nickName), Customer::getNickName, nickName);
queryWrapper.like(ObjectUtil.isNotEmpty(email), Customer::getEmail, email);
queryWrapper.like(ObjectUtil.isNotEmpty(telephone), Customer::getTelephone, telephone);
queryWrapper.eq(ObjectUtil.isNotNull(avatar), Customer::getAvatar, avatar);
queryWrapper.like(ObjectUtil.isNotEmpty(avatarObjectName), Customer::getAvatarObjectName, avatarObjectName);
queryWrapper.eq(ObjectUtil.isNotNull(score), Customer::getScore, score);
return queryWrapper;
}
}

View File

@ -0,0 +1 @@
spring boot自动装配

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>kernel-s-customer</artifactId>
<version>7.0.4</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>customer-spring-boot-starter</artifactId>
<packaging>jar</packaging>
<dependencies>
<!--字典的业务-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>customer-business</artifactId>
<version>${roses.version}</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,38 @@
/*
* Copyright [2020-2030] [https://www.stylefeng.cn]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* GunsAPACHE LICENSE 2.0使
*
* 1.LICENSE
* 2.Guns
* 3.
* 4. https://gitee.com/stylefeng/guns
* 5. https://gitee.com/stylefeng/guns
* 6.
*/
package cn.stylefeng.roses.kernel.customer.starter;
import org.springframework.context.annotation.Configuration;
/**
* C
*
* @author fengshuonan
* @date 2021/6/7 11:32
*/
@Configuration
public class GunsCustomerAutoConfiguration {
}

View File

@ -0,0 +1,2 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.stylefeng.roses.kernel.customer.starter.GunsCustomerAutoConfiguration

35
kernel-s-customer/pom.xml Normal file
View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>roses-kernel</artifactId>
<version>7.0.4</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>kernel-s-customer</artifactId>
<packaging>pom</packaging>
<modules>
<module>customer-api</module>
<module>customer-business</module>
<module>customer-spring-boot-starter</module>
</modules>
<dependencies>
<!-- 开发规则 -->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>kernel-a-rule</artifactId>
<version>${roses.version}</version>
</dependency>
</dependencies>
</project>

View File

@ -82,6 +82,9 @@
<!--系统监控模块-->
<module>kernel-o-monitor</module>
<!--C端用户-->
<module>kernel-s-customer</module>
<!--演示环境-->
<module>kernel-s-demo</module>