第一次提交

This commit is contained in:
wangxulei 2024-12-06 22:42:03 +08:00
commit 2e054b0966
535 changed files with 49684 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

165
LICENSE Normal file
View 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
View File

@ -0,0 +1,74 @@
**线上预览:** [http://120.26.95.195:8889/](http://120.26.95.195:8889/)
**欢迎页**
![欢迎页](preview/2021204%20(2).png)
**收银台**
![收银台](preview/2021204%20(5).png)
![收银台-开卡](preview/2021204%20(4).png)
**会员管理**
![会员管理](preview/2021204%20(6).png)
**库存管理**
![入库](preview/2021204%20(1).png)
![选择商品](preview/2021204%20(8).png)
**订单管理**
![订单管理](preview/2021204%20(3).png)
## 简单版思维导图
![思维导图](whiteboard_exported_image.png)
## springboot_vue
正式开发前我们都需要一个完整的 可拓展性基础框架用于后续项目进行 这里我就把自己用的一套整合出来供大家学习使用
## 首先你要掌握的技能
在这里我不再对整合进行赘述 技能从来都是从实战中积累的:
1. springboot框架的基本使用
2. jwt security的基本整合
3. mybatisplus 的使用 (基于瓷完成了前后端代码生成);
4. rabc框架的基本理解
5. vue环境的基本搭建 npm命令使用
6. element框架的整合
7. linux简单部署这个后续我会结合脚本来进行
## 我们将要做的系统的一个展示
![系统演示](a5ce34cbfe774c9fbad8be527b869f3b.png)
1. 动态路由 有了这个功能 前端就不用进行硬代码的配置 后台编辑即可 也可以快速的进行路由的改名和删除
2. 多角色 基础动态路由 多角色就变的简单了 同时也更方便管理系统
3. 多tab客户还是习惯像打开浏览器那也操作我们的系统 所以这个必不可少
## 包结构说名
后端
- 目前后端功能基本能满足我们需求
- 后续开发建立和system同级目录 进行功能开发即可
![后台包目录](07e05adbd0ad444c94dbff007c286782.png)
前端
![前台包目录](7107613a141f4739ad385773b0199aa9.png)
## 程序的运行
**后端**
1. 导入pom文件进行依赖下载
2. 修改yml数据源和缓存配置
3. 运行AdminApplication 启动
**前端**
1. 执行npm install 下载依赖(下载慢可以执行) `npm conf set registry https://registry.npm.taobao.org`
2. npm run dev进行系统的启动
## 启动后截图
**登陆**
![登陆](b41683ee6b144da7afed88e485882213.png)
**工作台**
![工作台](9ab46710e8134feda151c12b282a931f.png)
**菜单权限管理**
![输入图片说明](3281c7e277534f11b7fb431afcf4b8b1.png)
![输入图片说明](132ecc5b910049c5a970a32c42d9d069.png)
## 写到最后
**代码地址** [https://gitee.com/ddeatrr/springboot_vue](https://gitee.com/xay12/springboot_vue)
**问题反馈** qq: 727869402 wx: MAMBA_4EVER24

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 KiB

160
pom.xml Normal file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

BIN
preview/2021204 (2).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

BIN
preview/2021204 (3).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 KiB

BIN
preview/2021204 (4).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
preview/2021204 (5).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

BIN
preview/2021204 (6).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

BIN
preview/2021204 (7).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

BIN
preview/2021204 (8).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

View 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);
}
}

View File

@ -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);
}
}

View 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;
}

View 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;
}

View 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;
}

View File

@ -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);
}

View File

@ -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>

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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>

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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>

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View 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;
}

View 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;
}

View 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;
}

View File

@ -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);
}

View File

@ -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>

View File

@ -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);
}

View File

@ -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 "";
}
}

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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>

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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>

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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>

View File

@ -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);
}

View File

@ -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);
}
}

View 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);
}
}

View 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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View 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;
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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;
}

View 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;
}

View File

@ -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);
}

View File

@ -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>

View File

@ -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);
}

Some files were not shown because too many files have changed in this diff Show More