第一次提交
BIN
07e05adbd0ad444c94dbff007c286782.png
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
132ecc5b910049c5a970a32c42d9d069.png
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
3281c7e277534f11b7fb431afcf4b8b1.png
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
7107613a141f4739ad385773b0199aa9.png
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
9ab46710e8134feda151c12b282a931f.png
Normal file
After Width: | Height: | Size: 160 KiB |
165
LICENSE
Normal file
@ -0,0 +1,165 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
74
README.md
Normal file
@ -0,0 +1,74 @@
|
||||
|
||||
**线上预览:** [http://120.26.95.195:8889/](http://120.26.95.195:8889/)
|
||||
|
||||
**欢迎页**
|
||||
.png)
|
||||
**收银台**
|
||||
.png)
|
||||
.png)
|
||||
**会员管理**
|
||||
.png)
|
||||
**库存管理**
|
||||
.png)
|
||||
.png)
|
||||
**订单管理**
|
||||
.png)
|
||||
|
||||
## 简单版思维导图
|
||||

|
||||
## springboot_vue
|
||||
|
||||
正式开发前我们都需要一个完整的 可拓展性基础框架用于后续项目进行 这里我就把自己用的一套整合出来供大家学习使用
|
||||
|
||||
## 首先你要掌握的技能
|
||||
|
||||
在这里我不再对整合进行赘述 技能从来都是从实战中积累的:
|
||||
1. springboot框架的基本使用;
|
||||
2. jwt security的基本整合;
|
||||
3. mybatisplus 的使用 (基于瓷完成了前后端代码生成);
|
||||
4. rabc框架的基本理解;
|
||||
5. vue环境的基本搭建 npm命令使用;
|
||||
6. element框架的整合;
|
||||
7. linux简单部署(这个后续我会结合脚本来进行);
|
||||
|
||||
## 我们将要做的系统的一个展示
|
||||
|
||||

|
||||
|
||||
1. 动态路由 有了这个功能 前端就不用进行硬代码的配置 后台编辑即可 也可以快速的进行路由的改名和删除
|
||||
2. 多角色 基础动态路由 多角色就变的简单了 同时也更方便管理系统
|
||||
3. 多tab客户还是习惯像打开浏览器那也操作我们的系统 所以这个必不可少
|
||||
|
||||
## 包结构说名
|
||||
后端
|
||||
|
||||
- 目前后端功能基本能满足我们需求
|
||||
- 后续开发建立和system同级目录 进行功能开发即可
|
||||

|
||||
前端
|
||||

|
||||
|
||||
## 程序的运行
|
||||
**后端**
|
||||
1. 导入pom文件进行依赖下载
|
||||
2. 修改yml数据源和缓存配置
|
||||
3. 运行AdminApplication 启动
|
||||
|
||||
**前端**
|
||||
1. 执行npm install 下载依赖(下载慢可以执行) `npm conf set registry https://registry.npm.taobao.org`
|
||||
2. npm run dev进行系统的启动
|
||||
|
||||
## 启动后截图
|
||||
**登陆**
|
||||

|
||||
**工作台**
|
||||

|
||||
**菜单权限管理**
|
||||

|
||||

|
||||
|
||||
|
||||
## 写到最后
|
||||
**代码地址** [https://gitee.com/ddeatrr/springboot_vue](https://gitee.com/xay12/springboot_vue)
|
||||
**问题反馈** qq: 727869402 wx: MAMBA_4EVER24
|
||||
|
BIN
a5ce34cbfe774c9fbad8be527b869f3b.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
b41683ee6b144da7afed88e485882213.png
Normal file
After Width: | Height: | Size: 582 KiB |
160
pom.xml
Normal file
@ -0,0 +1,160 @@
|
||||
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>2.5.12</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
<groupId>com.dd</groupId>
|
||||
<artifactId>member</artifactId>
|
||||
<version>0.1</version>
|
||||
<name>admin</name>
|
||||
<description>Demo project for Spring Boot</description>
|
||||
<properties>
|
||||
<java.version>1.8</java.version>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-security</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- spring-boot redis -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- processor -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-configuration-processor</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<!-- 表单验证-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-validation</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- spring-boot aop依赖配置引入 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-aop</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
<version>3.4.3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-generator</artifactId>
|
||||
<version>3.4.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-freemarker</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!--swagger-api 依赖开始-->
|
||||
<dependency>
|
||||
<groupId>com.github.xiaoymin</groupId>
|
||||
<artifactId>knife4j-spring-boot-starter</artifactId>
|
||||
<version>2.0.7</version>
|
||||
</dependency>
|
||||
|
||||
<!--swagger-api 依赖结束-->
|
||||
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
<version>5.7.2</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>fastjson</artifactId>
|
||||
<version>1.2.73</version>
|
||||
</dependency>
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt -->
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt</artifactId>
|
||||
<version>0.9.1</version>
|
||||
</dependency>
|
||||
|
||||
<!-- p6spy -->
|
||||
<dependency>
|
||||
<groupId>p6spy</groupId>
|
||||
<artifactId>p6spy</artifactId>
|
||||
<version>3.8.5</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/java</directory><!--所在的目录-->
|
||||
<includes><!--包括目录下的.properties,.xml文件都会扫描到-->
|
||||
<include>**/*.properties</include>
|
||||
<include>**/*.xml</include>
|
||||
</includes>
|
||||
<filtering>false</filtering>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</build>
|
||||
|
||||
</project>
|
BIN
preview/2021204 (1).png
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
preview/2021204 (2).png
Normal file
After Width: | Height: | Size: 177 KiB |
BIN
preview/2021204 (3).png
Normal file
After Width: | Height: | Size: 289 KiB |
BIN
preview/2021204 (4).png
Normal file
After Width: | Height: | Size: 153 KiB |
BIN
preview/2021204 (5).png
Normal file
After Width: | Height: | Size: 188 KiB |
BIN
preview/2021204 (6).png
Normal file
After Width: | Height: | Size: 222 KiB |
BIN
preview/2021204 (7).png
Normal file
After Width: | Height: | Size: 143 KiB |
BIN
preview/2021204 (8).png
Normal file
After Width: | Height: | Size: 143 KiB |
13
src/main/java/com/dd/admin/AdminApplication.java
Normal file
@ -0,0 +1,13 @@
|
||||
package com.dd.admin;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class AdminApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(AdminApplication.class, args);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,95 @@
|
||||
package com.dd.admin.business.card.controller;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.dd.admin.common.aop.operationLog.aop.OperLog;
|
||||
import com.dd.admin.common.aop.operationLog.aop.OperType;
|
||||
import com.dd.admin.common.security.SecurityUtil;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
import com.dd.admin.common.model.result.ResultBean;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import com.dd.admin.business.card.entity.Card;
|
||||
import com.dd.admin.business.card.domain.CardVo;
|
||||
import com.dd.admin.business.card.domain.CardDto;
|
||||
import com.dd.admin.business.card.service.CardService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-17
|
||||
*/
|
||||
@Api(tags = "")
|
||||
@RestController
|
||||
public class CardController {
|
||||
|
||||
@Autowired
|
||||
CardService cardService;
|
||||
|
||||
@ApiOperation(value = "-分页列表")
|
||||
@ApiOperationSupport(order = 1)
|
||||
@GetMapping("/admin/card/page")
|
||||
@OperLog(operModule = "获取卡项列表",operType = OperType.QUERY,operDesc = "获取卡项列表")
|
||||
public ResultBean<IPage<CardVo>> page(CardDto cardDto) {
|
||||
cardDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
|
||||
IPage<CardVo> pageInfo = cardService.selectCardPage(cardDto);
|
||||
return ResultBean.success(pageInfo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "-列表")
|
||||
@ApiOperationSupport(order = 2)
|
||||
@GetMapping("/admin/card/list")
|
||||
public ResultBean<List<CardVo>> list(CardDto cardDto) {
|
||||
cardDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
|
||||
List<CardVo> list = cardService.selectCardList(cardDto);
|
||||
return ResultBean.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "-添加")
|
||||
@ApiOperationSupport(order = 3)
|
||||
@PostMapping("/admin/card/add")
|
||||
@OperLog(operModule = "添加卡项",operType = OperType.ADD,operDesc = "添加卡项")
|
||||
public ResultBean<Card> add(@RequestBody @Validated CardDto cardDto) {
|
||||
Card card = BeanUtil.copyProperties(cardDto, Card.class);
|
||||
cardService.save(card);
|
||||
return ResultBean.success(card);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "-查询")
|
||||
@ApiOperationSupport(order = 4)
|
||||
@GetMapping("/admin/card/{cardId}")
|
||||
public ResultBean<CardVo> get(@PathVariable @NotBlank String cardId) {
|
||||
Card card = cardService.getById(cardId);
|
||||
CardVo cardVo = BeanUtil.copyProperties(card,CardVo.class);
|
||||
return ResultBean.success(cardVo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "-修改")
|
||||
@ApiOperationSupport(order = 5)
|
||||
@PostMapping("/admin/card/update")
|
||||
public ResultBean<Card> update(@RequestBody @Validated(UpdateGroup.class) CardDto cardDto) {
|
||||
Card card = BeanUtil.copyProperties(cardDto, Card.class);
|
||||
cardService.updateById(card);
|
||||
return ResultBean.success(card);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "-删除")
|
||||
@ApiOperationSupport(order = 6)
|
||||
@GetMapping("/admin/card/delete/{cardId}")
|
||||
public ResultBean<Card> delete(@PathVariable @NotBlank String cardId) {
|
||||
Boolean b = cardService.removeById(cardId);
|
||||
return ResultBean.success(b);
|
||||
}
|
||||
}
|
94
src/main/java/com/dd/admin/business/card/domain/CardDto.java
Normal file
@ -0,0 +1,94 @@
|
||||
package com.dd.admin.business.card.domain;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 返回对象
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-17
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value="接收对象")
|
||||
public class CardDto {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "会员卡id")
|
||||
@NotBlank(message = "id不能为空",groups = UpdateGroup.class)
|
||||
private String cardId;
|
||||
|
||||
@ApiModelProperty(value = "会员卡名")
|
||||
private String cardName;
|
||||
|
||||
@ApiModelProperty(value = "卡编号")
|
||||
private BigDecimal cardNo;
|
||||
|
||||
@ApiModelProperty(value = "预设开卡金")
|
||||
private BigDecimal cardAmount;
|
||||
|
||||
@ApiModelProperty(value = "预设赠送金")
|
||||
private BigDecimal giveAmount;
|
||||
|
||||
@ApiModelProperty(value = "最低开卡金额")
|
||||
private BigDecimal buildCardAmount;
|
||||
|
||||
@ApiModelProperty(value = "卡折扣")
|
||||
private BigDecimal cardDiscount;
|
||||
|
||||
@ApiModelProperty(value = "卡提成")
|
||||
private BigDecimal cardPushPercent;
|
||||
|
||||
@ApiModelProperty(value = "工本费用")
|
||||
private String todos;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1下架")
|
||||
private Integer cardStatus;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1删除")
|
||||
private Integer deleted;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建人id")
|
||||
private String createId;
|
||||
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "修改人")
|
||||
private String updateName;
|
||||
|
||||
@ApiModelProperty(value = "修改人id")
|
||||
private String updateId;
|
||||
|
||||
@ApiModelProperty(value = "搜索关键字")
|
||||
private String keyword;
|
||||
}
|
89
src/main/java/com/dd/admin/business/card/domain/CardVo.java
Normal file
@ -0,0 +1,89 @@
|
||||
package com.dd.admin.business.card.domain;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 返回对象
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-17
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value="返回对象")
|
||||
public class CardVo {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "会员卡id")
|
||||
private String cardId;
|
||||
|
||||
@ApiModelProperty(value = "会员卡名")
|
||||
private String cardName;
|
||||
|
||||
@ApiModelProperty(value = "卡编号")
|
||||
private String cardNo;
|
||||
|
||||
@ApiModelProperty(value = "预设开卡金")
|
||||
private BigDecimal cardAmount;
|
||||
|
||||
@ApiModelProperty(value = "预设赠送金")
|
||||
private BigDecimal giveAmount;
|
||||
|
||||
@ApiModelProperty(value = "最低开卡金额")
|
||||
private BigDecimal buildCardAmount;
|
||||
|
||||
@ApiModelProperty(value = "卡折扣")
|
||||
private BigDecimal cardDiscount;
|
||||
|
||||
@ApiModelProperty(value = "卡提成")
|
||||
private BigDecimal cardPushPercent;
|
||||
|
||||
@ApiModelProperty(value = "工本费用")
|
||||
private BigDecimal todos;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1下架")
|
||||
private Integer cardStatus;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1删除")
|
||||
private Integer deleted;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建人id")
|
||||
private String createId;
|
||||
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "修改人")
|
||||
private String updateName;
|
||||
|
||||
@ApiModelProperty(value = "修改人id")
|
||||
private String updateId;
|
||||
|
||||
|
||||
}
|
112
src/main/java/com/dd/admin/business/card/entity/Card.java
Normal file
@ -0,0 +1,112 @@
|
||||
package com.dd.admin.business.card.entity;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
*
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-17
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("business_card")
|
||||
@ApiModel(value="Card对象", description="")
|
||||
public class Card implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "会员卡id")
|
||||
@TableId(value = "CARD_ID", type = IdType.ASSIGN_UUID)
|
||||
private String cardId;
|
||||
|
||||
@ApiModelProperty(value = "会员卡名")
|
||||
@TableField("CARD_NAME")
|
||||
private String cardName;
|
||||
|
||||
@ApiModelProperty(value = "卡编号")
|
||||
@TableField("CARD_NO")
|
||||
private String cardNo;
|
||||
|
||||
@ApiModelProperty(value = "预设开卡金")
|
||||
@TableField("CARD_AMOUNT")
|
||||
private BigDecimal cardAmount;
|
||||
|
||||
@ApiModelProperty(value = "预设赠送金")
|
||||
@TableField("GIVE_AMOUNT")
|
||||
private BigDecimal giveAmount;
|
||||
|
||||
@ApiModelProperty(value = "最低开卡金额")
|
||||
@TableField("BUILD_CARD_AMOUNT")
|
||||
private BigDecimal buildCardAmount;
|
||||
|
||||
@ApiModelProperty(value = "卡折扣")
|
||||
@TableField("CARD_DISCOUNT")
|
||||
private BigDecimal cardDiscount;
|
||||
|
||||
@ApiModelProperty(value = "卡提成")
|
||||
@TableField("CARD_PUSH_PERCENT")
|
||||
private BigDecimal cardPushPercent;
|
||||
|
||||
@ApiModelProperty(value = "工本费用")
|
||||
@TableField("TODOS")
|
||||
private BigDecimal todos;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1下架")
|
||||
@TableField("CARD_STATUS")
|
||||
private Integer cardStatus;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1删除")
|
||||
@TableField("DELETED")
|
||||
@TableLogic
|
||||
private Integer deleted;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
@TableField(value = "SHOP_ID", fill = FieldFill.INSERT)
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
@TableField(value = "SHOP_NAME", fill = FieldFill.INSERT)
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
@TableField(value = "CREATE_NAME", fill = FieldFill.INSERT)
|
||||
private String createName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建人id")
|
||||
@TableField(value = "CREATE_ID", fill = FieldFill.INSERT)
|
||||
private String createId;
|
||||
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
@TableField(value = "UPDATE_TIME", fill = FieldFill.UPDATE)
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "修改人")
|
||||
@TableField(value = "UPDATE_NAME", fill = FieldFill.UPDATE)
|
||||
private String updateName;
|
||||
|
||||
@ApiModelProperty(value = "修改人id")
|
||||
@TableField(value = "UPDATE_ID", fill = FieldFill.UPDATE)
|
||||
private String updateId;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package com.dd.admin.business.card.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.dd.admin.business.card.entity.Card;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.dd.admin.business.card.domain.CardVo;
|
||||
import com.dd.admin.business.card.domain.CardDto;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-17
|
||||
*/
|
||||
@Mapper
|
||||
public interface CardMapper extends BaseMapper<Card> {
|
||||
|
||||
IPage<CardVo> selectCardPage(Page<CardVo> page, @Param("cardDto") CardDto cardDto);
|
||||
|
||||
List<CardVo> selectCardList(@Param("cardDto") CardDto cardDto);
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
<?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="com.dd.admin.business.card.mapper.CardMapper">
|
||||
|
||||
<!-- 通用查询映射结果 -->
|
||||
<resultMap id="BaseResultMap" type="com.dd.admin.business.card.entity.Card">
|
||||
<id column="CARD_ID" property="cardId" />
|
||||
<result column="CARD_NAME" property="cardName" />
|
||||
<result column="CARD_NO" property="cardNo" />
|
||||
<result column="CARD_AMOUNT" property="cardAmount" />
|
||||
<result column="GIVE_AMOUNT" property="giveAmount" />
|
||||
<result column="BUILD_CARD_AMOUNT" property="buildCardAmount" />
|
||||
<result column="CARD_DISCOUNT" property="cardDiscount" />
|
||||
<result column="CARD_PUSH_PERCENT" property="cardPushPercent" />
|
||||
<result column="TODOS" property="todos" />
|
||||
<result column="CARD_STATUS" property="cardStatus" />
|
||||
<result column="DELETED" property="deleted" />
|
||||
<result column="SHOP_ID" property="shopId" />
|
||||
<result column="SHOP_NAME" property="shopName" />
|
||||
<result column="CREATE_NAME" property="createName" />
|
||||
<result column="CREATE_TIME" property="createTime" />
|
||||
<result column="CREATE_ID" property="createId" />
|
||||
<result column="UPDATE_TIME" property="updateTime" />
|
||||
<result column="UPDATE_NAME" property="updateName" />
|
||||
<result column="UPDATE_ID" property="updateId" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 通用查询结果列 -->
|
||||
<sql id="Base_Column_List">
|
||||
CARD_ID, CARD_NAME, CARD_NO, CARD_AMOUNT, GIVE_AMOUNT, BUILD_CARD_AMOUNT, CARD_DISCOUNT, CARD_PUSH_PERCENT, TODOS, CARD_STATUS, DELETED, SHOP_ID, SHOP_NAME, CREATE_NAME, CREATE_TIME, CREATE_ID, UPDATE_TIME, UPDATE_NAME, UPDATE_ID
|
||||
</sql>
|
||||
|
||||
<select id="selectCardPage" resultType="com.dd.admin.business.card.domain.CardVo">
|
||||
select
|
||||
*
|
||||
from business_card where DELETED = 0
|
||||
<if test="cardDto.shopId != null and cardDto.shopId != ''">
|
||||
and shop_id = #{cardDto.shopId}
|
||||
</if>
|
||||
<if test="cardDto.keyword != null and cardDto.keyword != ''">
|
||||
and CARD_NAME like CONCAT('%', #{cardDto.keyword}, '%')
|
||||
</if>
|
||||
order by create_time desc
|
||||
</select>
|
||||
|
||||
<select id="selectCardList" resultType="com.dd.admin.business.card.domain.CardVo">
|
||||
select
|
||||
*
|
||||
from business_card where DELETED = 0
|
||||
<if test="cardDto.shopId != null and cardDto.shopId != ''">
|
||||
and shop_id = #{cardDto.shopId}
|
||||
</if>
|
||||
order by create_time desc
|
||||
</select>
|
||||
</mapper>
|
@ -0,0 +1,26 @@
|
||||
package com.dd.admin.business.card.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.dd.admin.business.card.entity.Card;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.dd.admin.business.card.domain.CardVo;
|
||||
import com.dd.admin.business.card.domain.CardDto;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-17
|
||||
*/
|
||||
public interface CardService extends IService<Card> {
|
||||
|
||||
//-分页列表
|
||||
IPage<CardVo> selectCardPage(CardDto cardDto);
|
||||
|
||||
//-列表
|
||||
List<CardVo> selectCardList(CardDto cardDto);
|
||||
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package com.dd.admin.business.card.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.dd.admin.common.model.PageFactory;
|
||||
import com.dd.admin.business.card.entity.Card;
|
||||
import com.dd.admin.business.card.mapper.CardMapper;
|
||||
import com.dd.admin.business.card.service.CardService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.dd.admin.business.card.domain.CardVo;
|
||||
import com.dd.admin.business.card.domain.CardDto;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-17
|
||||
*/
|
||||
@Service
|
||||
public class CardServiceImpl extends ServiceImpl<CardMapper, Card> implements CardService {
|
||||
|
||||
@Override
|
||||
public IPage<CardVo> selectCardPage(CardDto cardDto) {
|
||||
Page page = PageFactory.defaultPage();
|
||||
return baseMapper.selectCardPage(page,cardDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CardVo> selectCardList(CardDto cardDto) {
|
||||
return baseMapper.selectCardList(cardDto);
|
||||
}
|
||||
}
|
@ -0,0 +1,95 @@
|
||||
package com.dd.admin.business.category.controller;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.dd.admin.common.aop.operationLog.aop.OperLog;
|
||||
import com.dd.admin.common.aop.operationLog.aop.OperType;
|
||||
import com.dd.admin.common.security.SecurityUtil;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
import com.dd.admin.common.model.result.ResultBean;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import com.dd.admin.business.category.entity.Category;
|
||||
import com.dd.admin.business.category.domain.CategoryVo;
|
||||
import com.dd.admin.business.category.domain.CategoryDto;
|
||||
import com.dd.admin.business.category.service.CategoryService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 分类 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-22
|
||||
*/
|
||||
@Api(tags = "分类")
|
||||
@RestController
|
||||
public class CategoryController {
|
||||
|
||||
@Autowired
|
||||
CategoryService categoryService;
|
||||
|
||||
@ApiOperation(value = "分类-分页列表")
|
||||
@ApiOperationSupport(order = 1)
|
||||
@GetMapping("/admin/category/page")
|
||||
@OperLog(operModule = "获取分页列表",operType = OperType.QUERY,operDesc = "获取分页列表")
|
||||
public ResultBean<IPage<CategoryVo>> page(CategoryDto categoryDto) {
|
||||
categoryDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
|
||||
IPage<CategoryVo> pageInfo = categoryService.selectCategoryPage(categoryDto);
|
||||
return ResultBean.success(pageInfo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "分类-列表")
|
||||
@ApiOperationSupport(order = 2)
|
||||
@GetMapping("/admin/category/list")
|
||||
public ResultBean<List<CategoryVo>> list(CategoryDto categoryDto) {
|
||||
categoryDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
|
||||
List<CategoryVo> list = categoryService.selectCategoryList(categoryDto);
|
||||
return ResultBean.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "分类-添加")
|
||||
@ApiOperationSupport(order = 3)
|
||||
@PostMapping("/admin/category/add")
|
||||
@OperLog(operModule = "添加分类",operType = OperType.ADD,operDesc = "添加分类")
|
||||
public ResultBean<Category> add(@RequestBody @Validated CategoryDto categoryDto) {
|
||||
Category category = BeanUtil.copyProperties(categoryDto, Category.class);
|
||||
categoryService.save(category);
|
||||
return ResultBean.success(category);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "分类-查询")
|
||||
@ApiOperationSupport(order = 4)
|
||||
@GetMapping("/admin/category/{categoryId}")
|
||||
public ResultBean<CategoryVo> get(@PathVariable @NotBlank String categoryId) {
|
||||
Category category = categoryService.getById(categoryId);
|
||||
CategoryVo categoryVo = BeanUtil.copyProperties(category,CategoryVo.class);
|
||||
return ResultBean.success(categoryVo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "分类-修改")
|
||||
@ApiOperationSupport(order = 5)
|
||||
@PostMapping("/admin/category/update")
|
||||
public ResultBean<Category> update(@RequestBody @Validated(UpdateGroup.class) CategoryDto categoryDto) {
|
||||
Category category = BeanUtil.copyProperties(categoryDto, Category.class);
|
||||
categoryService.updateById(category);
|
||||
return ResultBean.success(category);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "分类-删除")
|
||||
@ApiOperationSupport(order = 6)
|
||||
@GetMapping("/admin/category/delete/{categoryId}")
|
||||
public ResultBean<Category> delete(@PathVariable @NotBlank String categoryId) {
|
||||
Boolean b = categoryService.removeById(categoryId);
|
||||
return ResultBean.success(b);
|
||||
}
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
package com.dd.admin.business.category.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 分类返回对象
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-22
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value="分类接收对象")
|
||||
public class CategoryDto {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "分类id")
|
||||
@NotBlank(message = "分类id不能为空",groups = UpdateGroup.class)
|
||||
private String categoryId;
|
||||
|
||||
@ApiModelProperty(value = "分类名")
|
||||
private String categoryName;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1禁用")
|
||||
private Integer categoryStatus;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建人id")
|
||||
private String createId;
|
||||
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "修改人")
|
||||
private String updateName;
|
||||
|
||||
@ApiModelProperty(value = "修改人id")
|
||||
private String updateId;
|
||||
|
||||
@ApiModelProperty(value = "搜索关键字")
|
||||
private String keyword;
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
package com.dd.admin.business.category.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 分类返回对象
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-22
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value="分类返回对象")
|
||||
public class CategoryVo {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "分类id")
|
||||
private String categoryId;
|
||||
|
||||
@ApiModelProperty(value = "分类名")
|
||||
private String categoryName;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1禁用")
|
||||
private Integer categoryStatus;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建人id")
|
||||
private String createId;
|
||||
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "修改人")
|
||||
private String updateName;
|
||||
|
||||
@ApiModelProperty(value = "修改人id")
|
||||
private String updateId;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
package com.dd.admin.business.category.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 分类
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("business_category")
|
||||
@ApiModel(value="Category对象", description="分类")
|
||||
public class Category implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "分类id")
|
||||
@TableId(value = "CATEGORY_ID", type = IdType.ASSIGN_UUID)
|
||||
private String categoryId;
|
||||
|
||||
@ApiModelProperty(value = "分类名")
|
||||
@TableField("CATEGORY_NAME")
|
||||
private String categoryName;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1禁用")
|
||||
@TableField("CATEGORY_STATUS")
|
||||
private Integer categoryStatus;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
@TableField(value = "SHOP_ID", fill = FieldFill.INSERT)
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
@TableField(value = "SHOP_NAME", fill = FieldFill.INSERT)
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
@TableField(value = "CREATE_NAME", fill = FieldFill.INSERT)
|
||||
private String createName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建人id")
|
||||
@TableField(value = "CREATE_ID", fill = FieldFill.INSERT)
|
||||
private String createId;
|
||||
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
@TableField(value = "UPDATE_TIME", fill = FieldFill.UPDATE)
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "修改人")
|
||||
@TableField(value = "UPDATE_NAME", fill = FieldFill.UPDATE)
|
||||
private String updateName;
|
||||
|
||||
@ApiModelProperty(value = "修改人id")
|
||||
@TableField(value = "UPDATE_ID", fill = FieldFill.UPDATE)
|
||||
private String updateId;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package com.dd.admin.business.category.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.dd.admin.business.category.entity.Category;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.dd.admin.business.category.domain.CategoryVo;
|
||||
import com.dd.admin.business.category.domain.CategoryDto;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 分类 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-22
|
||||
*/
|
||||
@Mapper
|
||||
public interface CategoryMapper extends BaseMapper<Category> {
|
||||
|
||||
IPage<CategoryVo> selectCategoryPage(Page<CategoryVo> page, @Param("categoryDto") CategoryDto categoryDto);
|
||||
|
||||
List<CategoryVo> selectCategoryList(@Param("categoryDto") CategoryDto categoryDto);
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
<?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="com.dd.admin.business.category.mapper.CategoryMapper">
|
||||
|
||||
<!-- 通用查询映射结果 -->
|
||||
<resultMap id="BaseResultMap" type="com.dd.admin.business.category.entity.Category">
|
||||
<id column="CATEGORY_ID" property="categoryId" />
|
||||
<result column="CATEGORY_NAME" property="categoryName" />
|
||||
<result column="CATEGORY_STATUS" property="categoryStatus" />
|
||||
<result column="SHOP_ID" property="shopId" />
|
||||
<result column="SHOP_NAME" property="shopName" />
|
||||
<result column="CREATE_NAME" property="createName" />
|
||||
<result column="CREATE_TIME" property="createTime" />
|
||||
<result column="CREATE_ID" property="createId" />
|
||||
<result column="UPDATE_TIME" property="updateTime" />
|
||||
<result column="UPDATE_NAME" property="updateName" />
|
||||
<result column="UPDATE_ID" property="updateId" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 通用查询结果列 -->
|
||||
<sql id="Base_Column_List">
|
||||
CATEGORY_ID, CATEGORY_NAME, CATEGORY_STATUS, SHOP_ID, SHOP_NAME, CREATE_NAME, CREATE_TIME, CREATE_ID, UPDATE_TIME, UPDATE_NAME, UPDATE_ID
|
||||
</sql>
|
||||
|
||||
<select id="selectCategoryPage" resultType="com.dd.admin.business.category.domain.CategoryVo">
|
||||
select
|
||||
*
|
||||
from business_category where 1 = 1
|
||||
<if test="categoryDto.keyword != null and categoryDto.keyword != ''">
|
||||
and CATEGORY_NAME like CONCAT('%', #{categoryDto.keyword}, '%')
|
||||
</if>
|
||||
|
||||
<if test="categoryDto.shopId != null and categoryDto.shopId != ''">
|
||||
and shop_id = #{categoryDto.shopId}
|
||||
</if>
|
||||
|
||||
<if test="categoryDto.categoryStatus != null ">
|
||||
and CATEGORY_STATUS = #{categoryDto.categoryStatus}
|
||||
</if>
|
||||
order by create_time desc
|
||||
</select>
|
||||
|
||||
<select id="selectCategoryList" resultType="com.dd.admin.business.category.domain.CategoryVo">
|
||||
select
|
||||
*
|
||||
from business_category where 1 = 1
|
||||
<if test="categoryDto.shopId != null and categoryDto.shopId != ''">
|
||||
and shop_id = #{categoryDto.shopId}
|
||||
</if>
|
||||
<if test="categoryDto.categoryStatus != null ">
|
||||
and CATEGORY_STATUS = #{categoryDto.categoryStatus}
|
||||
</if>
|
||||
order by create_time desc
|
||||
</select>
|
||||
</mapper>
|
@ -0,0 +1,26 @@
|
||||
package com.dd.admin.business.category.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.dd.admin.business.category.entity.Category;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.dd.admin.business.category.domain.CategoryVo;
|
||||
import com.dd.admin.business.category.domain.CategoryDto;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 分类 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-22
|
||||
*/
|
||||
public interface CategoryService extends IService<Category> {
|
||||
|
||||
//分类-分页列表
|
||||
IPage<CategoryVo> selectCategoryPage(CategoryDto categoryDto);
|
||||
|
||||
//分类-列表
|
||||
List<CategoryVo> selectCategoryList(CategoryDto categoryDto);
|
||||
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package com.dd.admin.business.category.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.dd.admin.common.model.PageFactory;
|
||||
import com.dd.admin.business.category.entity.Category;
|
||||
import com.dd.admin.business.category.mapper.CategoryMapper;
|
||||
import com.dd.admin.business.category.service.CategoryService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.dd.admin.business.category.domain.CategoryVo;
|
||||
import com.dd.admin.business.category.domain.CategoryDto;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 分类 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-22
|
||||
*/
|
||||
@Service
|
||||
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {
|
||||
|
||||
@Override
|
||||
public IPage<CategoryVo> selectCategoryPage(CategoryDto categoryDto) {
|
||||
Page page = PageFactory.defaultPage();
|
||||
return baseMapper.selectCategoryPage(page,categoryDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CategoryVo> selectCategoryList(CategoryDto categoryDto) {
|
||||
return baseMapper.selectCategoryList(categoryDto);
|
||||
}
|
||||
}
|
@ -0,0 +1,88 @@
|
||||
package com.dd.admin.business.detailServer.controller;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
import com.dd.admin.common.model.result.ResultBean;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import com.dd.admin.business.detailServer.entity.SellDetailServer;
|
||||
import com.dd.admin.business.detailServer.domain.SellDetailServerVo;
|
||||
import com.dd.admin.business.detailServer.domain.SellDetailServerDto;
|
||||
import com.dd.admin.business.detailServer.service.SellDetailServerService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单详单服务人员 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-11-28
|
||||
*/
|
||||
@Api(tags = "订单详单服务人员")
|
||||
@RestController
|
||||
public class SellDetailServerController {
|
||||
|
||||
@Autowired
|
||||
SellDetailServerService detailServerService;
|
||||
|
||||
@ApiOperation(value = "订单详单服务人员-分页列表")
|
||||
@ApiOperationSupport(order = 1)
|
||||
@GetMapping("/admin/detailServer/page")
|
||||
public ResultBean<IPage<SellDetailServerVo>> page(SellDetailServerDto detailServerDto) {
|
||||
IPage<SellDetailServerVo> pageInfo = detailServerService.selectSellDetailServerPage(detailServerDto);
|
||||
return ResultBean.success(pageInfo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "订单详单服务人员-列表")
|
||||
@ApiOperationSupport(order = 2)
|
||||
@GetMapping("/admin/detailServer/list")
|
||||
public ResultBean<List<SellDetailServerVo>> list(SellDetailServerDto detailServerDto) {
|
||||
List<SellDetailServerVo> list = detailServerService.selectSellDetailServerList(detailServerDto);
|
||||
return ResultBean.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "订单详单服务人员-添加")
|
||||
@ApiOperationSupport(order = 3)
|
||||
@PostMapping("/admin/detailServer/add")
|
||||
public ResultBean<SellDetailServer> add(@RequestBody @Validated SellDetailServerDto detailServerDto) {
|
||||
SellDetailServer detailServer = BeanUtil.copyProperties(detailServerDto, SellDetailServer.class);
|
||||
detailServerService.save(detailServer);
|
||||
return ResultBean.success(detailServer);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "订单详单服务人员-查询")
|
||||
@ApiOperationSupport(order = 4)
|
||||
@GetMapping("/admin/detailServer/{detailServerId}")
|
||||
public ResultBean<SellDetailServerVo> get(@PathVariable @NotBlank String detailServerId) {
|
||||
SellDetailServer detailServer = detailServerService.getById(detailServerId);
|
||||
SellDetailServerVo detailServerVo = BeanUtil.copyProperties(detailServer,SellDetailServerVo.class);
|
||||
return ResultBean.success(detailServerVo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "订单详单服务人员-修改")
|
||||
@ApiOperationSupport(order = 5)
|
||||
@PostMapping("/admin/detailServer/update")
|
||||
public ResultBean<SellDetailServer> update(@RequestBody @Validated(UpdateGroup.class) SellDetailServerDto detailServerDto) {
|
||||
SellDetailServer detailServer = BeanUtil.copyProperties(detailServerDto, SellDetailServer.class);
|
||||
detailServerService.updateById(detailServer);
|
||||
return ResultBean.success(detailServer);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "订单详单服务人员-删除")
|
||||
@ApiOperationSupport(order = 6)
|
||||
@GetMapping("/admin/detailServer/delete/{detailServerId}")
|
||||
public ResultBean<SellDetailServer> delete(@PathVariable @NotBlank String detailServerId) {
|
||||
Boolean b = detailServerService.removeById(detailServerId);
|
||||
return ResultBean.success(b);
|
||||
}
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
package com.dd.admin.business.detailServer.domain;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单详单服务人员返回对象
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-11-28
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value="订单详单服务人员接收对象")
|
||||
public class SellDetailServerDto {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "详单对应服务人员记录id")
|
||||
@NotBlank(message = "订单详单服务人员id不能为空",groups = UpdateGroup.class)
|
||||
private String detailServerId;
|
||||
|
||||
@ApiModelProperty(value = "订单id")
|
||||
private String sellId;
|
||||
|
||||
@ApiModelProperty(value = "详单id")
|
||||
private String sellDetailId;
|
||||
|
||||
@ApiModelProperty(value = "服务人员")
|
||||
private String serverId;
|
||||
|
||||
@ApiModelProperty(value = "服务人员")
|
||||
private String serverName;
|
||||
|
||||
@ApiModelProperty(value = "提成")
|
||||
private BigDecimal serverPushMoney;
|
||||
|
||||
@ApiModelProperty(value = "业绩")
|
||||
private BigDecimal serverGrade;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建人id")
|
||||
private String createId;
|
||||
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "修改人")
|
||||
private String updateName;
|
||||
|
||||
@ApiModelProperty(value = "修改人id")
|
||||
private String updateId;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,79 @@
|
||||
package com.dd.admin.business.detailServer.domain;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单详单服务人员返回对象
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-11-28
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value="订单详单服务人员返回对象")
|
||||
public class SellDetailServerVo {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "详单对应服务人员记录id")
|
||||
private String detailServerId;
|
||||
|
||||
@ApiModelProperty(value = "订单id")
|
||||
private String sellId;
|
||||
|
||||
@ApiModelProperty(value = "详单id")
|
||||
private String sellDetailId;
|
||||
|
||||
@ApiModelProperty(value = "服务人员")
|
||||
private String serverId;
|
||||
|
||||
@ApiModelProperty(value = "服务人员")
|
||||
private String serverName;
|
||||
|
||||
@ApiModelProperty(value = "提成")
|
||||
private BigDecimal serverPushMoney;
|
||||
|
||||
@ApiModelProperty(value = "业绩")
|
||||
private BigDecimal serverGrade;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建人id")
|
||||
private String createId;
|
||||
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "修改人")
|
||||
private String updateName;
|
||||
|
||||
@ApiModelProperty(value = "修改人id")
|
||||
private String updateId;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
package com.dd.admin.business.detailServer.entity;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单详单服务人员
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-11-28
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("business_sell_detail_server")
|
||||
@ApiModel(value="SellDetailServer对象", description="订单详单服务人员")
|
||||
public class SellDetailServer implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "详单对应服务人员记录id")
|
||||
@TableId(value = "DETAIL_SERVER_ID", type = IdType.ASSIGN_UUID)
|
||||
private String detailServerId;
|
||||
|
||||
@ApiModelProperty(value = "订单id")
|
||||
@TableField("SELL_ID")
|
||||
private String sellId;
|
||||
|
||||
@ApiModelProperty(value = "详单id")
|
||||
@TableField("SELL_DETAIL_ID")
|
||||
private String sellDetailId;
|
||||
|
||||
@ApiModelProperty(value = "服务人员")
|
||||
@TableField("SERVER_ID")
|
||||
private String serverId;
|
||||
|
||||
@ApiModelProperty(value = "服务人员")
|
||||
@TableField("SERVER_NAME")
|
||||
private String serverName;
|
||||
|
||||
@ApiModelProperty(value = "提成")
|
||||
@TableField("SERVER_PUSH_MONEY")
|
||||
private BigDecimal serverPushMoney;
|
||||
|
||||
@ApiModelProperty(value = "业绩")
|
||||
@TableField("SERVER_GRADE")
|
||||
private BigDecimal serverGrade;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
@TableField(value = "SHOP_ID", fill = FieldFill.INSERT)
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
@TableField(value = "SHOP_NAME", fill = FieldFill.INSERT)
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
@TableField(value = "CREATE_NAME", fill = FieldFill.INSERT)
|
||||
private String createName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建人id")
|
||||
@TableField(value = "CREATE_ID", fill = FieldFill.INSERT)
|
||||
private String createId;
|
||||
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
@TableField(value = "UPDATE_TIME", fill = FieldFill.UPDATE)
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "修改人")
|
||||
@TableField(value = "UPDATE_NAME", fill = FieldFill.UPDATE)
|
||||
private String updateName;
|
||||
|
||||
@ApiModelProperty(value = "修改人id")
|
||||
@TableField(value = "UPDATE_ID", fill = FieldFill.UPDATE)
|
||||
private String updateId;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
@TableField("REMARK")
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package com.dd.admin.business.detailServer.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.dd.admin.business.detailServer.entity.SellDetailServer;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.dd.admin.business.detailServer.domain.SellDetailServerVo;
|
||||
import com.dd.admin.business.detailServer.domain.SellDetailServerDto;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单详单服务人员 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-11-28
|
||||
*/
|
||||
@Mapper
|
||||
public interface SellDetailServerMapper extends BaseMapper<SellDetailServer> {
|
||||
|
||||
IPage<SellDetailServerVo> selectSellDetailServerPage(Page<SellDetailServerVo> page, @Param("detailServerDto") SellDetailServerDto detailServerDto);
|
||||
|
||||
List<SellDetailServerVo> selectSellDetailServerList(@Param("detailServerDto") SellDetailServerDto detailServerDto);
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
<?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="com.dd.admin.business.detailServer.mapper.SellDetailServerMapper">
|
||||
|
||||
<!-- 通用查询映射结果 -->
|
||||
<resultMap id="BaseResultMap" type="com.dd.admin.business.detailServer.entity.SellDetailServer">
|
||||
<id column="DETAIL_SERVER_ID" property="detailServerId" />
|
||||
<result column="SELL_ID" property="sellId" />
|
||||
<result column="SELL_DETAIL_ID" property="sellDetailId" />
|
||||
<result column="SERVER_ID" property="serverId" />
|
||||
<result column="SERVER_NAME" property="serverName" />
|
||||
<result column="SERVER_PUSH_MONEY" property="serverPushMoney" />
|
||||
<result column="SERVER_GRADE" property="serverGrade" />
|
||||
<result column="SHOP_ID" property="shopId" />
|
||||
<result column="SHOP_NAME" property="shopName" />
|
||||
<result column="CREATE_NAME" property="createName" />
|
||||
<result column="CREATE_TIME" property="createTime" />
|
||||
<result column="CREATE_ID" property="createId" />
|
||||
<result column="UPDATE_TIME" property="updateTime" />
|
||||
<result column="UPDATE_NAME" property="updateName" />
|
||||
<result column="UPDATE_ID" property="updateId" />
|
||||
<result column="REMARK" property="remark" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 通用查询结果列 -->
|
||||
<sql id="Base_Column_List">
|
||||
DETAIL_SERVER_ID, SELL_ID, SELL_DETAIL_ID, SERVER_ID, SERVER_NAME, SERVER_PUSH_MONEY, SERVER_GRADE, SHOP_ID, SHOP_NAME, CREATE_NAME, CREATE_TIME, CREATE_ID, UPDATE_TIME, UPDATE_NAME, UPDATE_ID, REMARK
|
||||
</sql>
|
||||
|
||||
<select id="selectSellDetailServerPage" resultType="com.dd.admin.business.detailServer.domain.SellDetailServerVo">
|
||||
select
|
||||
*
|
||||
from business_sell_detail_server where 1 = 1
|
||||
</select>
|
||||
|
||||
<select id="selectSellDetailServerList" resultType="com.dd.admin.business.detailServer.domain.SellDetailServerVo">
|
||||
select
|
||||
*
|
||||
from business_sell_detail_server where 1 = 1
|
||||
</select>
|
||||
</mapper>
|
@ -0,0 +1,31 @@
|
||||
package com.dd.admin.business.detailServer.service;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.dd.admin.business.detailServer.entity.SellDetailServer;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.dd.admin.business.detailServer.domain.SellDetailServerVo;
|
||||
import com.dd.admin.business.detailServer.domain.SellDetailServerDto;
|
||||
import com.dd.admin.business.sellDetail.entity.SellDetail;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单详单服务人员 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-11-28
|
||||
*/
|
||||
public interface SellDetailServerService extends IService<SellDetailServer> {
|
||||
|
||||
//订单详单服务人员-分页列表
|
||||
IPage<SellDetailServerVo> selectSellDetailServerPage(SellDetailServerDto detailServerDto);
|
||||
|
||||
//订单详单服务人员-列表
|
||||
List<SellDetailServerVo> selectSellDetailServerList(SellDetailServerDto detailServerDto);
|
||||
|
||||
List<SellDetailServer> selectSellDetailServerListBySellDetailIds(List<String> sellDetailIds);
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package com.dd.admin.business.detailServer.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.dd.admin.business.sellDetail.entity.SellDetail;
|
||||
import com.dd.admin.common.model.PageFactory;
|
||||
import com.dd.admin.business.detailServer.entity.SellDetailServer;
|
||||
import com.dd.admin.business.detailServer.mapper.SellDetailServerMapper;
|
||||
import com.dd.admin.business.detailServer.service.SellDetailServerService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.dd.admin.business.detailServer.domain.SellDetailServerVo;
|
||||
import com.dd.admin.business.detailServer.domain.SellDetailServerDto;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 订单详单服务人员 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-11-28
|
||||
*/
|
||||
@Service
|
||||
public class SellDetailServerServiceImpl extends ServiceImpl<SellDetailServerMapper, SellDetailServer> implements SellDetailServerService {
|
||||
|
||||
@Override
|
||||
public IPage<SellDetailServerVo> selectSellDetailServerPage(SellDetailServerDto detailServerDto) {
|
||||
Page page = PageFactory.defaultPage();
|
||||
return baseMapper.selectSellDetailServerPage(page,detailServerDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SellDetailServerVo> selectSellDetailServerList(SellDetailServerDto detailServerDto) {
|
||||
return baseMapper.selectSellDetailServerList(detailServerDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SellDetailServer> selectSellDetailServerListBySellDetailIds(List<String> sellDetailIds) {
|
||||
LambdaQueryWrapper<SellDetailServer> selldetailQueryWrapper = new LambdaQueryWrapper<>();
|
||||
if(CollectionUtil.isNotEmpty(sellDetailIds)){
|
||||
selldetailQueryWrapper.in(SellDetailServer::getSellDetailId, sellDetailIds);
|
||||
}
|
||||
List<SellDetailServer> sellDetailList = this.list(selldetailQueryWrapper);
|
||||
return sellDetailList;
|
||||
}
|
||||
}
|
@ -0,0 +1,104 @@
|
||||
package com.dd.admin.business.file.controller;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
import com.dd.admin.common.model.result.ResultBean;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import com.dd.admin.business.file.entity.File;
|
||||
import com.dd.admin.business.file.domain.FileVo;
|
||||
import com.dd.admin.business.file.domain.FileDto;
|
||||
import com.dd.admin.business.file.service.FileService;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 文件 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-23
|
||||
*/
|
||||
@Api(tags = "文件")
|
||||
@RestController
|
||||
public class FileController {
|
||||
|
||||
@Autowired
|
||||
FileService fileService;
|
||||
|
||||
@ApiOperation(value = "文件-分页列表")
|
||||
@ApiOperationSupport(order = 1)
|
||||
@GetMapping("/admin/file/page")
|
||||
public ResultBean<IPage<FileVo>> page(FileDto fileDto) {
|
||||
IPage<FileVo> pageInfo = fileService.selectFilePage(fileDto);
|
||||
|
||||
return ResultBean.success(pageInfo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "文件-列表")
|
||||
@ApiOperationSupport(order = 2)
|
||||
@GetMapping("/admin/file/list")
|
||||
public ResultBean<List<FileVo>> list(FileDto fileDto) {
|
||||
List<FileVo> list = fileService.selectFileList(fileDto);
|
||||
return ResultBean.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "文件-添加")
|
||||
@ApiOperationSupport(order = 3)
|
||||
@PostMapping("/admin/file/add")
|
||||
public ResultBean<File> add(@RequestBody @Validated FileDto fileDto) {
|
||||
File file = BeanUtil.copyProperties(fileDto, File.class);
|
||||
fileService.save(file);
|
||||
return ResultBean.success(file);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "文件-查询")
|
||||
@ApiOperationSupport(order = 4)
|
||||
@GetMapping("/admin/file/{fileId}")
|
||||
public ResultBean<FileVo> get(@PathVariable @NotBlank String fileId) {
|
||||
File file = fileService.getById(fileId);
|
||||
FileVo fileVo = BeanUtil.copyProperties(file,FileVo.class);
|
||||
return ResultBean.success(fileVo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "文件-修改")
|
||||
@ApiOperationSupport(order = 5)
|
||||
@PostMapping("/admin/file/update")
|
||||
public ResultBean<File> update(@RequestBody @Validated(UpdateGroup.class) FileDto fileDto) {
|
||||
File file = BeanUtil.copyProperties(fileDto, File.class);
|
||||
fileService.updateById(file);
|
||||
return ResultBean.success(file);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "文件-删除")
|
||||
@ApiOperationSupport(order = 6)
|
||||
@GetMapping("/admin/file/delete/{fileId}")
|
||||
public ResultBean<File> delete(@PathVariable @NotBlank String fileId) {
|
||||
Boolean b = fileService.removeById(fileId);
|
||||
return ResultBean.success(b);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "文件-上传")
|
||||
@PostMapping("/upload")
|
||||
@ResponseBody
|
||||
public ResultBean layuiUpload(@RequestPart("file") MultipartFile file, String fileSavePath) {
|
||||
FileVo uploadResult = fileService.uploadFile(file,fileSavePath);
|
||||
String fileId = uploadResult.getFileId();
|
||||
String filePath = uploadResult.getFileSavePath();
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
map.put("fileId", fileId);
|
||||
map.put("filePath",filePath);
|
||||
return ResultBean.success(map);
|
||||
}
|
||||
}
|
67
src/main/java/com/dd/admin/business/file/domain/FileDto.java
Normal file
@ -0,0 +1,67 @@
|
||||
package com.dd.admin.business.file.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 文件返回对象
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-23
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value="文件接收对象")
|
||||
public class FileDto {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "文件id")
|
||||
@NotBlank(message = "文件id不能为空",groups = UpdateGroup.class)
|
||||
private String fileId;
|
||||
|
||||
@ApiModelProperty(value = "上级id")
|
||||
private String parentId;
|
||||
|
||||
@ApiModelProperty(value = "文件仓库(oss仓库)")
|
||||
private String fileBucket;
|
||||
|
||||
@ApiModelProperty(value = "文件名称")
|
||||
private String fileName;
|
||||
|
||||
@ApiModelProperty(value = "文件后缀")
|
||||
private String fileSuffix;
|
||||
|
||||
@ApiModelProperty(value = "文件大小kb")
|
||||
private Long fileSizeKb;
|
||||
|
||||
@ApiModelProperty(value = "文件唯一标识id")
|
||||
private String finalName;
|
||||
|
||||
@ApiModelProperty(value = "存储路径")
|
||||
private String filePath;
|
||||
|
||||
@ApiModelProperty(value = "0文件夹 1文件")
|
||||
private Integer fileType;
|
||||
|
||||
@ApiModelProperty(value = "存放的系统路径")
|
||||
private String fileSysPath;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
|
||||
}
|
64
src/main/java/com/dd/admin/business/file/domain/FileVo.java
Normal file
@ -0,0 +1,64 @@
|
||||
package com.dd.admin.business.file.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 文件返回对象
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-23
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value="文件返回对象")
|
||||
public class FileVo {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "文件id")
|
||||
private String fileId;
|
||||
|
||||
@ApiModelProperty(value = "上级id")
|
||||
private String parentId;
|
||||
|
||||
@ApiModelProperty(value = "文件仓库(oss仓库)")
|
||||
private String fileBucket;
|
||||
|
||||
@ApiModelProperty(value = "文件名称")
|
||||
private String fileName;
|
||||
|
||||
@ApiModelProperty(value = "文件后缀")
|
||||
private String fileSuffix;
|
||||
|
||||
@ApiModelProperty(value = "文件大小kb")
|
||||
private Long fileSizeKb;
|
||||
|
||||
@ApiModelProperty(value = "文件唯一标识id")
|
||||
private String finalName;
|
||||
|
||||
@ApiModelProperty(value = "存储路径")
|
||||
private String filePath;
|
||||
|
||||
@ApiModelProperty(value = "0文件夹 1文件")
|
||||
private Integer fileType;
|
||||
|
||||
@ApiModelProperty(value = "存放的系统路径")
|
||||
private String fileSysPath;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
private String originalFilename;
|
||||
private String fileSavePath;
|
||||
}
|
77
src/main/java/com/dd/admin/business/file/entity/File.java
Normal file
@ -0,0 +1,77 @@
|
||||
package com.dd.admin.business.file.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 文件
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-23
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("business_file")
|
||||
@ApiModel(value="File对象", description="文件")
|
||||
public class File implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "文件id")
|
||||
@TableId(value = "FILE_ID", type = IdType.ASSIGN_UUID)
|
||||
private String fileId;
|
||||
|
||||
@ApiModelProperty(value = "上级id")
|
||||
@TableField("PARENT_ID")
|
||||
private String parentId;
|
||||
|
||||
@ApiModelProperty(value = "文件仓库(oss仓库)")
|
||||
@TableField("FILE_BUCKET")
|
||||
private String fileBucket;
|
||||
|
||||
@ApiModelProperty(value = "文件名称")
|
||||
@TableField("FILE_NAME")
|
||||
private String fileName;
|
||||
|
||||
@ApiModelProperty(value = "文件后缀")
|
||||
@TableField("FILE_SUFFIX")
|
||||
private String fileSuffix;
|
||||
|
||||
@ApiModelProperty(value = "文件大小kb")
|
||||
@TableField("FILE_SIZE_KB")
|
||||
private Long fileSizeKb;
|
||||
|
||||
@ApiModelProperty(value = "文件唯一标识id")
|
||||
@TableField("FINAL_NAME")
|
||||
private String finalName;
|
||||
|
||||
@ApiModelProperty(value = "存储路径")
|
||||
@TableField("FILE_PATH")
|
||||
private String filePath;
|
||||
|
||||
@ApiModelProperty(value = "0文件夹 1文件")
|
||||
@TableField("FILE_TYPE")
|
||||
private Integer fileType;
|
||||
|
||||
@ApiModelProperty(value = "存放的系统路径")
|
||||
@TableField("FILE_SYS_PATH")
|
||||
private String fileSysPath;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@TableField(value = "CREATE_TIME")
|
||||
private Date createTime;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package com.dd.admin.business.file.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.dd.admin.business.file.entity.File;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.dd.admin.business.file.domain.FileVo;
|
||||
import com.dd.admin.business.file.domain.FileDto;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 文件 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-23
|
||||
*/
|
||||
@Mapper
|
||||
public interface FileMapper extends BaseMapper<File> {
|
||||
|
||||
IPage<FileVo> selectFilePage(Page<FileVo> page, @Param("fileDto") FileDto fileDto);
|
||||
|
||||
List<FileVo> selectFileList(@Param("fileDto") FileDto fileDto);
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
<?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="com.dd.admin.business.file.mapper.FileMapper">
|
||||
|
||||
<!-- 通用查询映射结果 -->
|
||||
<resultMap id="BaseResultMap" type="com.dd.admin.business.file.entity.File">
|
||||
<id column="FILE_ID" property="fileId" />
|
||||
<result column="PARENT_ID" property="parentId" />
|
||||
<result column="FILE_BUCKET" property="fileBucket" />
|
||||
<result column="FILE_NAME" property="fileName" />
|
||||
<result column="FILE_SUFFIX" property="fileSuffix" />
|
||||
<result column="FILE_SIZE_KB" property="fileSizeKb" />
|
||||
<result column="FINAL_NAME" property="finalName" />
|
||||
<result column="FILE_PATH" property="filePath" />
|
||||
<result column="FILE_TYPE" property="fileType" />
|
||||
<result column="FILE_SYS_PATH" property="fileSysPath" />
|
||||
<result column="CREATE_TIME" property="createTime" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 通用查询结果列 -->
|
||||
<sql id="Base_Column_List">
|
||||
FILE_ID, PARENT_ID, FILE_BUCKET, FILE_NAME, FILE_SUFFIX, FILE_SIZE_KB, FINAL_NAME, FILE_PATH, FILE_TYPE, FILE_SYS_PATH, CREATE_TIME
|
||||
</sql>
|
||||
|
||||
<select id="selectFilePage" resultType="com.dd.admin.business.file.domain.FileVo">
|
||||
select
|
||||
*
|
||||
from business_file where 1 = 1
|
||||
</select>
|
||||
|
||||
<select id="selectFileList" resultType="com.dd.admin.business.file.domain.FileVo">
|
||||
select
|
||||
*
|
||||
from business_file where 1 = 1
|
||||
</select>
|
||||
</mapper>
|
@ -0,0 +1,33 @@
|
||||
package com.dd.admin.business.file.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.dd.admin.business.file.entity.File;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.dd.admin.business.file.domain.FileVo;
|
||||
import com.dd.admin.business.file.domain.FileDto;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 文件 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-23
|
||||
*/
|
||||
public interface FileService extends IService<File> {
|
||||
|
||||
//文件-分页列表
|
||||
IPage<FileVo> selectFilePage(FileDto fileDto);
|
||||
|
||||
//文件-列表
|
||||
List<FileVo> selectFileList(FileDto fileDto);
|
||||
|
||||
//文件-上传
|
||||
public FileVo uploadFile(MultipartFile file, String fileSavePath);
|
||||
|
||||
//传入文件id获取文件真实地址
|
||||
public String getFileAuthUrl(String fileId);
|
||||
}
|
@ -0,0 +1,139 @@
|
||||
package com.dd.admin.business.file.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.dd.admin.common.exception.ApiException;
|
||||
import com.dd.admin.common.model.PageFactory;
|
||||
import com.dd.admin.business.file.entity.File;
|
||||
import com.dd.admin.business.file.mapper.FileMapper;
|
||||
import com.dd.admin.business.file.service.FileService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.dd.admin.common.utils.ToolUtil;
|
||||
import org.apache.tomcat.jni.FileInfo;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.dd.admin.business.file.domain.FileVo;
|
||||
import com.dd.admin.business.file.domain.FileDto;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 文件 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-23
|
||||
*/
|
||||
@Service
|
||||
public class FileServiceImpl extends ServiceImpl<FileMapper, File> implements FileService {
|
||||
|
||||
@Value("${dd.uploadPath}")
|
||||
private String uploadPath;
|
||||
|
||||
@Override
|
||||
public IPage<FileVo> selectFilePage(FileDto fileDto) {
|
||||
Page page = PageFactory.defaultPage();
|
||||
return baseMapper.selectFilePage(page,fileDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FileVo> selectFileList(FileDto fileDto) {
|
||||
return baseMapper.selectFileList(fileDto);
|
||||
}
|
||||
|
||||
public String getSysUploadPath(){
|
||||
java.io.File filepath = new java.io.File(uploadPath);
|
||||
//该目录不存在 则创建
|
||||
if (!filepath.exists()) {
|
||||
boolean mkdirs = filepath.mkdirs();
|
||||
}
|
||||
return uploadPath;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public FileVo uploadFile(MultipartFile file, String fileSavePath) {
|
||||
//需要返回的对象
|
||||
FileVo fileVo = new FileVo();
|
||||
|
||||
//生成文件的唯一id
|
||||
String fileId = IdWorker.get32UUID();
|
||||
fileVo.setFileId(fileId);
|
||||
|
||||
//获取文件后缀
|
||||
String fileSuffix = ToolUtil.getFileSuffix(file.getOriginalFilename());
|
||||
fileVo.setFileSuffix(fileSuffix);
|
||||
|
||||
//获取文件原始名称
|
||||
String originalFilename = file.getOriginalFilename();
|
||||
fileVo.setOriginalFilename(originalFilename);
|
||||
|
||||
//生成文件的最终名称
|
||||
String finalName = fileId + "." + ToolUtil.getFileSuffix(originalFilename);
|
||||
fileVo.setFinalName(finalName);
|
||||
fileVo.setFileSavePath(fileSavePath + finalName);
|
||||
|
||||
String sysUploadPath = getSysUploadPath();
|
||||
|
||||
String newFileSavePath = "";
|
||||
|
||||
//判断有没有结尾符,没有得加上
|
||||
if (!fileSavePath.endsWith(java.io.File.separator)) {
|
||||
newFileSavePath = fileSavePath + java.io.File.separator;
|
||||
}
|
||||
|
||||
try {
|
||||
java.io.File filepath = new java.io.File(sysUploadPath + newFileSavePath );
|
||||
//该目录不存在 则创建
|
||||
if (!filepath.exists()) {
|
||||
boolean mkdirs = filepath.mkdirs();
|
||||
}
|
||||
System.out.println(filepath.getAbsolutePath());
|
||||
System.out.println(filepath.getPath());
|
||||
|
||||
//保存文件到指定目录
|
||||
java.io.File newFile = new java.io.File(sysUploadPath + newFileSavePath + finalName);
|
||||
file.transferTo(newFile);
|
||||
|
||||
File fileInfo = new File();
|
||||
//保存文件信息
|
||||
fileInfo.setFileId(fileId);
|
||||
fileInfo.setFileName(originalFilename);
|
||||
fileInfo.setFileSuffix(fileSuffix);
|
||||
|
||||
fileInfo.setFilePath("/upload/" + fileSavePath + "/" + finalName);
|
||||
|
||||
fileVo.setFileSavePath(fileInfo.getFilePath());
|
||||
fileInfo.setFinalName(finalName);
|
||||
|
||||
//计算文件大小kb
|
||||
long kb = new BigDecimal(file.getSize())
|
||||
.divide(BigDecimal.valueOf(1024))
|
||||
.setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
|
||||
fileInfo.setFileSizeKb(kb);
|
||||
fileInfo.setFileSysPath(newFile.getAbsolutePath());
|
||||
|
||||
save(fileInfo);
|
||||
} catch (Exception e) {
|
||||
log.error("上传文件错误!", e);
|
||||
throw new ApiException("上传文件错误!");
|
||||
}
|
||||
return fileVo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFileAuthUrl(String fileId) {
|
||||
File file = getById(fileId);
|
||||
if(file!=null){
|
||||
return file.getFilePath();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,118 @@
|
||||
package com.dd.admin.business.member.controller;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.dd.admin.common.aop.operationLog.aop.OperLog;
|
||||
import com.dd.admin.common.aop.operationLog.aop.OperType;
|
||||
import com.dd.admin.common.exception.ApiException;
|
||||
import com.dd.admin.common.security.SecurityUtil;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
import com.dd.admin.common.model.result.ResultBean;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import com.dd.admin.business.member.entity.Member;
|
||||
import com.dd.admin.business.member.domain.MemberVo;
|
||||
import com.dd.admin.business.member.domain.MemberDto;
|
||||
import com.dd.admin.business.member.service.MemberService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import static com.dd.admin.business.pay.enmus.CashierExceptionEnum.MEMBER_ALREADY_BUILD;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 会员 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-21
|
||||
*/
|
||||
@Api(tags = "会员")
|
||||
@RestController
|
||||
public class MemberController {
|
||||
|
||||
@Autowired
|
||||
MemberService memberService;
|
||||
|
||||
@ApiOperation(value = "会员-分页列表")
|
||||
@ApiOperationSupport(order = 1)
|
||||
@GetMapping("/admin/member/page")
|
||||
public ResultBean<IPage<MemberVo>> page(MemberDto memberDto) {
|
||||
memberDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
|
||||
IPage<MemberVo> pageInfo = memberService.selectMemberPage(memberDto);
|
||||
return ResultBean.success(pageInfo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "会员-列表")
|
||||
@ApiOperationSupport(order = 2)
|
||||
@GetMapping("/admin/member/list")
|
||||
public ResultBean<List<MemberVo>> list(MemberDto memberDto) {
|
||||
memberDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
|
||||
List<MemberVo> list = memberService.selectMemberList(memberDto);
|
||||
return ResultBean.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "会员-列表")
|
||||
@ApiOperationSupport(order = 2)
|
||||
@GetMapping("/admin/member/searchList")
|
||||
@OperLog(operModule = "会员查询",operType = OperType.QUERY,operDesc = "会员查询")
|
||||
public ResultBean<List<MemberVo>> searchList(MemberDto memberDto) {
|
||||
memberDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
|
||||
memberDto.setLimit(10);
|
||||
List<MemberVo> list = memberService.selectMemberList(memberDto);
|
||||
return ResultBean.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "会员-添加")
|
||||
@ApiOperationSupport(order = 3)
|
||||
@PostMapping("/admin/member/add")
|
||||
@OperLog(operModule = "添加会员",operType = OperType.ADD,operDesc = "添加会员")
|
||||
public ResultBean<Member> add(@RequestBody @Validated MemberDto memberDto) {
|
||||
// 先根据手机号查询是否已存在会员
|
||||
LambdaQueryWrapper<Member> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(Member::getMemberPhone, memberDto.getMemberPhone());
|
||||
Member existingMembers = memberService.getOne(queryWrapper);
|
||||
if (existingMembers != null) {
|
||||
// 如果存在,则返回错误信息,表示手机号已被注册
|
||||
throw new ApiException(MEMBER_ALREADY_BUILD);
|
||||
}
|
||||
Member member = BeanUtil.copyProperties(memberDto, Member.class);
|
||||
memberService.save(member);
|
||||
return ResultBean.success(member);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "会员-查询")
|
||||
@ApiOperationSupport(order = 4)
|
||||
@GetMapping("/admin/member/{memberId}")
|
||||
public ResultBean<MemberVo> get(@PathVariable @NotBlank String memberId) {
|
||||
Member member = memberService.getById(memberId);
|
||||
MemberVo memberVo = BeanUtil.copyProperties(member,MemberVo.class);
|
||||
return ResultBean.success(memberVo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "会员-修改")
|
||||
@ApiOperationSupport(order = 5)
|
||||
@PostMapping("/admin/member/update")
|
||||
public ResultBean<Member> update(@RequestBody @Validated(UpdateGroup.class) MemberDto memberDto) {
|
||||
Member member = BeanUtil.copyProperties(memberDto, Member.class);
|
||||
memberService.updateById(member);
|
||||
return ResultBean.success(member);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "会员-删除")
|
||||
@ApiOperationSupport(order = 6)
|
||||
@GetMapping("/admin/member/delete/{memberId}")
|
||||
public ResultBean<Member> delete(@PathVariable @NotBlank String memberId) {
|
||||
Boolean b = memberService.removeById(memberId);
|
||||
return ResultBean.success(b);
|
||||
}
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
package com.dd.admin.business.member.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 会员返回对象
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-21
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value="会员接收对象")
|
||||
public class MemberDto {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "会员表id")
|
||||
@NotBlank(message = "会员id不能为空",groups = UpdateGroup.class)
|
||||
private String memberId;
|
||||
|
||||
@ApiModelProperty(value = "会员姓名")
|
||||
private String memberName;
|
||||
|
||||
@ApiModelProperty(value = "手机号")
|
||||
private String memberPhone;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty(value = "消费密码")
|
||||
private String payPassword;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "会员姓名")
|
||||
private String querySearch;
|
||||
|
||||
@ApiModelProperty(value = "条数")
|
||||
private Integer limit;
|
||||
|
||||
@ApiModelProperty(value = "搜索会员关键字")
|
||||
private String keyword;
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package com.dd.admin.business.member.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 会员返回对象
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-21
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value="会员返回对象")
|
||||
public class MemberVo {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "会员表id")
|
||||
private String memberId;
|
||||
|
||||
@ApiModelProperty(value = "会员姓名")
|
||||
private String memberName;
|
||||
|
||||
@ApiModelProperty(value = "手机号")
|
||||
private String memberPhone;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty(value = "消费密码")
|
||||
private String payPassword;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
package com.dd.admin.business.member.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 会员
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-21
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("business_member")
|
||||
@ApiModel(value="Member对象", description="会员")
|
||||
public class Member implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "会员表id")
|
||||
@TableId(value = "MEMBER_ID", type = IdType.ASSIGN_UUID)
|
||||
private String memberId;
|
||||
|
||||
@ApiModelProperty(value = "会员姓名")
|
||||
@TableField("MEMBER_NAME")
|
||||
private String memberName;
|
||||
|
||||
@ApiModelProperty(value = "手机号")
|
||||
@TableField("MEMBER_PHONE")
|
||||
private String memberPhone;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
@TableField("REMARK")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty(value = "消费密码")
|
||||
@TableField("PAY_PASSWORD")
|
||||
private String payPassword;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
@TableField(value = "SHOP_NAME", fill = FieldFill.INSERT)
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
@TableField(value = "SHOP_ID", fill = FieldFill.INSERT)
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package com.dd.admin.business.member.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.dd.admin.business.member.entity.Member;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.dd.admin.business.member.domain.MemberVo;
|
||||
import com.dd.admin.business.member.domain.MemberDto;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 会员 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-21
|
||||
*/
|
||||
@Mapper
|
||||
public interface MemberMapper extends BaseMapper<Member> {
|
||||
|
||||
IPage<MemberVo> selectMemberPage(Page<MemberVo> page, @Param("memberDto") MemberDto memberDto);
|
||||
|
||||
List<MemberVo> selectMemberList(@Param("memberDto") MemberDto memberDto);
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
<?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="com.dd.admin.business.member.mapper.MemberMapper">
|
||||
|
||||
<!-- 通用查询映射结果 -->
|
||||
<resultMap id="BaseResultMap" type="com.dd.admin.business.member.entity.Member">
|
||||
<id column="MEMBER_ID" property="memberId" />
|
||||
<result column="MEMBER_NAME" property="memberName" />
|
||||
<result column="MEMBER_PHONE" property="memberPhone" />
|
||||
<result column="REMARK" property="remark" />
|
||||
<result column="PAY_PASSWORD" property="payPassword" />
|
||||
<result column="SHOP_NAME" property="shopName" />
|
||||
<result column="SHOP_ID" property="shopId" />
|
||||
<result column="CREATE_TIME" property="createTime" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 通用查询结果列 -->
|
||||
<sql id="Base_Column_List">
|
||||
MEMBER_ID, MEMBER_NAME, MEMBER_PHONE, REMARK, PAY_PASSWORD, SHOP_NAME, SHOP_ID, CREATE_TIME
|
||||
</sql>
|
||||
|
||||
<select id="selectMemberPage" resultType="com.dd.admin.business.member.domain.MemberVo">
|
||||
select
|
||||
*
|
||||
from business_member where 1 = 1
|
||||
<if test="memberDto.keyword != null and memberDto.keyword != ''">
|
||||
and (member_name like CONCAT('%', #{memberDto.keyword}, '%')
|
||||
or member_phone like concat('%',#{memberDto.keyword},'%'))
|
||||
</if>
|
||||
|
||||
<if test="memberDto.shopId != null and memberDto.shopId != ''">
|
||||
and shop_id = #{memberDto.shopId}
|
||||
</if>
|
||||
|
||||
order by create_time desc
|
||||
</select>
|
||||
|
||||
<select id="selectMemberList" resultType="com.dd.admin.business.member.domain.MemberVo">
|
||||
select
|
||||
*
|
||||
from business_member where 1 = 1
|
||||
<if test="memberDto.querySearch != null and memberDto.querySearch != ''">
|
||||
and (member_name like CONCAT('%', #{memberDto.querySearch}, '%')
|
||||
or member_phone like concat('%',#{memberDto.querySearch},'%'))
|
||||
</if>
|
||||
|
||||
<if test="memberDto.shopId != null and memberDto.shopId != ''">
|
||||
and shop_id = #{memberDto.shopId}
|
||||
</if>
|
||||
|
||||
order by create_time desc
|
||||
|
||||
<if test="memberDto.limit != null">
|
||||
limit #{memberDto.limit}
|
||||
</if>
|
||||
</select>
|
||||
</mapper>
|
@ -0,0 +1,27 @@
|
||||
package com.dd.admin.business.member.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.dd.admin.business.member.entity.Member;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.dd.admin.business.member.domain.MemberVo;
|
||||
import com.dd.admin.business.member.domain.MemberDto;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 会员 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-21
|
||||
*/
|
||||
public interface MemberService extends IService<Member> {
|
||||
|
||||
//会员-分页列表
|
||||
IPage<MemberVo> selectMemberPage(MemberDto memberDto);
|
||||
|
||||
//会员-列表
|
||||
List<MemberVo> selectMemberList(MemberDto memberDto);
|
||||
|
||||
Integer selectMemberCount(String shopId);
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package com.dd.admin.business.member.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.dd.admin.common.model.PageFactory;
|
||||
import com.dd.admin.business.member.entity.Member;
|
||||
import com.dd.admin.business.member.mapper.MemberMapper;
|
||||
import com.dd.admin.business.member.service.MemberService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.dd.admin.business.member.domain.MemberVo;
|
||||
import com.dd.admin.business.member.domain.MemberDto;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 会员 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-21
|
||||
*/
|
||||
@Service
|
||||
public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService {
|
||||
|
||||
@Override
|
||||
public IPage<MemberVo> selectMemberPage(MemberDto memberDto) {
|
||||
Page page = PageFactory.defaultPage();
|
||||
return baseMapper.selectMemberPage(page,memberDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MemberVo> selectMemberList(MemberDto memberDto) {
|
||||
return baseMapper.selectMemberList(memberDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer selectMemberCount(String shopId) {
|
||||
LambdaQueryWrapper<Member> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(Member::getShopId, shopId);
|
||||
return baseMapper.selectCount(queryWrapper);
|
||||
}
|
||||
}
|
@ -0,0 +1,112 @@
|
||||
package com.dd.admin.business.memberCard.controller;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.dd.admin.business.member.domain.MemberVo;
|
||||
import com.dd.admin.business.member.entity.Member;
|
||||
import com.dd.admin.business.member.service.MemberService;
|
||||
import com.dd.admin.common.security.SecurityUtil;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
import com.dd.admin.common.model.result.ResultBean;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import com.dd.admin.business.memberCard.entity.MemberCard;
|
||||
import com.dd.admin.business.memberCard.domain.MemberCardVo;
|
||||
import com.dd.admin.business.memberCard.domain.MemberCardDto;
|
||||
import com.dd.admin.business.memberCard.service.MemberCardService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 会员卡 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-19
|
||||
*/
|
||||
@Api(tags = "会员卡")
|
||||
@RestController
|
||||
public class MemberCardController {
|
||||
|
||||
@Autowired
|
||||
MemberCardService memberCardService;
|
||||
|
||||
@Autowired
|
||||
MemberService memberService;
|
||||
|
||||
@ApiOperation(value = "会员卡-分页列表")
|
||||
@ApiOperationSupport(order = 1)
|
||||
@GetMapping("/admin/memberCard/page")
|
||||
public ResultBean<IPage<MemberCardVo>> page(MemberCardDto memberCardDto) {
|
||||
memberCardDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
|
||||
IPage<MemberCardVo> pageInfo = memberCardService.selectMemberCardPage(memberCardDto);
|
||||
return ResultBean.success(pageInfo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "会员卡-列表")
|
||||
@ApiOperationSupport(order = 2)
|
||||
@GetMapping("/admin/memberCard/list")
|
||||
public ResultBean<List<MemberCardVo>> list(MemberCardDto memberCardDto) {
|
||||
memberCardDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
|
||||
List<MemberCardVo> list = memberCardService.selectMemberCardList(memberCardDto);
|
||||
return ResultBean.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "会员卡-列表")
|
||||
@ApiOperationSupport(order = 2)
|
||||
@GetMapping("/admin/memberCard/searchList")
|
||||
public ResultBean<List<MemberCardVo>> searchList(MemberCardDto memberCardDto) {
|
||||
memberCardDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
|
||||
memberCardDto.setLimit(10);
|
||||
List<MemberCardVo> list = memberCardService.selectMemberCardList(memberCardDto);
|
||||
list.stream().forEach(memberCardVo -> {
|
||||
Member member = memberService.getById(memberCardVo.getMemberId());
|
||||
MemberVo memberVo = BeanUtil.copyProperties(member, MemberVo.class);
|
||||
memberCardVo.setMember(memberVo);
|
||||
});
|
||||
return ResultBean.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "会员卡-添加")
|
||||
@ApiOperationSupport(order = 3)
|
||||
@PostMapping("/admin/memberCard/add")
|
||||
public ResultBean<MemberCard> add(@RequestBody @Validated MemberCardDto memberCardDto) {
|
||||
MemberCard memberCard = BeanUtil.copyProperties(memberCardDto, MemberCard.class);
|
||||
memberCardService.save(memberCard);
|
||||
return ResultBean.success(memberCard);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "会员卡-查询")
|
||||
@ApiOperationSupport(order = 4)
|
||||
@GetMapping("/admin/memberCard/{memberCardId}")
|
||||
public ResultBean<MemberCardVo> get(@PathVariable @NotBlank String memberCardId) {
|
||||
MemberCard memberCard = memberCardService.getById(memberCardId);
|
||||
MemberCardVo memberCardVo = BeanUtil.copyProperties(memberCard,MemberCardVo.class);
|
||||
return ResultBean.success(memberCardVo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "会员卡-修改")
|
||||
@ApiOperationSupport(order = 5)
|
||||
@PostMapping("/admin/memberCard/update")
|
||||
public ResultBean<MemberCard> update(@RequestBody @Validated(UpdateGroup.class) MemberCardDto memberCardDto) {
|
||||
MemberCard memberCard = BeanUtil.copyProperties(memberCardDto, MemberCard.class);
|
||||
memberCardService.updateById(memberCard);
|
||||
return ResultBean.success(memberCard);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "会员卡-删除")
|
||||
@ApiOperationSupport(order = 6)
|
||||
@GetMapping("/admin/memberCard/delete/{memberCardId}")
|
||||
public ResultBean<MemberCard> delete(@PathVariable @NotBlank String memberCardId) {
|
||||
Boolean b = memberCardService.removeById(memberCardId);
|
||||
return ResultBean.success(b);
|
||||
}
|
||||
}
|
@ -0,0 +1,103 @@
|
||||
package com.dd.admin.business.memberCard.domain;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 会员卡返回对象
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-19
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value="会员卡接收对象")
|
||||
public class MemberCardDto {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "会员卡id")
|
||||
@NotBlank(message = "会员卡id不能为空",groups = UpdateGroup.class)
|
||||
private String memberCardId;
|
||||
|
||||
@ApiModelProperty(value = "会员id")
|
||||
private String memberId;
|
||||
|
||||
@ApiModelProperty(value = "卡项ID")
|
||||
private String cardId;
|
||||
|
||||
@ApiModelProperty(value = "卡号")
|
||||
private String cardNo;
|
||||
|
||||
@ApiModelProperty(value = "卡名称")
|
||||
private String cardName;
|
||||
|
||||
@ApiModelProperty(value = "余额")
|
||||
private BigDecimal amount;
|
||||
|
||||
@ApiModelProperty(value = "赠送金额")
|
||||
private BigDecimal giveAmount;
|
||||
|
||||
@ApiModelProperty(value = "商品折扣")
|
||||
private BigDecimal discount;
|
||||
|
||||
@ApiModelProperty(value = "开卡金额")
|
||||
private BigDecimal buildCardAmount;
|
||||
|
||||
@ApiModelProperty(value = "提成比例")
|
||||
private BigDecimal pushMoney;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1取消")
|
||||
private Integer cardStatus;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1删除")
|
||||
private Integer deleted;
|
||||
|
||||
@ApiModelProperty(value = "乐观锁字段")
|
||||
private Long version;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建人id")
|
||||
private String createId;
|
||||
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "修改人")
|
||||
private String updateName;
|
||||
|
||||
@ApiModelProperty(value = "修改人id")
|
||||
private String updateId;
|
||||
|
||||
@ApiModelProperty(value = "搜索会员卡关键字")
|
||||
private String querySearch;
|
||||
|
||||
@ApiModelProperty(value = "搜索会员卡关键字")
|
||||
private Integer limit;
|
||||
}
|
@ -0,0 +1,100 @@
|
||||
package com.dd.admin.business.memberCard.domain;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.dd.admin.business.member.domain.MemberVo;
|
||||
import com.dd.admin.business.memberCard.entity.MemberCard;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 会员卡返回对象
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-19
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value="会员卡返回对象")
|
||||
public class MemberCardVo {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "会员卡id")
|
||||
private String memberCardId;
|
||||
|
||||
@ApiModelProperty(value = "会员id")
|
||||
private String memberId;
|
||||
|
||||
@ApiModelProperty(value = "卡项ID")
|
||||
private String cardId;
|
||||
|
||||
@ApiModelProperty(value = "卡号")
|
||||
private String cardNo;
|
||||
|
||||
@ApiModelProperty(value = "卡名称")
|
||||
private String cardName;
|
||||
|
||||
@ApiModelProperty(value = "余额")
|
||||
private BigDecimal amount;
|
||||
|
||||
@ApiModelProperty(value = "赠送金额")
|
||||
private BigDecimal giveAmount;
|
||||
|
||||
@ApiModelProperty(value = "商品折扣")
|
||||
private BigDecimal discount;
|
||||
|
||||
@ApiModelProperty(value = "开卡金额")
|
||||
private BigDecimal buildCardAmount;
|
||||
|
||||
@ApiModelProperty(value = "提成比例")
|
||||
private BigDecimal pushMoney;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1取消")
|
||||
private Integer cardStatus;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1删除")
|
||||
private Integer deleted;
|
||||
|
||||
@ApiModelProperty(value = "乐观锁字段")
|
||||
private Long version;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建人id")
|
||||
private String createId;
|
||||
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "修改人")
|
||||
private String updateName;
|
||||
|
||||
@ApiModelProperty(value = "修改人id")
|
||||
private String updateId;
|
||||
|
||||
@ApiModelProperty(value = "会员信息")
|
||||
private MemberVo member;
|
||||
|
||||
}
|
@ -0,0 +1,121 @@
|
||||
package com.dd.admin.business.memberCard.entity;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 会员卡
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-19
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("business_member_card")
|
||||
@ApiModel(value="MemberCard对象", description="会员卡")
|
||||
public class MemberCard implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "会员卡id")
|
||||
@TableId(value = "MEMBER_CARD_ID", type = IdType.ASSIGN_UUID)
|
||||
private String memberCardId;
|
||||
|
||||
@ApiModelProperty(value = "会员id")
|
||||
@TableField("MEMBER_ID")
|
||||
private String memberId;
|
||||
|
||||
@ApiModelProperty(value = "卡项ID")
|
||||
@TableField("CARD_ID")
|
||||
private String cardId;
|
||||
|
||||
@ApiModelProperty(value = "卡号")
|
||||
@TableField("CARD_NO")
|
||||
private String cardNo;
|
||||
|
||||
@ApiModelProperty(value = "卡名称")
|
||||
@TableField("CARD_NAME")
|
||||
private String cardName;
|
||||
|
||||
@ApiModelProperty(value = "余额")
|
||||
@TableField("AMOUNT")
|
||||
private BigDecimal amount;
|
||||
|
||||
@ApiModelProperty(value = "赠送金额")
|
||||
@TableField("GIVE_AMOUNT")
|
||||
private BigDecimal giveAmount;
|
||||
|
||||
@ApiModelProperty(value = "商品折扣")
|
||||
@TableField("DISCOUNT")
|
||||
private BigDecimal discount;
|
||||
|
||||
@ApiModelProperty(value = "开卡金额")
|
||||
@TableField("BUILD_CARD_AMOUNT")
|
||||
private BigDecimal buildCardAmount;
|
||||
|
||||
@ApiModelProperty(value = "提成比例")
|
||||
@TableField("PUSH_MONEY")
|
||||
private BigDecimal pushMoney;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1取消")
|
||||
@TableField("CARD_STATUS")
|
||||
private Integer cardStatus;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1删除")
|
||||
@TableField("DELETED")
|
||||
@TableLogic
|
||||
private Integer deleted;
|
||||
|
||||
@ApiModelProperty(value = "乐观锁字段")
|
||||
@TableField("VERSION")
|
||||
@Version
|
||||
private Long version;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
@TableField(value = "SHOP_ID", fill = FieldFill.INSERT)
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
@TableField(value = "SHOP_NAME", fill = FieldFill.INSERT)
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
@TableField(value = "CREATE_NAME", fill = FieldFill.INSERT)
|
||||
private String createName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建人id")
|
||||
@TableField(value = "CREATE_ID", fill = FieldFill.INSERT)
|
||||
private String createId;
|
||||
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
@TableField(value = "UPDATE_TIME", fill = FieldFill.UPDATE)
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "修改人")
|
||||
@TableField(value = "UPDATE_NAME", fill = FieldFill.UPDATE)
|
||||
private String updateName;
|
||||
|
||||
@ApiModelProperty(value = "修改人id")
|
||||
@TableField(value = "UPDATE_ID", fill = FieldFill.UPDATE)
|
||||
private String updateId;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package com.dd.admin.business.memberCard.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.dd.admin.business.memberCard.entity.MemberCard;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.dd.admin.business.memberCard.domain.MemberCardVo;
|
||||
import com.dd.admin.business.memberCard.domain.MemberCardDto;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 会员卡 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-19
|
||||
*/
|
||||
@Mapper
|
||||
public interface MemberCardMapper extends BaseMapper<MemberCard> {
|
||||
|
||||
IPage<MemberCardVo> selectMemberCardPage(Page<MemberCardVo> page, @Param("memberCardDto") MemberCardDto memberCardDto);
|
||||
|
||||
List<MemberCardVo> selectMemberCardList(@Param("memberCardDto") MemberCardDto memberCardDto);
|
||||
|
||||
MemberCardVo selectOneByCardNo(@Param("cardNo")String cardNo,@Param("shopId")String shopId);
|
||||
|
||||
}
|
@ -0,0 +1,70 @@
|
||||
<?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="com.dd.admin.business.memberCard.mapper.MemberCardMapper">
|
||||
|
||||
<!-- 通用查询映射结果 -->
|
||||
<resultMap id="BaseResultMap" type="com.dd.admin.business.memberCard.entity.MemberCard">
|
||||
<id column="MEMBER_CARD_ID" property="memberCardId" />
|
||||
<result column="MEMBER_ID" property="memberId" />
|
||||
<result column="CARD_ID" property="cardId" />
|
||||
<result column="CARD_NO" property="cardNo" />
|
||||
<result column="CARD_NAME" property="cardName" />
|
||||
<result column="AMOUNT" property="amount" />
|
||||
<result column="GIVE_AMOUNT" property="giveAmount" />
|
||||
<result column="DISCOUNT" property="discount" />
|
||||
<result column="BUILD_CARD_AMOUNT" property="buildCardAmount" />
|
||||
<result column="PUSH_MONEY" property="pushMoney" />
|
||||
<result column="CARD_STATUS" property="cardStatus" />
|
||||
<result column="DELETED" property="deleted" />
|
||||
<result column="VERSION" property="version" />
|
||||
<result column="SHOP_ID" property="shopId" />
|
||||
<result column="SHOP_NAME" property="shopName" />
|
||||
<result column="CREATE_NAME" property="createName" />
|
||||
<result column="CREATE_TIME" property="createTime" />
|
||||
<result column="CREATE_ID" property="createId" />
|
||||
<result column="UPDATE_TIME" property="updateTime" />
|
||||
<result column="UPDATE_NAME" property="updateName" />
|
||||
<result column="UPDATE_ID" property="updateId" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 通用查询结果列 -->
|
||||
<sql id="Base_Column_List">
|
||||
MEMBER_CARD_ID, MEMBER_ID, CARD_ID, CARD_NO, CARD_NAME, AMOUNT, GIVE_AMOUNT, DISCOUNT, BUILD_CARD_AMOUNT, PUSH_MONEY, CARD_STATUS, DELETED, VERSION, SHOP_ID, SHOP_NAME, CREATE_NAME, CREATE_TIME, CREATE_ID, UPDATE_TIME, UPDATE_NAME, UPDATE_ID
|
||||
</sql>
|
||||
|
||||
<select id="selectMemberCardPage" resultType="com.dd.admin.business.memberCard.domain.MemberCardVo">
|
||||
select
|
||||
*
|
||||
from business_member_card where 1 = 1
|
||||
<if test="memberCardDto.shopId != null and memberCardDto.shopId != ''">
|
||||
and shop_id = #{memberCardDto.shopId}
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<select id="selectMemberCardList" resultType="com.dd.admin.business.memberCard.domain.MemberCardVo">
|
||||
select
|
||||
*
|
||||
from business_member_card where deleted = 0
|
||||
<if test="memberCardDto.memberId != null and memberCardDto.memberId != ''">
|
||||
and member_id = #{memberCardDto.memberId}
|
||||
</if>
|
||||
<if test="memberCardDto.querySearch != null and memberCardDto.querySearch != ''">
|
||||
and CARD_NO like CONCAT('%', #{memberCardDto.querySearch}, '%')
|
||||
</if>
|
||||
<if test="memberCardDto.shopId != null and memberCardDto.shopId != ''">
|
||||
and shop_id = #{memberCardDto.shopId}
|
||||
</if>
|
||||
order by create_time desc
|
||||
<if test="memberCardDto.limit != null">
|
||||
limit #{memberCardDto.limit}
|
||||
</if>
|
||||
</select>
|
||||
<select id="selectOneByCardNo" resultType="com.dd.admin.business.memberCard.domain.MemberCardVo">
|
||||
select
|
||||
<include refid="Base_Column_List"/>
|
||||
from business_member_card
|
||||
where
|
||||
SHOP_ID = #{shopId} and
|
||||
CARD_NO = #{cardNo} limit 0,1
|
||||
</select>
|
||||
</mapper>
|
@ -0,0 +1,31 @@
|
||||
package com.dd.admin.business.memberCard.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.dd.admin.business.memberCard.entity.MemberCard;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.dd.admin.business.memberCard.domain.MemberCardVo;
|
||||
import com.dd.admin.business.memberCard.domain.MemberCardDto;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 会员卡 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-19
|
||||
*/
|
||||
public interface MemberCardService extends IService<MemberCard> {
|
||||
|
||||
//会员卡-分页列表
|
||||
IPage<MemberCardVo> selectMemberCardPage(MemberCardDto memberCardDto);
|
||||
|
||||
//会员卡-列表
|
||||
List<MemberCardVo> selectMemberCardList(MemberCardDto memberCardDto);
|
||||
|
||||
MemberCardVo selectOneByCardNo(String cardNo);
|
||||
|
||||
Integer selectMemberCardCount(String shopId);
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
package com.dd.admin.business.memberCard.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.dd.admin.business.member.entity.Member;
|
||||
import com.dd.admin.common.model.PageFactory;
|
||||
import com.dd.admin.business.memberCard.entity.MemberCard;
|
||||
import com.dd.admin.business.memberCard.mapper.MemberCardMapper;
|
||||
import com.dd.admin.business.memberCard.service.MemberCardService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.dd.admin.common.security.SecurityUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.dd.admin.business.memberCard.domain.MemberCardVo;
|
||||
import com.dd.admin.business.memberCard.domain.MemberCardDto;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 会员卡 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-19
|
||||
*/
|
||||
@Service
|
||||
public class MemberCardServiceImpl extends ServiceImpl<MemberCardMapper, MemberCard> implements MemberCardService {
|
||||
|
||||
@Override
|
||||
public IPage<MemberCardVo> selectMemberCardPage(MemberCardDto memberCardDto) {
|
||||
Page page = PageFactory.defaultPage();
|
||||
return baseMapper.selectMemberCardPage(page,memberCardDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MemberCardVo> selectMemberCardList(MemberCardDto memberCardDto) {
|
||||
return baseMapper.selectMemberCardList(memberCardDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MemberCardVo selectOneByCardNo(String cardNo) {
|
||||
String deptId = SecurityUtil.getLoginUser().getDeptId();
|
||||
return baseMapper.selectOneByCardNo(cardNo,deptId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer selectMemberCardCount(String shopId) {
|
||||
LambdaQueryWrapper<MemberCard> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(MemberCard::getShopId, shopId);
|
||||
return baseMapper.selectCount(queryWrapper);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,88 @@
|
||||
package com.dd.admin.business.operationLog.controller;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
import com.dd.admin.common.model.result.ResultBean;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import com.dd.admin.business.operationLog.entity.OperationLog;
|
||||
import com.dd.admin.business.operationLog.domain.OperationLogVo;
|
||||
import com.dd.admin.business.operationLog.domain.OperationLogDto;
|
||||
import com.dd.admin.business.operationLog.service.OperationLogService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 操作日志 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-07
|
||||
*/
|
||||
@Api(tags = "操作日志")
|
||||
@RestController
|
||||
public class OperationLogController {
|
||||
|
||||
@Autowired
|
||||
OperationLogService operationLogService;
|
||||
|
||||
@ApiOperation(value = "操作日志-分页列表")
|
||||
@ApiOperationSupport(order = 1)
|
||||
@GetMapping("/admin/operationLog/page")
|
||||
public ResultBean<IPage<OperationLogVo>> page(OperationLogDto operationLogDto) {
|
||||
IPage<OperationLogVo> pageInfo = operationLogService.selectOperationLogPage(operationLogDto);
|
||||
return ResultBean.success(pageInfo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "操作日志-列表")
|
||||
@ApiOperationSupport(order = 2)
|
||||
@GetMapping("/admin/operationLog/list")
|
||||
public ResultBean<List<OperationLogVo>> list(OperationLogDto operationLogDto) {
|
||||
List<OperationLogVo> list = operationLogService.selectOperationLogList(operationLogDto);
|
||||
return ResultBean.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "操作日志-添加")
|
||||
@ApiOperationSupport(order = 3)
|
||||
@PostMapping("/admin/operationLog/add")
|
||||
public ResultBean<OperationLog> add(@RequestBody @Validated OperationLogDto operationLogDto) {
|
||||
OperationLog operationLog = BeanUtil.copyProperties(operationLogDto, OperationLog.class);
|
||||
operationLogService.save(operationLog);
|
||||
return ResultBean.success(operationLog);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "操作日志-查询")
|
||||
@ApiOperationSupport(order = 4)
|
||||
@GetMapping("/admin/operationLog/{operationLogId}")
|
||||
public ResultBean<OperationLogVo> get(@PathVariable @NotBlank String operationLogId) {
|
||||
OperationLog operationLog = operationLogService.getById(operationLogId);
|
||||
OperationLogVo operationLogVo = BeanUtil.copyProperties(operationLog,OperationLogVo.class);
|
||||
return ResultBean.success(operationLogVo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "操作日志-修改")
|
||||
@ApiOperationSupport(order = 5)
|
||||
@PostMapping("/admin/operationLog/update")
|
||||
public ResultBean<OperationLog> update(@RequestBody @Validated(UpdateGroup.class) OperationLogDto operationLogDto) {
|
||||
OperationLog operationLog = BeanUtil.copyProperties(operationLogDto, OperationLog.class);
|
||||
operationLogService.updateById(operationLog);
|
||||
return ResultBean.success(operationLog);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "操作日志-删除")
|
||||
@ApiOperationSupport(order = 6)
|
||||
@GetMapping("/admin/operationLog/delete/{operationLogId}")
|
||||
public ResultBean<OperationLog> delete(@PathVariable @NotBlank String operationLogId) {
|
||||
Boolean b = operationLogService.removeById(operationLogId);
|
||||
return ResultBean.success(b);
|
||||
}
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
package com.dd.admin.business.operationLog.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 操作日志返回对象
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-07
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value="操作日志接收对象")
|
||||
public class OperationLogDto {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "日志id")
|
||||
private String operId;
|
||||
|
||||
@ApiModelProperty(value = "请求模块")
|
||||
private String operModule;
|
||||
|
||||
@ApiModelProperty(value = "操作类型")
|
||||
private String operType;
|
||||
|
||||
@ApiModelProperty(value = "操作描述")
|
||||
private String operDesc;
|
||||
|
||||
@ApiModelProperty(value = "操作方法")
|
||||
private String operMethod;
|
||||
|
||||
@ApiModelProperty(value = "请求参数")
|
||||
private String oprrRequestParam;
|
||||
|
||||
@ApiModelProperty(value = "响应参数")
|
||||
private String operResponseParam;
|
||||
|
||||
@ApiModelProperty(value = "操作人姓名")
|
||||
private String operUserId;
|
||||
|
||||
@ApiModelProperty(value = "操作人ID")
|
||||
private String operUserName;
|
||||
|
||||
@ApiModelProperty(value = "操作ip")
|
||||
private String operIp;
|
||||
|
||||
@ApiModelProperty(value = "请求url")
|
||||
private String operUrl;
|
||||
|
||||
@ApiModelProperty(value = "操作机构id")
|
||||
private String operDeptId;
|
||||
|
||||
@ApiModelProperty(value = "机构名")
|
||||
private String operDeptName;
|
||||
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "会员id")
|
||||
private String memberId;
|
||||
|
||||
@ApiModelProperty(value = "会员名")
|
||||
private String memberName;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
package com.dd.admin.business.operationLog.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 操作日志返回对象
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-07
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value="操作日志返回对象")
|
||||
public class OperationLogVo {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "日志id")
|
||||
private String operId;
|
||||
|
||||
@ApiModelProperty(value = "请求模块")
|
||||
private String operModule;
|
||||
|
||||
@ApiModelProperty(value = "操作类型")
|
||||
private String operType;
|
||||
|
||||
@ApiModelProperty(value = "操作描述")
|
||||
private String operDesc;
|
||||
|
||||
@ApiModelProperty(value = "操作方法")
|
||||
private String operMethod;
|
||||
|
||||
@ApiModelProperty(value = "请求参数")
|
||||
private String oprrRequestParam;
|
||||
|
||||
@ApiModelProperty(value = "响应参数")
|
||||
private String operResponseParam;
|
||||
|
||||
@ApiModelProperty(value = "操作人姓名")
|
||||
private String operUserId;
|
||||
|
||||
@ApiModelProperty(value = "操作人ID")
|
||||
private String operUserName;
|
||||
|
||||
@ApiModelProperty(value = "操作ip")
|
||||
private String operIp;
|
||||
|
||||
@ApiModelProperty(value = "请求url")
|
||||
private String operUrl;
|
||||
|
||||
@ApiModelProperty(value = "操作机构id")
|
||||
private String operDeptId;
|
||||
|
||||
@ApiModelProperty(value = "机构名")
|
||||
private String operDeptName;
|
||||
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "会员id")
|
||||
private String memberId;
|
||||
|
||||
@ApiModelProperty(value = "会员名")
|
||||
private String memberName;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,92 @@
|
||||
package com.dd.admin.business.operationLog.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
|
||||
import java.util.Date;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 操作日志
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-07
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("business_operation_log")
|
||||
@ApiModel(value="OperationLog对象", description="操作日志")
|
||||
public class OperationLog implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "日志id")
|
||||
@TableId(value = "OPER_ID", type = IdType.ASSIGN_UUID)
|
||||
private String operId;
|
||||
|
||||
@ApiModelProperty(value = "请求模块")
|
||||
@TableField("OPER_MODULE")
|
||||
private String operModule;
|
||||
|
||||
@ApiModelProperty(value = "操作类型")
|
||||
@TableField("OPER_TYPE")
|
||||
private String operType;
|
||||
|
||||
@ApiModelProperty(value = "操作描述")
|
||||
@TableField("OPER_DESC")
|
||||
private String operDesc;
|
||||
|
||||
@ApiModelProperty(value = "操作方法")
|
||||
@TableField("OPER_METHOD")
|
||||
private String operMethod;
|
||||
|
||||
@ApiModelProperty(value = "请求参数")
|
||||
@TableField("OPRR_REQUEST_PARAM")
|
||||
private String oprrRequestParam;
|
||||
|
||||
@ApiModelProperty(value = "响应参数")
|
||||
@TableField("OPER_RESPONSE_PARAM")
|
||||
private String operResponseParam;
|
||||
|
||||
@ApiModelProperty(value = "操作人姓名")
|
||||
@TableField("OPER_USER_ID")
|
||||
private String operUserId;
|
||||
|
||||
@ApiModelProperty(value = "操作人ID")
|
||||
@TableField("OPER_USER_NAME")
|
||||
private String operUserName;
|
||||
|
||||
@ApiModelProperty(value = "操作ip")
|
||||
@TableField("OPER_IP")
|
||||
private String operIp;
|
||||
|
||||
@ApiModelProperty(value = "请求url")
|
||||
@TableField("OPER_URL")
|
||||
private String operUrl;
|
||||
|
||||
@ApiModelProperty(value = "操作机构id")
|
||||
@TableField("OPER_DEPT_ID")
|
||||
private String operDeptId;
|
||||
|
||||
@ApiModelProperty(value = "机构名")
|
||||
@TableField("OPER_DEPT_NAME")
|
||||
private String operDeptName;
|
||||
|
||||
@TableField(value = "CREATE_TIME")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "会员id")
|
||||
@TableField("MEMBER_ID")
|
||||
private String memberId;
|
||||
|
||||
@ApiModelProperty(value = "会员名")
|
||||
@TableField("MEMBER_NAME")
|
||||
private String memberName;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package com.dd.admin.business.operationLog.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.dd.admin.business.operationLog.entity.OperationLog;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.dd.admin.business.operationLog.domain.OperationLogVo;
|
||||
import com.dd.admin.business.operationLog.domain.OperationLogDto;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 操作日志 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-07
|
||||
*/
|
||||
@Mapper
|
||||
public interface OperationLogMapper extends BaseMapper<OperationLog> {
|
||||
|
||||
IPage<OperationLogVo> selectOperationLogPage(Page<OperationLogVo> page, @Param("operationLogDto") OperationLogDto operationLogDto);
|
||||
|
||||
List<OperationLogVo> selectOperationLogList(@Param("operationLogDto") OperationLogDto operationLogDto);
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
<?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="com.dd.admin.business.operationLog.mapper.OperationLogMapper">
|
||||
|
||||
<!-- 通用查询映射结果 -->
|
||||
<resultMap id="BaseResultMap" type="com.dd.admin.business.operationLog.entity.OperationLog">
|
||||
<result column="OPER_ID" property="operId" />
|
||||
<result column="OPER_MODULE" property="operModule" />
|
||||
<result column="OPER_TYPE" property="operType" />
|
||||
<result column="OPER_DESC" property="operDesc" />
|
||||
<result column="OPER_METHOD" property="operMethod" />
|
||||
<result column="OPRR_REQUEST_PARAM" property="oprrRequestParam" />
|
||||
<result column="OPER_RESPONSE_PARAM" property="operResponseParam" />
|
||||
<result column="OPER_USER_ID" property="operUserId" />
|
||||
<result column="OPER_USER_NAME" property="operUserName" />
|
||||
<result column="OPER_IP" property="operIp" />
|
||||
<result column="OPER_URL" property="operUrl" />
|
||||
<result column="OPER_DEPT_ID" property="operDeptId" />
|
||||
<result column="OPER_DEPT_NAME" property="operDeptName" />
|
||||
<result column="CREATE_TIME" property="createTime" />
|
||||
<result column="MEMBER_ID" property="memberId" />
|
||||
<result column="MEMBER_NAME" property="memberName" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 通用查询结果列 -->
|
||||
<sql id="Base_Column_List">
|
||||
OPER_ID, OPER_MODULE, OPER_TYPE, OPER_DESC, OPER_METHOD, OPRR_REQUEST_PARAM, OPER_RESPONSE_PARAM, OPER_USER_ID, OPER_USER_NAME, OPER_IP, OPER_URL, OPER_DEPT_ID, OPER_DEPT_NAME, CREATE_TIME, MEMBER_ID, MEMBER_NAME
|
||||
</sql>
|
||||
|
||||
<select id="selectOperationLogPage" resultType="com.dd.admin.business.operationLog.domain.OperationLogVo">
|
||||
select
|
||||
*
|
||||
from business_operation_log where 1 = 1
|
||||
order by create_time desc
|
||||
</select>
|
||||
|
||||
<select id="selectOperationLogList" resultType="com.dd.admin.business.operationLog.domain.OperationLogVo">
|
||||
select
|
||||
*
|
||||
from business_operation_log where 1 = 1
|
||||
</select>
|
||||
</mapper>
|
@ -0,0 +1,26 @@
|
||||
package com.dd.admin.business.operationLog.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.dd.admin.business.operationLog.entity.OperationLog;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.dd.admin.business.operationLog.domain.OperationLogVo;
|
||||
import com.dd.admin.business.operationLog.domain.OperationLogDto;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 操作日志 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-07
|
||||
*/
|
||||
public interface OperationLogService extends IService<OperationLog> {
|
||||
|
||||
//操作日志-分页列表
|
||||
IPage<OperationLogVo> selectOperationLogPage(OperationLogDto operationLogDto);
|
||||
|
||||
//操作日志-列表
|
||||
List<OperationLogVo> selectOperationLogList(OperationLogDto operationLogDto);
|
||||
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package com.dd.admin.business.operationLog.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.dd.admin.common.model.PageFactory;
|
||||
import com.dd.admin.business.operationLog.entity.OperationLog;
|
||||
import com.dd.admin.business.operationLog.mapper.OperationLogMapper;
|
||||
import com.dd.admin.business.operationLog.service.OperationLogService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.dd.admin.business.operationLog.domain.OperationLogVo;
|
||||
import com.dd.admin.business.operationLog.domain.OperationLogDto;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 操作日志 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-06-07
|
||||
*/
|
||||
@Service
|
||||
public class OperationLogServiceImpl extends ServiceImpl<OperationLogMapper, OperationLog> implements OperationLogService {
|
||||
|
||||
@Override
|
||||
public IPage<OperationLogVo> selectOperationLogPage(OperationLogDto operationLogDto) {
|
||||
Page page = PageFactory.defaultPage();
|
||||
return baseMapper.selectOperationLogPage(page,operationLogDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OperationLogVo> selectOperationLogList(OperationLogDto operationLogDto) {
|
||||
return baseMapper.selectOperationLogList(operationLogDto);
|
||||
}
|
||||
}
|
64
src/main/java/com/dd/admin/business/pay/PayController.java
Normal file
@ -0,0 +1,64 @@
|
||||
package com.dd.admin.business.pay;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.dd.admin.business.member.domain.MemberDto;
|
||||
import com.dd.admin.business.member.entity.Member;
|
||||
import com.dd.admin.business.pay.domain.BuildCardSell;
|
||||
import com.dd.admin.business.pay.domain.ChargedCardSell;
|
||||
import com.dd.admin.business.pay.domain.MemberProductSell;
|
||||
import com.dd.admin.business.pay.service.PayService;
|
||||
import com.dd.admin.business.sell.entity.Sell;
|
||||
import com.dd.admin.common.aop.operationLog.aop.OperLog;
|
||||
import com.dd.admin.common.aop.operationLog.aop.OperType;
|
||||
import com.dd.admin.common.model.result.ResultBean;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Api(tags = "结算控制器")
|
||||
@RestController
|
||||
public class PayController {
|
||||
|
||||
@Autowired
|
||||
PayService payService;
|
||||
|
||||
@ApiOperation(value = "开卡结算")
|
||||
@ApiOperationSupport(order = 3)
|
||||
@PostMapping("/pay/buildCard")
|
||||
@Transactional
|
||||
@OperLog(operModule = "开卡结算",operType = OperType.ADD,operDesc = "开卡结算")
|
||||
public ResultBean<Sell> buildCard(@RequestBody @Validated BuildCardSell buildCardSell) {
|
||||
Sell sell = payService.executeBuildCard(buildCardSell);
|
||||
return ResultBean.success(sell);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "续卡结算")
|
||||
@ApiOperationSupport(order = 3)
|
||||
@PostMapping("/pay/chargedCard")
|
||||
@Transactional
|
||||
@OperLog(operModule = "续卡结算",operType = OperType.ADD,operDesc = "续卡结算")
|
||||
public ResultBean<Sell> chargedCard(@RequestBody @Validated ChargedCardSell chargedCardSell) {
|
||||
Sell sell = payService.executeChargedCard(chargedCardSell);
|
||||
return ResultBean.success(sell);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "商品结算")
|
||||
@ApiOperationSupport(order = 3)
|
||||
@PostMapping("/pay/productPay")
|
||||
@Transactional
|
||||
@OperLog(operModule = "商品结算",operType = OperType.ADD,operDesc = "商品结算")
|
||||
public ResultBean<Sell> buildCard(@RequestBody @Validated MemberProductSell productSell) {
|
||||
Sell sell = payService.executeProduct(productSell);
|
||||
return ResultBean.success(sell);
|
||||
}
|
||||
|
||||
|
||||
}
|
34
src/main/java/com/dd/admin/business/pay/domain/BaseSell.java
Normal file
@ -0,0 +1,34 @@
|
||||
package com.dd.admin.business.pay.domain;
|
||||
|
||||
import com.dd.admin.business.sellPay.entity.Sellpay;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.Max;
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class BaseSell {
|
||||
@ApiModelProperty(value = "订单号 可不填 不填将自动生成")
|
||||
private String sellNo;
|
||||
|
||||
@ApiModelProperty(value = "支付列表")
|
||||
@NotNull(message = "支付信息不能为空")
|
||||
private List<Sellpay> sellPayList;
|
||||
|
||||
@ApiModelProperty(value = "订单金额")
|
||||
@NotNull(message = "订单金额不能为空")
|
||||
@Max(value = 1000000,message = "订单金额最大为1000000")
|
||||
@Min(value = 0,message = "订单金额最小为0")
|
||||
private BigDecimal sellAmount;
|
||||
|
||||
@ApiModelProperty(value = "json")
|
||||
private String sellJson;
|
||||
|
||||
|
||||
@ApiModelProperty(value = "jsonId")
|
||||
private String jsonId;
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package com.dd.admin.business.pay.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.dd.admin.business.server.domain.ServerVo;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class BuildCardForm {
|
||||
@ApiModelProperty(value = "会员卡id")
|
||||
private String cardId;
|
||||
|
||||
@ApiModelProperty(value = "会员卡名")
|
||||
@TableField("CARD_NAME")
|
||||
private String cardName;
|
||||
|
||||
@ApiModelProperty(value = "卡编号")
|
||||
@TableField("CARD_NO")
|
||||
private String cardNo;
|
||||
|
||||
@ApiModelProperty(value = "预设开卡金")
|
||||
@TableField("CARD_AMOUNT")
|
||||
private BigDecimal cardAmount = BigDecimal.ZERO;
|
||||
|
||||
@ApiModelProperty(value = "预设赠送金")
|
||||
@TableField("GIVE_AMOUNT")
|
||||
private BigDecimal giveAmount = BigDecimal.ZERO;
|
||||
|
||||
|
||||
@ApiModelProperty(value = "商品实际金额")
|
||||
private BigDecimal totalRealAmount;
|
||||
|
||||
@ApiModelProperty(value = "服务人员列表")
|
||||
private List<ServerVo> serverList;
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package com.dd.admin.business.pay.domain;
|
||||
|
||||
import com.dd.admin.business.card.entity.Card;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Data
|
||||
@ApiModel(value="开卡接收对象")
|
||||
public class BuildCardSell extends MemberBaseSell {
|
||||
@ApiModelProperty(value = "开卡对象")
|
||||
@NotNull(message = "开卡对象不能为空")
|
||||
@Valid
|
||||
BuildCardForm buildCardForm;
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package com.dd.admin.business.pay.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.dd.admin.business.server.domain.ServerVo;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class ChargedCardForm {
|
||||
@ApiModelProperty(value = "会员卡id")
|
||||
private String memberCardId;
|
||||
|
||||
@ApiModelProperty(value = "会员卡id")
|
||||
private String cardId;
|
||||
|
||||
@ApiModelProperty(value = "会员卡名")
|
||||
@TableField("CARD_NAME")
|
||||
private String cardName;
|
||||
|
||||
@ApiModelProperty(value = "修改后卡编号")
|
||||
@TableField("CARD_NO")
|
||||
private String cardNo;
|
||||
|
||||
@ApiModelProperty(value = "充值开卡金")
|
||||
private BigDecimal chargedCardAmount = BigDecimal.ZERO;
|
||||
|
||||
@ApiModelProperty(value = "充值赠送金")
|
||||
private BigDecimal chargedGiveAmount = BigDecimal.ZERO;
|
||||
|
||||
@ApiModelProperty(value = "商品实际金额")
|
||||
private BigDecimal totalRealAmount;
|
||||
|
||||
|
||||
@ApiModelProperty(value = "服务人员列表")
|
||||
private List<ServerVo> serverList;
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package com.dd.admin.business.pay.domain;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Data
|
||||
@ApiModel(value="续卡接收对象")
|
||||
public class ChargedCardSell extends MemberBaseSell {
|
||||
@ApiModelProperty(value = "续卡对象")
|
||||
@NotNull(message = "续卡对象不能为空")
|
||||
@Valid
|
||||
ChargedCardForm chargedCardForm;
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.dd.admin.business.pay.domain;
|
||||
|
||||
import com.dd.admin.business.sellPay.entity.Sellpay;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.Max;
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class MemberBaseSell extends BaseSell{
|
||||
|
||||
@ApiModelProperty(value = "会员id")
|
||||
private String memberId;
|
||||
|
||||
@ApiModelProperty(value = "会员卡id")
|
||||
private String memberCardId;
|
||||
|
||||
@ApiModelProperty(value = "会员名")
|
||||
private String memberName;
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package com.dd.admin.business.pay.domain;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@ApiModel(value="会员商品消费")
|
||||
public class MemberProductSell extends MemberBaseSell {
|
||||
|
||||
@ApiModelProperty(value = "商品对象")
|
||||
@NotNull(message = "商品对不能为空")
|
||||
@Valid
|
||||
private List<ProductForm> productFormList;
|
||||
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
package com.dd.admin.business.pay.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.dd.admin.business.server.domain.ServerVo;
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class ProductForm {
|
||||
@ApiModelProperty(value = "商品id")
|
||||
@NotBlank(message = "商品id不能为空",groups = UpdateGroup.class)
|
||||
private String productId;
|
||||
|
||||
@ApiModelProperty(value = "分类id")
|
||||
private String categoryId;
|
||||
|
||||
@ApiModelProperty(value = "分类名")
|
||||
private String categoryName;
|
||||
|
||||
@ApiModelProperty(value = "商品名")
|
||||
private String productName;
|
||||
|
||||
@ApiModelProperty(value = "商品金额")
|
||||
private BigDecimal productAmount;
|
||||
|
||||
@ApiModelProperty(value = "商品会员金额")
|
||||
private BigDecimal productMemberAmount;
|
||||
|
||||
@ApiModelProperty(value = "商品折扣")
|
||||
private BigDecimal discount;
|
||||
|
||||
@ApiModelProperty(value = "商品数量")
|
||||
private Long count;
|
||||
|
||||
@ApiModelProperty(value = "商品实际金额")
|
||||
private BigDecimal realAmount;
|
||||
|
||||
@ApiModelProperty(value = "商品实际金额")
|
||||
private BigDecimal totalRealAmount;
|
||||
|
||||
@ApiModelProperty(value = "服务人员列表")
|
||||
private List<ServerVo> serverList;
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package com.dd.admin.business.pay.enmus;
|
||||
|
||||
import com.dd.admin.common.exception.enums.AbstractBaseExceptionEnum;
|
||||
|
||||
public enum CashierExceptionEnum implements AbstractBaseExceptionEnum {
|
||||
CARD_AMOUNT_CHANGE(500,"余额已变动,为保证数据安全,操作中断,请重试!"),
|
||||
MEMBER_CARD_NOT_SUFFICIENT_FUNDS(500,"会员卡余额不足,请重新操作!"),
|
||||
MEMBER_CARD_GIVE_NOT_SUFFICIENT_FUNDS(500,"会员卡赠送余额不足,请重新操作!"),
|
||||
MEMBER_CARD_ALREADY_BUILD(500,"该会员已经有充值账户,禁止重复创建!"),
|
||||
MEMBER_ALREADY_BUILD(500,"该手机号已注册过,禁止重复创建!"),
|
||||
MEMBER_DIFFERENT(500,"会员卡与会员信息不一致,请核实~"),
|
||||
DEPT_DIFFERENT(500,"结算信息与当前门店信息不一致,请刷新后重试~"),
|
||||
LKLPAY_NOT_AUTHCODE(500,"没有扫描或者扫描了错误的付款码,请核实!"),
|
||||
LKLPAYINFO_IS_EXIST(500,"该组织的拉卡拉拓展信息已经配置过啦!"),
|
||||
LKLPAYINFO_AUTHCODE_ERROR(500,"扫描用户付款码有误!"),
|
||||
SELL_TYPE_ERROR(500,"传入的支付方式有误!"),
|
||||
LKLPAYINFO_UNKONW_ERROR(500,"付款码支付有误!"),
|
||||
LKLPAYINFO_COMPLETE_ERROR(500,"该订单已经完成了哦!"),
|
||||
PRODUCT_ALREADY_EXIST(500,"该商品号已被占用!"),
|
||||
CARDNO_ALREADY_EXIST(500,"该卡号已被占用!"),
|
||||
CARD_ALREADY_EXIST(500,"该卡项编号已被占用!"),
|
||||
PRODUCT_CARD_ALREADY_EXIST(500,"卡级价已存在,请更换其他卡项设置!"),
|
||||
AUTHCODE_PAY_NOTZREO(500,"条码支付金额不能为0!"),
|
||||
COMBO_EXPIRED(500,"该套餐活动已过期!"),
|
||||
COMBO_MONTH_COUNT_NONE(500,"套餐过期月数未设置!"),
|
||||
MEMBER_COMBO_EXPIRED(500,"会员套餐截止期已过!"),
|
||||
MEMBER_COMBO_NOT_SUFFICIENT_FUNDS(500,"套餐剩余项目次数不足!"),
|
||||
MEMBER_COMBO_IS_USED(500,"该套餐已使用禁止销单!"),
|
||||
MEMBER_COMBO_IS_DEL(500,"该套餐已删除!"),
|
||||
PAY_MONEY_EMPTY(500,"付款码有误!"),
|
||||
PAY_MONEY_ERROR(500,"付款金额有误!"),
|
||||
PAY_ERROR(500,"条码付款发生了错误!"),
|
||||
PAY_SELL_ERROR(500,"该订单状态已取消!"),
|
||||
PAY_SELL_ALREADY(500,"该订单状态已结算!"),
|
||||
PAY_SELL_CANCEL_ERROR(500,"该订单状态无法销单!"),
|
||||
PAY_SELL_CARD_AMOUNT_CHANGE(500,"该卡已经生成消费记录,无法销单!"),
|
||||
PAY_SELL_CARD_AMOUNT_NOT_SUFFICIENT_FUNDS(500,"销单后会员卡赠送余额不足,无法销单!"),
|
||||
;
|
||||
|
||||
CashierExceptionEnum(Integer code, String message) {
|
||||
this.code = code;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
private Integer code;
|
||||
|
||||
private String message;
|
||||
|
||||
|
||||
@Override
|
||||
public Integer getCode() {
|
||||
return this.code;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return this.message;
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.dd.admin.business.pay.enmus;
|
||||
|
||||
public enum DetailServiceEnum {
|
||||
BUILD_CARD("sellDetailBuildCard"),
|
||||
CHARGED_CARD("sellDetailChargedCard"),
|
||||
MEMBER_PRODUCT("sellDetailMemberProduct"),
|
||||
PEOPLE("sellDetailPeople");
|
||||
|
||||
private String serviceName;
|
||||
|
||||
DetailServiceEnum(String serviceName) {
|
||||
this.serviceName = serviceName;
|
||||
}
|
||||
|
||||
public String getServiceName() {
|
||||
return serviceName;
|
||||
}
|
||||
|
||||
public void setServiceName(String serviceName) {
|
||||
this.serviceName = serviceName;
|
||||
}
|
||||
}
|
60
src/main/java/com/dd/admin/business/pay/enmus/PayConst.java
Normal file
@ -0,0 +1,60 @@
|
||||
package com.dd.admin.business.pay.enmus;
|
||||
|
||||
public class PayConst {
|
||||
|
||||
/**
|
||||
* 订单状态销单
|
||||
*/
|
||||
public static final Integer SELL_STATUS_REVOCATION = 1;
|
||||
|
||||
/**
|
||||
* 开卡
|
||||
*/
|
||||
public static final Integer SELL_TYPE_BUILD_CARD = 2;
|
||||
|
||||
/**
|
||||
* 续卡
|
||||
*/
|
||||
public static final Integer SELL_TYPE_CHARGED_CARD = 3;
|
||||
|
||||
/**
|
||||
* 商品服务
|
||||
*/
|
||||
public static final Integer SELL_TYPE_PRODUCT = 1;
|
||||
|
||||
/**
|
||||
* 卡金支付
|
||||
*/
|
||||
public static final Integer PAY_TYPE_CARD = 1;
|
||||
/**
|
||||
* 赠送金支付
|
||||
*/
|
||||
public static final Integer PAY_TYPE_CARD_GIVE = 0;
|
||||
|
||||
public static final String PAY_TYPE_CARD_GIVE_NAME = "赠送金支付";
|
||||
|
||||
/**
|
||||
* 优惠
|
||||
*/
|
||||
public static final Integer PAY_TYPE_DISCOUNT = 888;
|
||||
|
||||
|
||||
/**
|
||||
* 商品类型
|
||||
*/
|
||||
public static final Integer PRODUCT_TYPE_PRODUCT = 1;
|
||||
/**
|
||||
* 商品类型 卡项
|
||||
*/
|
||||
public static final Integer PRODUCT_TYPE_CARD = 2;
|
||||
/**
|
||||
* 商品类型 卡项
|
||||
*/
|
||||
public static final Integer PRODUCT_TYPE_CHARGED_CARD = 3;
|
||||
|
||||
/**
|
||||
*待结算订单结算完毕
|
||||
*/
|
||||
public static final Integer PENDING_SELL_COMPLETE = 1;
|
||||
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package com.dd.admin.business.pay.service;
|
||||
|
||||
import com.dd.admin.business.pay.domain.BaseSell;
|
||||
import com.dd.admin.business.sell.domain.SellDto;
|
||||
import com.dd.admin.business.sell.entity.Sell;
|
||||
|
||||
/**
|
||||
|
||||
* Description:创建销售细单接口 所有细单的操作 实现此接口
|
||||
|
||||
* date: 2021/7/12
|
||||
* @author: wxl
|
||||
*/
|
||||
|
||||
public interface AddSellDetailService {
|
||||
|
||||
void addSellDetail(Sell sell, BaseSell sellDto);
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.dd.admin.business.pay.service;
|
||||
|
||||
import com.dd.admin.business.memberCard.entity.MemberCard;
|
||||
import com.dd.admin.business.pay.domain.BuildCardSell;
|
||||
import com.dd.admin.business.pay.domain.ChargedCardSell;
|
||||
import com.dd.admin.business.pay.domain.MemberProductSell;
|
||||
import com.dd.admin.business.sell.entity.Sell;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
public interface PayService {
|
||||
public Sell createSell(Sell sell);
|
||||
|
||||
public Sell setSellExtraInfo(String sellId, MemberCard memberCard, BigDecimal memberBeforeAmount,BigDecimal memberBeforeGiveAmount);
|
||||
|
||||
public Sell executeBuildCard(BuildCardSell buildCardSell);
|
||||
|
||||
public Sell executeChargedCard(ChargedCardSell chargedCardSell);
|
||||
|
||||
public Sell executeProduct(MemberProductSell productSell);
|
||||
|
||||
}
|
@ -0,0 +1,140 @@
|
||||
package com.dd.admin.business.pay.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.dd.admin.business.memberCard.entity.MemberCard;
|
||||
import com.dd.admin.business.pay.domain.BuildCardSell;
|
||||
import com.dd.admin.business.pay.domain.ChargedCardSell;
|
||||
import com.dd.admin.business.pay.domain.MemberProductSell;
|
||||
import com.dd.admin.business.pay.service.AddSellDetailService;
|
||||
import com.dd.admin.business.pay.service.PayService;
|
||||
import com.dd.admin.business.sell.entity.Sell;
|
||||
import com.dd.admin.business.sell.service.SellService;
|
||||
import com.dd.admin.business.sellJson.entity.Selljson;
|
||||
import com.dd.admin.business.sellJson.service.SelljsonService;
|
||||
import com.dd.admin.business.sellPay.service.SellpayService;
|
||||
import com.dd.admin.common.security.SecurityUtil;
|
||||
import com.dd.admin.common.utils.StringUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.dd.admin.business.pay.enmus.DetailServiceEnum.*;
|
||||
import static com.dd.admin.business.pay.enmus.PayConst.*;
|
||||
|
||||
@Service
|
||||
public class PayServiceImpl implements PayService {
|
||||
|
||||
@Autowired
|
||||
private SellService sellService;
|
||||
|
||||
@Autowired
|
||||
private Map<String, AddSellDetailService> detailServiceMap;
|
||||
|
||||
@Autowired
|
||||
private SellpayService sellpayService;
|
||||
|
||||
@Autowired
|
||||
private SelljsonService selljsonService;
|
||||
|
||||
@Override
|
||||
public Sell createSell(Sell sell) {
|
||||
String shopId = SecurityUtil.getLoginUser().getDeptId();
|
||||
//直接执行save即可
|
||||
if(StringUtil.isEmpty(sell.getSellNo())){
|
||||
String sellNo = (StringUtil.getDateStringNow() + StringUtil.createCode(4));
|
||||
sell.setSellNo(sellNo);
|
||||
}
|
||||
|
||||
//插入时查看该门店今天数量为流水号
|
||||
Integer count = sellService.selectTodayCount(shopId);
|
||||
sell.setSerialNo(String.valueOf(count + 1));
|
||||
sellService.save(sell);
|
||||
return sell;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sell setSellExtraInfo(String sellId, MemberCard memberCard, BigDecimal memberBeforeAmount, BigDecimal memberBeforeGiveAmount) {
|
||||
Sell extraSellInfo = new Sell();
|
||||
extraSellInfo.setSellId(sellId);
|
||||
if(memberCard!=null){
|
||||
//设置订单的卡信息
|
||||
extraSellInfo.setMemberCardId(memberCard.getMemberCardId());
|
||||
extraSellInfo.setMemberCardName(memberCard.getCardName());
|
||||
extraSellInfo.setMemberCardNo(memberCard.getCardNo());
|
||||
//设置订单的卡余额
|
||||
extraSellInfo.setMemberCardBeforeAmount(memberBeforeAmount);
|
||||
extraSellInfo.setMemberCardBeforeGiveAmount(memberBeforeGiveAmount);
|
||||
|
||||
extraSellInfo.setMemberCardAfterAmount(memberCard.getAmount());
|
||||
extraSellInfo.setMemberCardAfterGiveAmount(memberCard.getGiveAmount());
|
||||
}
|
||||
sellService.updateById(extraSellInfo);
|
||||
return extraSellInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sell executeBuildCard(BuildCardSell buildCardSell) {
|
||||
if(StringUtil.isNotEmpty(buildCardSell.getJsonId())){
|
||||
selljsonService.completePendingSell(buildCardSell.getJsonId());
|
||||
}
|
||||
|
||||
Integer sellType = SELL_TYPE_BUILD_CARD;
|
||||
//第一步创建订单
|
||||
Sell sell = BeanUtil.copyProperties(buildCardSell,Sell.class);
|
||||
sell.setSellType(sellType);
|
||||
|
||||
BigDecimal realAmount = sellpayService.getRealAmount(buildCardSell.getSellPayList(), buildCardSell.getSellAmount());
|
||||
sell.setRealAmount(realAmount);
|
||||
createSell(sell);
|
||||
// selljsonService.save(new Selljson().setSellId(sell.getSellId()).setSellJson(buildCardSell.getSellJson()));
|
||||
//创建销售细单
|
||||
detailServiceMap.get(BUILD_CARD.getServiceName()).addSellDetail(sell,buildCardSell);
|
||||
return sell;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sell executeChargedCard(ChargedCardSell chargedCardSell) {
|
||||
if(StringUtil.isNotEmpty(chargedCardSell.getJsonId())){
|
||||
selljsonService.completePendingSell(chargedCardSell.getJsonId());
|
||||
}
|
||||
|
||||
|
||||
|
||||
Integer sellType = SELL_TYPE_CHARGED_CARD;
|
||||
//chargedCardSell
|
||||
Sell sell = BeanUtil.copyProperties(chargedCardSell,Sell.class);
|
||||
sell.setSellType(sellType);
|
||||
|
||||
BigDecimal realAmount = sellpayService.getRealAmount(chargedCardSell.getSellPayList(), chargedCardSell.getSellAmount());
|
||||
sell.setRealAmount(realAmount);
|
||||
createSell(sell);
|
||||
// selljsonService.save(new Selljson().setSellId(sell.getSellId()).setSellJson(chargedCardSell.getSellJson()));
|
||||
//创建销售细单
|
||||
detailServiceMap.get(CHARGED_CARD.getServiceName()).addSellDetail(sell,chargedCardSell);
|
||||
return sell;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sell executeProduct(MemberProductSell productSell) {
|
||||
if(StringUtil.isNotEmpty(productSell.getJsonId())){
|
||||
selljsonService.completePendingSell(productSell.getJsonId());
|
||||
}
|
||||
|
||||
|
||||
Integer sellType = SELL_TYPE_PRODUCT;
|
||||
//第一步创建订单
|
||||
Sell sell = BeanUtil.copyProperties(productSell,Sell.class);
|
||||
sell.setSellType(sellType);
|
||||
|
||||
BigDecimal realAmount = sellpayService.getRealAmount(productSell.getSellPayList(), productSell.getSellAmount());
|
||||
sell.setRealAmount(realAmount);
|
||||
createSell(sell);
|
||||
//创建销售细单
|
||||
detailServiceMap.get(MEMBER_PRODUCT.getServiceName()).addSellDetail(sell,productSell);
|
||||
return sell;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,162 @@
|
||||
package com.dd.admin.business.pay.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.dd.admin.business.card.entity.Card;
|
||||
import com.dd.admin.business.card.service.CardService;
|
||||
import com.dd.admin.business.detailServer.entity.SellDetailServer;
|
||||
import com.dd.admin.business.detailServer.service.SellDetailServerService;
|
||||
import com.dd.admin.business.memberCard.domain.MemberCardVo;
|
||||
import com.dd.admin.business.memberCard.entity.MemberCard;
|
||||
import com.dd.admin.business.memberCard.service.MemberCardService;
|
||||
import com.dd.admin.business.pay.domain.BaseSell;
|
||||
import com.dd.admin.business.pay.domain.BuildCardForm;
|
||||
import com.dd.admin.business.pay.domain.BuildCardSell;
|
||||
import com.dd.admin.business.pay.service.AddSellDetailService;
|
||||
import com.dd.admin.business.pay.service.PayService;
|
||||
import com.dd.admin.business.sell.entity.Sell;
|
||||
import com.dd.admin.business.sell.service.SellService;
|
||||
import com.dd.admin.business.sellDetail.entity.SellDetail;
|
||||
import com.dd.admin.business.sellDetail.service.SellDetailService;
|
||||
import com.dd.admin.business.sellPay.entity.Sellpay;
|
||||
import com.dd.admin.business.sellPay.service.SellpayService;
|
||||
import com.dd.admin.business.server.domain.ServerVo;
|
||||
import com.dd.admin.common.exception.ApiException;
|
||||
import com.dd.admin.common.utils.BigDecimalUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
import static com.dd.admin.business.pay.enmus.CashierExceptionEnum.CARDNO_ALREADY_EXIST;
|
||||
import static com.dd.admin.business.pay.enmus.PayConst.PRODUCT_TYPE_CARD;
|
||||
import static com.dd.admin.common.consts.MemberShopConst.PUSH_FIXED;
|
||||
import static com.dd.admin.common.consts.MemberShopConst.PUSH_SCALE;
|
||||
|
||||
@Service
|
||||
public class SellDetailBuildCard implements AddSellDetailService {
|
||||
|
||||
@Autowired
|
||||
private CardService cardService;
|
||||
@Autowired
|
||||
private MemberCardService memberCardService;
|
||||
@Autowired
|
||||
private SellDetailService sellDetailService;
|
||||
@Autowired
|
||||
private SellpayService sellpayService;
|
||||
@Autowired
|
||||
private PayService payService;
|
||||
@Autowired
|
||||
private SellDetailServerService sellDetailServerService;
|
||||
|
||||
@Override
|
||||
public void addSellDetail(Sell sell, BaseSell sellDto) {
|
||||
//转换数据
|
||||
BuildCardSell buildCardSell = (BuildCardSell) sellDto;
|
||||
// 1 获取开卡金额 等信息 先开卡
|
||||
String cardId = buildCardSell.getBuildCardForm().getCardId();
|
||||
//获取需要的开卡信息
|
||||
Card card = cardService.getById(cardId);
|
||||
//开卡
|
||||
MemberCard memberCard = buildMemberCard(sell, buildCardSell.getBuildCardForm(), card);
|
||||
//2生成销售细单
|
||||
SellDetail sellDetail = addSellDetail(sell, buildCardSell, memberCard, card);
|
||||
//添加支付方式
|
||||
sellpayService.addSellPayList(buildCardSell.getSellPayList(), sell.getSellId());
|
||||
|
||||
//4因为是开卡还要设置额外信息
|
||||
payService.setSellExtraInfo(sell.getSellId(), memberCard, BigDecimal.ZERO, BigDecimal.ZERO);
|
||||
}
|
||||
|
||||
MemberCard buildMemberCard(Sell sell, BuildCardForm buildCardForm, Card card) {
|
||||
//设置卡的基本和余额信息
|
||||
MemberCard memberCard = new MemberCard();
|
||||
memberCard.setMemberId(sell.getMemberId());
|
||||
memberCard.setCardId(card.getCardId());
|
||||
memberCard.setCardName(card.getCardName());
|
||||
|
||||
String cardNo = buildCardForm.getCardNo();
|
||||
MemberCardVo membercardVo = memberCardService.selectOneByCardNo(cardNo);
|
||||
if (membercardVo != null) {
|
||||
throw new ApiException(CARDNO_ALREADY_EXIST);
|
||||
}
|
||||
memberCard.setCardNo(buildCardForm.getCardNo());
|
||||
memberCard.setAmount(buildCardForm.getCardAmount());
|
||||
memberCard.setBuildCardAmount(buildCardForm.getCardAmount());
|
||||
memberCard.setGiveAmount(buildCardForm.getGiveAmount());
|
||||
|
||||
//获取订单的卡折扣信息 设置进会员卡中
|
||||
memberCard.setDiscount(card.getCardDiscount());
|
||||
|
||||
//设置该卡的提成金额
|
||||
memberCard.setPushMoney(card.getCardPushPercent());
|
||||
|
||||
memberCardService.save(memberCard);
|
||||
return memberCard;
|
||||
}
|
||||
|
||||
SellDetail addSellDetail(Sell sell, BuildCardSell buildCardSell, MemberCard membercard, Card card) {
|
||||
BuildCardForm buildCardForm = buildCardSell.getBuildCardForm();
|
||||
SellDetail sellDetail = new SellDetail();
|
||||
//3设置订单id 订单类型 订单状态
|
||||
sellDetail.setSellId(sell.getSellId());
|
||||
sellDetail.setSellType(sell.getSellType());
|
||||
sellDetail.setMemberId(sell.getMemberId());
|
||||
//设置商品信息
|
||||
sellDetail.setProductType(PRODUCT_TYPE_CARD);
|
||||
sellDetail.setCardId(buildCardForm.getCardId());
|
||||
sellDetail.setCardName(buildCardForm.getCardName());
|
||||
sellDetail.setAmount(buildCardForm.getCardAmount());
|
||||
sellDetail.setGiveAmount(buildCardForm.getGiveAmount());
|
||||
sellDetail.setRealAmount(sell.getRealAmount());
|
||||
sellDetail.setTotalRealAmount(buildCardForm.getTotalRealAmount());
|
||||
//设置会员信息
|
||||
sellDetail.setMemberCardId(membercard.getMemberCardId());
|
||||
|
||||
//开卡后卡金和赠送金
|
||||
sellDetail.setAmount(membercard.getAmount());
|
||||
sellDetail.setGiveAmount(membercard.getGiveAmount());
|
||||
|
||||
//保存销售细单
|
||||
sellDetailService.save(sellDetail);
|
||||
|
||||
//该条目有服务人员
|
||||
List<ServerVo> serverList = buildCardForm.getServerList();
|
||||
if (CollectionUtil.isNotEmpty(serverList)) {
|
||||
//如果是固定金额 固定金额除以人数 获取固定金额
|
||||
//如果是比例 计算出比例后提成 获取固定金额
|
||||
//业绩和提成均平均分
|
||||
//总提成
|
||||
BigDecimal totalPushMoney = BigDecimal.ZERO;
|
||||
//总业绩 为订单实付金额
|
||||
BigDecimal totalGradeMoney = sellDetail.getTotalRealAmount();
|
||||
//固定金额的话
|
||||
//按比例
|
||||
if (card.getCardPushPercent() != null) {
|
||||
//提成额 先转换为百分数
|
||||
BigDecimal pushPercent = BigDecimalUtil.div(card.getCardPushPercent(), new BigDecimal("100"));
|
||||
//折后价*百分数
|
||||
totalPushMoney = BigDecimalUtil.mul(totalGradeMoney, pushPercent);
|
||||
}
|
||||
|
||||
|
||||
//平均分
|
||||
BigDecimal pushMoney = BigDecimalUtil.div(totalPushMoney, new BigDecimal(serverList.size()));
|
||||
BigDecimal gradeMoney = BigDecimalUtil.div(totalGradeMoney, new BigDecimal(serverList.size()));
|
||||
|
||||
|
||||
//设置服务人员
|
||||
serverList.stream().forEach(server -> {
|
||||
SellDetailServer sellDetailServer = new SellDetailServer();
|
||||
sellDetailServer.setSellId(sell.getSellId());
|
||||
sellDetailServer.setSellDetailId(sellDetail.getSellDetailId());
|
||||
sellDetailServer.setServerId(server.getServerId());
|
||||
sellDetailServer.setServerName(server.getServerName());
|
||||
sellDetailServer.setServerPushMoney(pushMoney);
|
||||
sellDetailServer.setServerGrade(gradeMoney);
|
||||
sellDetailServerService.save(sellDetailServer);
|
||||
});
|
||||
}
|
||||
return sellDetail;
|
||||
}
|
||||
}
|
@ -0,0 +1,192 @@
|
||||
package com.dd.admin.business.pay.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.dd.admin.business.card.entity.Card;
|
||||
import com.dd.admin.business.card.service.CardService;
|
||||
import com.dd.admin.business.detailServer.entity.SellDetailServer;
|
||||
import com.dd.admin.business.detailServer.service.SellDetailServerService;
|
||||
import com.dd.admin.business.memberCard.domain.MemberCardVo;
|
||||
import com.dd.admin.business.memberCard.entity.MemberCard;
|
||||
import com.dd.admin.business.memberCard.service.MemberCardService;
|
||||
import com.dd.admin.business.pay.domain.*;
|
||||
import com.dd.admin.business.pay.service.AddSellDetailService;
|
||||
import com.dd.admin.business.pay.service.PayService;
|
||||
import com.dd.admin.business.sell.entity.Sell;
|
||||
import com.dd.admin.business.sell.service.SellService;
|
||||
import com.dd.admin.business.sellDetail.entity.SellDetail;
|
||||
import com.dd.admin.business.sellDetail.service.SellDetailService;
|
||||
import com.dd.admin.business.sellPay.entity.Sellpay;
|
||||
import com.dd.admin.business.sellPay.service.SellpayService;
|
||||
import com.dd.admin.business.server.domain.ServerVo;
|
||||
import com.dd.admin.common.exception.ApiException;
|
||||
import com.dd.admin.common.utils.BigDecimalUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
import static com.dd.admin.business.pay.enmus.CashierExceptionEnum.CARD_AMOUNT_CHANGE;
|
||||
import static com.dd.admin.business.pay.enmus.PayConst.PRODUCT_TYPE_CHARGED_CARD;
|
||||
|
||||
/**
|
||||
* MemberCardRenewServiceImpl 类,实现了 AddSellDetailService 接口,用于处理会员卡续卡的业务逻辑
|
||||
*/
|
||||
@Service
|
||||
public class SellDetailChargedCard implements AddSellDetailService {
|
||||
|
||||
@Autowired
|
||||
private MemberCardService memberCardService; // 用于操作会员卡相关业务
|
||||
@Autowired
|
||||
private SellDetailService sellDetailService; // 处理销售详情的服务
|
||||
@Autowired
|
||||
private PayService payService; // 支付相关的服务
|
||||
@Autowired
|
||||
private SellpayService sellpayService; // 销售支付的服务
|
||||
@Autowired
|
||||
private SellDetailServerService sellDetailServerService;
|
||||
@Autowired
|
||||
private CardService cardService;
|
||||
/**
|
||||
* 处理添加销售详情的方法
|
||||
*
|
||||
* @param sell 销售实体
|
||||
* @param baseSell 基础销售数据
|
||||
*/
|
||||
@Override
|
||||
public void addSellDetail(Sell sell, BaseSell baseSell) {
|
||||
// 将基础销售数据转换为 ChargedCardSell 类型
|
||||
ChargedCardSell chargedCardSell = (ChargedCardSell) baseSell;
|
||||
// 通过会员卡服务根据会员卡号获取会员信息
|
||||
MemberCard memberHistoryCard = memberCardService.getById(chargedCardSell.getMemberCardId());
|
||||
// 执行会员卡续卡的核心逻辑,并获取续卡后的会员信息
|
||||
MemberCard chargedMemberCard = chargedMemberCard(chargedCardSell, memberHistoryCard);
|
||||
|
||||
// 生成销售细单
|
||||
SellDetail sellDetail = createSellDetail(chargedCardSell, sell, chargedMemberCard);
|
||||
|
||||
// 通过销售支付服务添加销售支付列表
|
||||
sellpayService.addSellPayList(chargedCardSell.getSellPayList(), sell.getSellId());
|
||||
|
||||
// 通过支付服务设置销售的额外信息
|
||||
payService.setSellExtraInfo(sell.getSellId(), chargedMemberCard, BigDecimal.ZERO, BigDecimal.ZERO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行会员卡续卡的核心逻辑
|
||||
*
|
||||
* @param chargedCardSell 构建卡销售数据
|
||||
* @param memberHistoryCard 原会员卡信息
|
||||
* @return 续卡后的会员卡信息
|
||||
*/
|
||||
MemberCard chargedMemberCard(ChargedCardSell chargedCardSell, MemberCard memberHistoryCard) {
|
||||
// 获取原会员卡卡内金额
|
||||
BigDecimal memberBeforeAmount = memberHistoryCard.getAmount();
|
||||
// 获取原会员卡赠送金额
|
||||
BigDecimal memberBeforeGiveAmount = memberHistoryCard.getGiveAmount();
|
||||
|
||||
// 从构建卡销售数据中获取续卡表单
|
||||
ChargedCardForm chargedCardForm = chargedCardSell.getChargedCardForm();
|
||||
// 获取续卡充值金额
|
||||
BigDecimal chargedAmount = chargedCardForm.getChargedCardAmount();
|
||||
// 获取续卡赠送金额
|
||||
BigDecimal chargedGiveAmount = chargedCardForm.getChargedGiveAmount();
|
||||
|
||||
// 计算并设置续卡后的卡内金额
|
||||
memberHistoryCard.setAmount(BigDecimalUtil.add(memberBeforeAmount, chargedAmount));
|
||||
// 计算并设置续卡后的赠送金额
|
||||
memberHistoryCard.setGiveAmount(BigDecimalUtil.add(memberBeforeGiveAmount, chargedGiveAmount));
|
||||
|
||||
// 更新会员卡信息
|
||||
Boolean updated = memberCardService.updateById(memberHistoryCard);
|
||||
// 如果更新失败,抛出异常
|
||||
if (!updated) {
|
||||
throw new ApiException(CARD_AMOUNT_CHANGE);
|
||||
}
|
||||
|
||||
return memberHistoryCard;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建销售细单
|
||||
*
|
||||
* @param chargedCardSell 构建卡销售数据
|
||||
* @param sell 销售实体
|
||||
* @param memberCard 会员卡信息
|
||||
* @return 生成的销售细单
|
||||
*/
|
||||
SellDetail createSellDetail(ChargedCardSell chargedCardSell, Sell sell, MemberCard memberCard) {
|
||||
// 从构建卡销售数据中获取续卡表单
|
||||
ChargedCardForm chargedCardForm = chargedCardSell.getChargedCardForm();
|
||||
// 创建新的销售细单对象
|
||||
SellDetail sellDetail = new SellDetail();
|
||||
// 设置销售细单的销售 ID
|
||||
sellDetail.setSellId(sell.getSellId());
|
||||
// 设置销售细单的销售类型
|
||||
sellDetail.setSellType(sell.getSellType());
|
||||
// 设置销售细单的会员 ID
|
||||
sellDetail.setMemberId(sell.getMemberId());
|
||||
|
||||
// 设置销售细单的产品类型为续卡
|
||||
sellDetail.setProductType(PRODUCT_TYPE_CHARGED_CARD);
|
||||
// 设置销售细单的卡 ID
|
||||
sellDetail.setCardId(chargedCardForm.getCardId());
|
||||
// 设置销售细单的卡名称
|
||||
sellDetail.setCardName(chargedCardForm.getCardName());
|
||||
// 设置销售细单的续卡金额
|
||||
sellDetail.setAmount(chargedCardForm.getChargedCardAmount());
|
||||
// 设置销售细单的续卡赠送金额
|
||||
sellDetail.setGiveAmount(chargedCardForm.getChargedGiveAmount());
|
||||
// 设置销售细单的实际金额
|
||||
sellDetail.setRealAmount(chargedCardForm.getChargedCardAmount());
|
||||
sellDetail.setTotalRealAmount(chargedCardForm.getTotalRealAmount());
|
||||
// 设置销售细单的会员卡号
|
||||
sellDetail.setMemberCardId(memberCard.getMemberCardId());
|
||||
|
||||
// 保存销售细单
|
||||
sellDetailService.save(sellDetail);
|
||||
|
||||
|
||||
Card card = cardService.getById(chargedCardForm.getCardId());
|
||||
|
||||
|
||||
//该条目有服务人员
|
||||
List<ServerVo> serverList = chargedCardForm.getServerList();
|
||||
if (CollectionUtil.isNotEmpty(serverList)) {
|
||||
//如果是固定金额 固定金额除以人数 获取固定金额
|
||||
//如果是比例 计算出比例后提成 获取固定金额
|
||||
//业绩和提成均平均分
|
||||
//总提成
|
||||
BigDecimal totalPushMoney = BigDecimal.ZERO;
|
||||
//总业绩 为订单实付金额
|
||||
BigDecimal totalGradeMoney = sellDetail.getTotalRealAmount();
|
||||
//固定金额的话
|
||||
//按比例
|
||||
if (card.getCardPushPercent() != null) {
|
||||
//提成额 先转换为百分数
|
||||
BigDecimal pushPercent = BigDecimalUtil.div(card.getCardPushPercent(), new BigDecimal("100"));
|
||||
//折后价*百分数
|
||||
totalPushMoney = BigDecimalUtil.mul(totalGradeMoney, pushPercent);
|
||||
}
|
||||
|
||||
|
||||
//平均分
|
||||
BigDecimal pushMoney = BigDecimalUtil.div(totalPushMoney, new BigDecimal(serverList.size()));
|
||||
BigDecimal gradeMoney = BigDecimalUtil.div(totalGradeMoney, new BigDecimal(serverList.size()));
|
||||
|
||||
|
||||
//设置服务人员
|
||||
serverList.stream().forEach(server -> {
|
||||
SellDetailServer sellDetailServer = new SellDetailServer();
|
||||
sellDetailServer.setSellId(sell.getSellId());
|
||||
sellDetailServer.setSellDetailId(sellDetail.getSellDetailId());
|
||||
sellDetailServer.setServerId(server.getServerId());
|
||||
sellDetailServer.setServerName(server.getServerName());
|
||||
sellDetailServer.setServerPushMoney(pushMoney);
|
||||
sellDetailServer.setServerGrade(gradeMoney);
|
||||
sellDetailServerService.save(sellDetailServer);
|
||||
});
|
||||
}
|
||||
return sellDetail;
|
||||
}
|
||||
}
|
@ -0,0 +1,261 @@
|
||||
package com.dd.admin.business.pay.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.dd.admin.business.card.entity.Card;
|
||||
import com.dd.admin.business.card.service.CardService;
|
||||
import com.dd.admin.business.detailServer.entity.SellDetailServer;
|
||||
import com.dd.admin.business.detailServer.service.SellDetailServerService;
|
||||
import com.dd.admin.business.memberCard.domain.MemberCardVo;
|
||||
import com.dd.admin.business.memberCard.entity.MemberCard;
|
||||
import com.dd.admin.business.memberCard.service.MemberCardService;
|
||||
import com.dd.admin.business.pay.domain.*;
|
||||
import com.dd.admin.business.pay.service.AddSellDetailService;
|
||||
import com.dd.admin.business.pay.service.PayService;
|
||||
import com.dd.admin.business.product.entity.Product;
|
||||
import com.dd.admin.business.product.service.ProductService;
|
||||
import com.dd.admin.business.sell.entity.Sell;
|
||||
import com.dd.admin.business.sell.service.SellService;
|
||||
import com.dd.admin.business.sellDetail.entity.SellDetail;
|
||||
import com.dd.admin.business.sellDetail.service.SellDetailService;
|
||||
import com.dd.admin.business.sellPay.entity.Sellpay;
|
||||
import com.dd.admin.business.sellPay.service.SellpayService;
|
||||
import com.dd.admin.business.server.domain.ServerVo;
|
||||
import com.dd.admin.business.stock.entity.Stock;
|
||||
import com.dd.admin.business.stock.service.StockService;
|
||||
import com.dd.admin.business.stockDetail.entity.StockDetail;
|
||||
import com.dd.admin.business.stockDetail.service.StockDetailService;
|
||||
import com.dd.admin.common.exception.ApiException;
|
||||
import com.dd.admin.common.security.SecurityUtil;
|
||||
import com.dd.admin.common.utils.BigDecimalUtil;
|
||||
import com.dd.admin.common.utils.StringUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.dd.admin.business.pay.enmus.CashierExceptionEnum.*;
|
||||
import static com.dd.admin.business.pay.enmus.PayConst.*;
|
||||
import static com.dd.admin.common.consts.MemberShopConst.*;
|
||||
|
||||
@Service
|
||||
public class SellDetailMemberProduct implements AddSellDetailService {
|
||||
|
||||
@Autowired
|
||||
private MemberCardService memberCardService;
|
||||
@Autowired
|
||||
private SellDetailService sellDetailService;
|
||||
@Autowired
|
||||
private SellpayService sellpayService;
|
||||
@Autowired
|
||||
private PayService payService;
|
||||
@Autowired
|
||||
private ProductService productService;
|
||||
@Autowired
|
||||
private StockService stockService;
|
||||
@Autowired
|
||||
private StockDetailService stockDetailService;
|
||||
@Autowired
|
||||
private SellDetailServerService sellDetailServerService;
|
||||
@Override
|
||||
public void addSellDetail(Sell sell, BaseSell sellDto) {
|
||||
MemberProductSell memberProductSell = (MemberProductSell) sellDto;
|
||||
String memberCardId = memberProductSell.getMemberCardId();
|
||||
MemberCard memberCard = null;
|
||||
BigDecimal memberBeforeAmount = null;
|
||||
BigDecimal memberBeforeGiveAmount = null;
|
||||
|
||||
//如果有会员卡
|
||||
if(StringUtil.isNotEmpty(memberCardId)){
|
||||
//先获取消费前前金额
|
||||
MemberCard memberHistoryCard = memberCardService.getById(memberCardId);
|
||||
memberBeforeAmount = memberHistoryCard.getAmount();
|
||||
memberBeforeGiveAmount = memberHistoryCard.getGiveAmount();
|
||||
|
||||
//扣款
|
||||
memberCard = deductMemberCard(memberHistoryCard,memberProductSell.getSellPayList());
|
||||
}
|
||||
|
||||
//添加支付方式
|
||||
sellpayService.addSellPayList(memberProductSell.getSellPayList(),sell.getSellId());
|
||||
|
||||
//订单详情
|
||||
List<SellDetail> selldetailList = new ArrayList<>();
|
||||
|
||||
//获取订单详情
|
||||
List<ProductForm> productDetailFormList = memberProductSell.getProductFormList();
|
||||
MemberCard finalMemberCard = memberCard;
|
||||
//设置细单会员余额
|
||||
BigDecimal finalMemberBeforeAmount = memberBeforeAmount;
|
||||
BigDecimal finalMemberBeforeGiveAmount = memberBeforeGiveAmount;
|
||||
productDetailFormList.stream().forEach(productSellDetail -> {
|
||||
SellDetail selldetail = addSellDetail(productSellDetail,sell, finalMemberCard, finalMemberBeforeAmount, finalMemberBeforeGiveAmount);
|
||||
selldetailList.add(selldetail);
|
||||
});
|
||||
|
||||
payService.setSellExtraInfo(sell.getSellId(),memberCard,memberBeforeAmount,memberBeforeGiveAmount);
|
||||
}
|
||||
|
||||
//添加详情
|
||||
SellDetail addSellDetail(ProductForm productDetail , Sell sell, MemberCard memberCard,BigDecimal memberBeforeAmount,BigDecimal memberBeforeGiveAmount ){
|
||||
SellDetail sellDetail = new SellDetail();
|
||||
//3设置订单id 订单类型 订单状态
|
||||
sellDetail.setSellId(sell.getSellId());
|
||||
sellDetail.setSellType(sell.getSellType());
|
||||
sellDetail.setSellStatus(sell.getSellStatus());
|
||||
sellDetail.setMemberId(sell.getMemberId());
|
||||
|
||||
|
||||
//设置商品信息
|
||||
sellDetail.setProductType(PRODUCT_TYPE_PRODUCT);
|
||||
sellDetail.setProductId(productDetail.getProductId());
|
||||
sellDetail.setProductName(productDetail.getProductName());
|
||||
sellDetail.setAmount(productDetail.getProductAmount());
|
||||
sellDetail.setDiscount(productDetail.getDiscount());
|
||||
sellDetail.setCount(productDetail.getCount());
|
||||
sellDetail.setRealAmount(productDetail.getRealAmount());
|
||||
sellDetail.setTotalRealAmount(productDetail.getTotalRealAmount());
|
||||
//设置会员信息
|
||||
if(memberCard!=null){
|
||||
sellDetail.setCardId(memberCard.getCardId());
|
||||
sellDetail.setMemberCardId(memberCard.getMemberCardId());
|
||||
}
|
||||
|
||||
|
||||
Product product = productService.getById(productDetail.getProductId());
|
||||
|
||||
//减去库存信息
|
||||
if(product.getStockControl().equals(STOCK_CONTROL_YES)) {
|
||||
//创建入库总单
|
||||
Stock stock = new Stock();
|
||||
stock.setStockOutType(STOCK_OUT_TYPE_USE);
|
||||
stock.setStockTitle(DateUtil.formatChineseDate(new Date(), false, true) + SecurityUtil.getLoginUser().getDeptName() + "出库单");
|
||||
stock.setStockNo(StringUtil.getDateStringNow() + StringUtil.createCode(4));
|
||||
stock.setStockType(STOCK_OUT);
|
||||
stockService.save(stock);
|
||||
|
||||
StockDetail stockDetail = new StockDetail();
|
||||
stockDetail.setStockId(stock.getStockId());
|
||||
stockDetail.setProductId(product.getProductId());
|
||||
stockDetail.setProductName(product.getProductName());
|
||||
stockDetail.setCount(productDetail.getCount());
|
||||
|
||||
productService.subProductCount(product.getProductId(), productDetail.getCount());
|
||||
|
||||
stockDetailService.save(stockDetail);
|
||||
}
|
||||
|
||||
sellDetailService.save(sellDetail);
|
||||
|
||||
//该条目有服务人员
|
||||
List<ServerVo> serverList = productDetail.getServerList();
|
||||
if(CollectionUtil.isNotEmpty(serverList)) {
|
||||
//如果是固定金额 固定金额除以人数 获取固定金额
|
||||
//如果是比例 计算出比例后提成 获取固定金额
|
||||
//业绩和提成均平均分
|
||||
//总提成
|
||||
BigDecimal totalPushMoney = BigDecimal.ZERO;
|
||||
//总业绩 为订单实付金额
|
||||
BigDecimal totalGradeMoney = sellDetail.getTotalRealAmount();
|
||||
//固定金额的话
|
||||
if (product.getPushType().equals(PUSH_FIXED)) {
|
||||
totalPushMoney = BigDecimalUtil.mul(product.getPushAmount(),new BigDecimal(sellDetail.getCount()));
|
||||
|
||||
}
|
||||
//按比例
|
||||
if (product.getPushType().equals(PUSH_SCALE)) {
|
||||
//提成额 先转换为百分数
|
||||
BigDecimal pushPercent = BigDecimalUtil.div(product.getPushPercent(), new BigDecimal("100"));
|
||||
//折后价*百分数
|
||||
totalPushMoney = BigDecimalUtil.mul(totalGradeMoney, pushPercent);
|
||||
}
|
||||
|
||||
|
||||
//平均分
|
||||
BigDecimal pushMoney = BigDecimalUtil.div(totalPushMoney, new BigDecimal(serverList.size()));
|
||||
BigDecimal gradeMoney = BigDecimalUtil.div(totalGradeMoney, new BigDecimal(serverList.size()));
|
||||
|
||||
|
||||
//设置服务人员
|
||||
serverList.stream().forEach(server -> {
|
||||
SellDetailServer sellDetailServer = new SellDetailServer();
|
||||
sellDetailServer.setSellId(sell.getSellId());
|
||||
sellDetailServer.setSellDetailId(sellDetail.getSellDetailId());
|
||||
sellDetailServer.setServerId(server.getServerId());
|
||||
sellDetailServer.setServerName(server.getServerName());
|
||||
sellDetailServer.setServerPushMoney(pushMoney);
|
||||
sellDetailServer.setServerGrade(gradeMoney);
|
||||
sellDetailServerService.save(sellDetailServer);
|
||||
});
|
||||
|
||||
}
|
||||
return sellDetail;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//减去卡金
|
||||
MemberCard deductMemberCard(MemberCard memberHistoryCard, List<Sellpay> sellPayList){
|
||||
//消费前会员卡余额
|
||||
BigDecimal memberBeforeAmount = memberHistoryCard.getAmount();
|
||||
BigDecimal memberBeforeGiveAmount = memberHistoryCard.getGiveAmount();
|
||||
BigDecimal memberBeforeTotalAmount = BigDecimalUtil.add(memberBeforeAmount,memberBeforeGiveAmount);
|
||||
//订单需要支付的卡金
|
||||
BigDecimal memberCardCost = sellPayList.stream()
|
||||
.filter(p -> p.getPayType().equals(PAY_TYPE_CARD))
|
||||
.map(Sellpay::getAmount)
|
||||
.findFirst().orElse(BigDecimal.ZERO);
|
||||
//订单需要支付的金额 先扣卡金 退款仅退卡金
|
||||
//如果卡金足够支付
|
||||
try {
|
||||
if(memberBeforeAmount.compareTo(memberCardCost) > -1){
|
||||
BigDecimal memberAfterAmount = BigDecimalUtil.sub(memberBeforeAmount, memberCardCost);
|
||||
memberHistoryCard.setAmount(memberAfterAmount);
|
||||
//卡总金额是否够支付
|
||||
}else if(memberBeforeTotalAmount.compareTo(memberCardCost) > -1){
|
||||
//这里已经出现了卡金不够支付的情况了 所以置为0 减去的金额是赠送金需要支付的
|
||||
BigDecimal memberCardGiveCost = BigDecimalUtil.sub(memberCardCost, memberBeforeAmount);
|
||||
|
||||
sellPayList.stream().forEach(sellpay -> {
|
||||
if(sellpay.getPayType().equals(PAY_TYPE_CARD)){
|
||||
sellpay.setAmount(memberBeforeAmount);
|
||||
}
|
||||
});
|
||||
|
||||
memberHistoryCard.setAmount(BigDecimal.ZERO);
|
||||
|
||||
if(memberBeforeGiveAmount.compareTo(memberCardGiveCost) > -1){
|
||||
Sellpay sellpay = new Sellpay();
|
||||
sellpay.setPayType(PAY_TYPE_CARD_GIVE);
|
||||
sellpay.setAmount(memberCardGiveCost);
|
||||
sellpay.setPayName(PAY_TYPE_CARD_GIVE_NAME);
|
||||
sellPayList.add(sellpay);
|
||||
|
||||
BigDecimal memAfterGiveAmount = BigDecimalUtil.sub(memberBeforeGiveAmount, memberCardGiveCost);
|
||||
memberHistoryCard.setGiveAmount(memAfterGiveAmount);
|
||||
}
|
||||
}else{
|
||||
throw new ApiException(MEMBER_CARD_NOT_SUFFICIENT_FUNDS);
|
||||
}
|
||||
|
||||
Boolean b = memberCardService.updateById(memberHistoryCard);
|
||||
//监听数据 乐观锁改变
|
||||
if(!b){
|
||||
throw new ApiException(CARD_AMOUNT_CHANGE);
|
||||
}
|
||||
}catch (ArithmeticException e) {
|
||||
// 处理数值计算异常,并提供更详细的错误信息
|
||||
throw new RuntimeException("数值计算出现异常:" + e.getMessage(), e);
|
||||
}
|
||||
|
||||
return memberHistoryCard;
|
||||
}
|
||||
}
|
@ -0,0 +1,107 @@
|
||||
package com.dd.admin.business.product.controller;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.dd.admin.business.file.service.FileService;
|
||||
import com.dd.admin.common.aop.operationLog.aop.OperLog;
|
||||
import com.dd.admin.common.aop.operationLog.aop.OperType;
|
||||
import com.dd.admin.common.security.SecurityUtil;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
import com.dd.admin.common.model.result.ResultBean;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import com.dd.admin.business.product.entity.Product;
|
||||
import com.dd.admin.business.product.domain.ProductVo;
|
||||
import com.dd.admin.business.product.domain.ProductDto;
|
||||
import com.dd.admin.business.product.service.ProductService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 商品 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-23
|
||||
*/
|
||||
@Api(tags = "商品")
|
||||
@RestController
|
||||
public class ProductController {
|
||||
|
||||
@Autowired
|
||||
ProductService productService;
|
||||
|
||||
@Autowired
|
||||
FileService fileService;
|
||||
|
||||
@ApiOperation(value = "商品-分页列表")
|
||||
@ApiOperationSupport(order = 1)
|
||||
@GetMapping("/admin/product/page")
|
||||
@OperLog(operModule = "获取商品列表",operType = OperType.QUERY,operDesc = "获取商品列表")
|
||||
public ResultBean<IPage<ProductVo>> page(ProductDto productDto) {
|
||||
productDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
|
||||
IPage<ProductVo> pageInfo = productService.selectProductPage(productDto);
|
||||
pageInfo.getRecords().stream().forEach(productVo -> {
|
||||
String fileAuthUrl = fileService.getFileAuthUrl(productVo.getProductImage());
|
||||
productVo.setProductImageUrl(fileAuthUrl);
|
||||
});
|
||||
return ResultBean.success(pageInfo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "商品-列表")
|
||||
@ApiOperationSupport(order = 2)
|
||||
@GetMapping("/admin/product/list")
|
||||
public ResultBean<List<ProductVo>> list(ProductDto productDto) {
|
||||
productDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
|
||||
List<ProductVo> list = productService.selectProductList(productDto);
|
||||
list.stream().forEach(productVo -> {
|
||||
String fileAuthUrl = fileService.getFileAuthUrl(productVo.getProductImage());
|
||||
productVo.setProductImageUrl(fileAuthUrl);
|
||||
});
|
||||
return ResultBean.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "商品-添加")
|
||||
@ApiOperationSupport(order = 3)
|
||||
@PostMapping("/admin/product/add")
|
||||
@OperLog(operModule = "商品-添加",operType = OperType.ADD,operDesc = "商品-添加")
|
||||
public ResultBean<Product> add(@RequestBody @Validated ProductDto productDto) {
|
||||
Product product = BeanUtil.copyProperties(productDto, Product.class);
|
||||
productService.save(product);
|
||||
return ResultBean.success(product);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "商品-查询")
|
||||
@ApiOperationSupport(order = 4)
|
||||
@GetMapping("/admin/product/{productId}")
|
||||
public ResultBean<ProductVo> get(@PathVariable @NotBlank String productId) {
|
||||
Product product = productService.getById(productId);
|
||||
ProductVo productVo = BeanUtil.copyProperties(product,ProductVo.class);
|
||||
return ResultBean.success(productVo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "商品-修改")
|
||||
@ApiOperationSupport(order = 5)
|
||||
@PostMapping("/admin/product/update")
|
||||
public ResultBean<Product> update(@RequestBody @Validated(UpdateGroup.class) ProductDto productDto) {
|
||||
Product product = BeanUtil.copyProperties(productDto, Product.class);
|
||||
productService.updateById(product);
|
||||
return ResultBean.success(product);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "商品-删除")
|
||||
@ApiOperationSupport(order = 6)
|
||||
@GetMapping("/admin/product/delete/{productId}")
|
||||
public ResultBean<Product> delete(@PathVariable @NotBlank String productId) {
|
||||
Boolean b = productService.removeById(productId);
|
||||
return ResultBean.success(b);
|
||||
}
|
||||
}
|
@ -0,0 +1,114 @@
|
||||
package com.dd.admin.business.product.domain;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import com.dd.admin.common.model.UpdateGroup;
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 商品返回对象
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-23
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value="商品接收对象")
|
||||
public class ProductDto {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "商品id")
|
||||
@NotBlank(message = "商品id不能为空",groups = UpdateGroup.class)
|
||||
private String productId;
|
||||
|
||||
@ApiModelProperty(value = "分类id")
|
||||
@NotBlank(message = "分类不能为空")
|
||||
private String categoryId;
|
||||
|
||||
@ApiModelProperty(value = "分类名")
|
||||
@NotBlank(message = "分类不能为空")
|
||||
private String categoryName;
|
||||
|
||||
@ApiModelProperty(value = "商品名")
|
||||
@NotBlank(message = "商品名不能为空")
|
||||
private String productName;
|
||||
|
||||
@ApiModelProperty(value = "商品金额")
|
||||
private BigDecimal productAmount;
|
||||
|
||||
@ApiModelProperty(value = "商品会员金额")
|
||||
private BigDecimal productMemberAmount;
|
||||
|
||||
@ApiModelProperty(value = "商品图片")
|
||||
private String productImage;
|
||||
|
||||
@ApiModelProperty(value = "库存数量")
|
||||
private Long productCount;
|
||||
|
||||
|
||||
@ApiModelProperty(value = "提成金额")
|
||||
private BigDecimal pushAmount;
|
||||
|
||||
@ApiModelProperty(value = "提成比例")
|
||||
private BigDecimal pushPercent;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1下架")
|
||||
private Integer productStatus;
|
||||
|
||||
@ApiModelProperty(value = "乐观锁字段")
|
||||
private Long version;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1删除")
|
||||
private Integer deleted;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建人id")
|
||||
private String createId;
|
||||
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "修改人")
|
||||
private String updateName;
|
||||
|
||||
@ApiModelProperty(value = "修改人id")
|
||||
private String updateId;
|
||||
|
||||
@ApiModelProperty(value = "0不开启 1开启")
|
||||
@NotNull(message = "库存管理不能为空")
|
||||
private Integer stockControl;
|
||||
|
||||
@ApiModelProperty(value = "0固定金额 1比例")
|
||||
@NotNull(message = "提成规则不能为空")
|
||||
private Integer pushType;
|
||||
|
||||
@ApiModelProperty(value = "搜索关键字")
|
||||
private String keyword;
|
||||
}
|
@ -0,0 +1,105 @@
|
||||
package com.dd.admin.business.product.domain;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 商品返回对象
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-23
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value="商品返回对象")
|
||||
public class ProductVo {
|
||||
|
||||
|
||||
@ApiModelProperty(value = "商品id")
|
||||
private String productId;
|
||||
|
||||
@ApiModelProperty(value = "分类id")
|
||||
private String categoryId;
|
||||
|
||||
@ApiModelProperty(value = "分类名")
|
||||
private String categoryName;
|
||||
|
||||
@ApiModelProperty(value = "商品名")
|
||||
private String productName;
|
||||
|
||||
@ApiModelProperty(value = "商品金额")
|
||||
private BigDecimal productAmount;
|
||||
|
||||
@ApiModelProperty(value = "商品会员金额")
|
||||
private BigDecimal productMemberAmount;
|
||||
|
||||
@ApiModelProperty(value = "商品图片")
|
||||
private String productImage;
|
||||
|
||||
@ApiModelProperty(value = "商品图片")
|
||||
private String productImageUrl;
|
||||
|
||||
@ApiModelProperty(value = "库存数量")
|
||||
private Long productCount;
|
||||
|
||||
@ApiModelProperty(value = "提成金额")
|
||||
private BigDecimal pushAmount;
|
||||
|
||||
@ApiModelProperty(value = "提成比例")
|
||||
private BigDecimal pushPercent;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1下架")
|
||||
private Integer productStatus;
|
||||
|
||||
@ApiModelProperty(value = "乐观锁字段")
|
||||
private Long version;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1删除")
|
||||
private Integer deleted;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建人id")
|
||||
private String createId;
|
||||
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "修改人")
|
||||
private String updateName;
|
||||
|
||||
@ApiModelProperty(value = "修改人id")
|
||||
private String updateId;
|
||||
|
||||
@ApiModelProperty(value = "0不开启 1开启")
|
||||
private Integer stockControl;
|
||||
|
||||
@ApiModelProperty(value = "0固定金额 1比例")
|
||||
private Integer pushType;
|
||||
|
||||
}
|
132
src/main/java/com/dd/admin/business/product/entity/Product.java
Normal file
@ -0,0 +1,132 @@
|
||||
package com.dd.admin.business.product.entity;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.Version;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import java.io.Serializable;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 商品
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-23
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("business_product")
|
||||
@ApiModel(value="Product对象", description="商品")
|
||||
public class Product implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "商品id")
|
||||
@TableId(value = "PRODUCT_ID", type = IdType.ASSIGN_UUID)
|
||||
private String productId;
|
||||
|
||||
@ApiModelProperty(value = "分类id")
|
||||
@TableField("CATEGORY_ID")
|
||||
private String categoryId;
|
||||
|
||||
@ApiModelProperty(value = "分类名")
|
||||
@TableField("CATEGORY_NAME")
|
||||
private String categoryName;
|
||||
|
||||
@ApiModelProperty(value = "商品名")
|
||||
@TableField("PRODUCT_NAME")
|
||||
private String productName;
|
||||
|
||||
@ApiModelProperty(value = "商品金额")
|
||||
@TableField("PRODUCT_AMOUNT")
|
||||
private BigDecimal productAmount;
|
||||
|
||||
@ApiModelProperty(value = "商品会员金额")
|
||||
@TableField("PRODUCT_MEMBER_AMOUNT")
|
||||
private BigDecimal productMemberAmount;
|
||||
|
||||
@ApiModelProperty(value = "商品图片")
|
||||
@TableField("PRODUCT_IMAGE")
|
||||
private String productImage;
|
||||
|
||||
@ApiModelProperty(value = "库存数量")
|
||||
@TableField("PRODUCT_COUNT")
|
||||
private Long productCount;
|
||||
|
||||
@ApiModelProperty(value = "库存数量")
|
||||
@TableField(exist = false)
|
||||
private Long count;
|
||||
|
||||
|
||||
@ApiModelProperty(value = "提成金额")
|
||||
@TableField("PUSH_AMOUNT")
|
||||
private BigDecimal pushAmount;
|
||||
|
||||
@ApiModelProperty(value = "提成比例")
|
||||
@TableField("PUSH_PERCENT")
|
||||
private BigDecimal pushPercent;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1下架")
|
||||
@TableField("PRODUCT_STATUS")
|
||||
private Integer productStatus;
|
||||
|
||||
@ApiModelProperty(value = "乐观锁字段")
|
||||
@TableField("VERSION")
|
||||
@Version
|
||||
private Long version;
|
||||
|
||||
@ApiModelProperty(value = "0正常 1删除")
|
||||
@TableField("DELETED")
|
||||
@TableLogic
|
||||
private Integer deleted;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
@TableField(value = "SHOP_ID", fill = FieldFill.INSERT)
|
||||
private String shopId;
|
||||
|
||||
@ApiModelProperty(value = "门店名")
|
||||
@TableField(value = "SHOP_NAME", fill = FieldFill.INSERT)
|
||||
private String shopName;
|
||||
|
||||
@ApiModelProperty(value = "创建人")
|
||||
@TableField(value = "CREATE_NAME", fill = FieldFill.INSERT)
|
||||
private String createName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建人id")
|
||||
@TableField(value = "CREATE_ID", fill = FieldFill.INSERT)
|
||||
private String createId;
|
||||
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
@TableField(value = "UPDATE_TIME", fill = FieldFill.UPDATE)
|
||||
private Date updateTime;
|
||||
|
||||
@ApiModelProperty(value = "修改人")
|
||||
@TableField(value = "UPDATE_NAME", fill = FieldFill.UPDATE)
|
||||
private String updateName;
|
||||
|
||||
@ApiModelProperty(value = "修改人id")
|
||||
@TableField(value = "UPDATE_ID", fill = FieldFill.UPDATE)
|
||||
private String updateId;
|
||||
|
||||
@ApiModelProperty(value = "0不开启 1开启")
|
||||
@TableField("STOCK_CONTROL")
|
||||
private Integer stockControl;
|
||||
|
||||
@ApiModelProperty(value = "0固定金额 1比例")
|
||||
@TableField("PUSH_TYPE")
|
||||
private Integer pushType;
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package com.dd.admin.business.product.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.dd.admin.business.product.entity.Product;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.dd.admin.business.product.domain.ProductVo;
|
||||
import com.dd.admin.business.product.domain.ProductDto;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 商品 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-23
|
||||
*/
|
||||
@Mapper
|
||||
public interface ProductMapper extends BaseMapper<Product> {
|
||||
|
||||
IPage<ProductVo> selectProductPage(Page<ProductVo> page, @Param("productDto") ProductDto productDto);
|
||||
|
||||
List<ProductVo> selectProductList(@Param("productDto") ProductDto productDto);
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
<?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="com.dd.admin.business.product.mapper.ProductMapper">
|
||||
|
||||
<!-- 通用查询映射结果 -->
|
||||
<resultMap id="BaseResultMap" type="com.dd.admin.business.product.entity.Product">
|
||||
<id column="PRODUCT_ID" property="productId" />
|
||||
<result column="CATEGORY_ID" property="categoryId" />
|
||||
<result column="CATEGORY_NAME" property="categoryName" />
|
||||
<result column="PRODUCT_NAME" property="productName" />
|
||||
<result column="PRODUCT_AMOUNT" property="productAmount" />
|
||||
<result column="PRODUCT_MEMBER_AMOUNT" property="productMemberAmount" />
|
||||
<result column="PRODUCT_IMAGE" property="productImage" />
|
||||
<result column="PRODUCT_COUNT" property="productCount" />
|
||||
<result column="PUSH_AMOUNT" property="pushAmount" />
|
||||
<result column="PUSH_PERCENT" property="pushPercent" />
|
||||
<result column="PRODUCT_STATUS" property="productStatus" />
|
||||
<result column="VERSION" property="version" />
|
||||
<result column="DELETED" property="deleted" />
|
||||
<result column="SHOP_ID" property="shopId" />
|
||||
<result column="SHOP_NAME" property="shopName" />
|
||||
<result column="CREATE_NAME" property="createName" />
|
||||
<result column="CREATE_TIME" property="createTime" />
|
||||
<result column="CREATE_ID" property="createId" />
|
||||
<result column="UPDATE_TIME" property="updateTime" />
|
||||
<result column="UPDATE_NAME" property="updateName" />
|
||||
<result column="UPDATE_ID" property="updateId" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 通用查询结果列 -->
|
||||
<sql id="Base_Column_List">
|
||||
PRODUCT_ID, CATEGORY_ID, CATEGORY_NAME, PRODUCT_NAME, PRODUCT_AMOUNT, PRODUCT_MEMBER_AMOUNT, PRODUCT_IMAGE, PRODUCT_COUNT, PUSH_AMOUNT, PUSH_PERCENT, PRODUCT_STATUS, VERSION, DELETED, SHOP_ID, SHOP_NAME, CREATE_NAME, CREATE_TIME, CREATE_ID, UPDATE_TIME, UPDATE_NAME, UPDATE_ID
|
||||
</sql>
|
||||
|
||||
<select id="selectProductPage" resultType="com.dd.admin.business.product.domain.ProductVo">
|
||||
select
|
||||
*
|
||||
from business_product where 1 = 1
|
||||
<if test="productDto.keyword != null and productDto.keyword != ''">
|
||||
and PRODUCT_NAME like CONCAT('%', #{productDto.keyword}, '%')
|
||||
</if>
|
||||
<if test="productDto.categoryId != null and productDto.categoryId != ''">
|
||||
and CATEGORY_ID = #{productDto.categoryId}
|
||||
</if>
|
||||
<if test="productDto.deleted != null">
|
||||
and DELETED = #{productDto.deleted}
|
||||
</if>
|
||||
<if test="productDto.stockControl != null">
|
||||
and STOCK_CONTROL = #{productDto.stockControl}
|
||||
</if>
|
||||
<if test="productDto.productStatus != null">
|
||||
and PRODUCT_STATUS = #{productDto.productStatus}
|
||||
</if>
|
||||
<if test="productDto.shopId != null and productDto.shopId != ''">
|
||||
and shop_id = #{productDto.shopId}
|
||||
</if>
|
||||
order by create_time desc
|
||||
</select>
|
||||
|
||||
<select id="selectProductList" resultType="com.dd.admin.business.product.domain.ProductVo">
|
||||
select
|
||||
*
|
||||
from business_product where 1 = 1
|
||||
<if test="productDto.categoryId != null and productDto.categoryId != ''">
|
||||
and category_id = #{productDto.categoryId}
|
||||
</if>
|
||||
<if test="productDto.deleted != null">
|
||||
and DELETED = #{productDto.deleted}
|
||||
</if>
|
||||
<if test="productDto.stockControl != null">
|
||||
and STOCK_CONTROL = #{productDto.stockControl}
|
||||
</if>
|
||||
<if test="productDto.shopId != null and productDto.shopId != ''">
|
||||
and shop_id = #{productDto.shopId}
|
||||
</if>
|
||||
<if test="productDto.productStatus != null">
|
||||
and PRODUCT_STATUS = #{productDto.productStatus}
|
||||
</if>
|
||||
order by create_time desc
|
||||
</select>
|
||||
</mapper>
|
@ -0,0 +1,34 @@
|
||||
package com.dd.admin.business.product.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.dd.admin.business.product.entity.Product;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.dd.admin.business.product.domain.ProductVo;
|
||||
import com.dd.admin.business.product.domain.ProductDto;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 商品 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author 727869402@qq.com
|
||||
* @since 2024-05-23
|
||||
*/
|
||||
public interface ProductService extends IService<Product> {
|
||||
|
||||
//商品-分页列表
|
||||
IPage<ProductVo> selectProductPage(ProductDto productDto);
|
||||
|
||||
//商品-列表
|
||||
List<ProductVo> selectProductList(ProductDto productDto);
|
||||
|
||||
Product addProductCount(String productId,Long count);
|
||||
|
||||
Product subProductCount(String productId,Long count);
|
||||
|
||||
//根据机构shopId查询商品库存数量排行(可指定返回数量)
|
||||
List<Product> getProductStockRankByShopId(String shopId, Integer limit);
|
||||
|
||||
Integer selectProductCount(String shopId);
|
||||
}
|