commit 2e054b096674f1c66f2f2a4b8b23e10938cf3742
Author: wangxulei <727869402@qq.com>
Date: Fri Dec 6 22:42:03 2024 +0800
第一次提交
diff --git a/07e05adbd0ad444c94dbff007c286782.png b/07e05adbd0ad444c94dbff007c286782.png
new file mode 100644
index 0000000..2eca169
Binary files /dev/null and b/07e05adbd0ad444c94dbff007c286782.png differ
diff --git a/132ecc5b910049c5a970a32c42d9d069.png b/132ecc5b910049c5a970a32c42d9d069.png
new file mode 100644
index 0000000..380e5ec
Binary files /dev/null and b/132ecc5b910049c5a970a32c42d9d069.png differ
diff --git a/3281c7e277534f11b7fb431afcf4b8b1.png b/3281c7e277534f11b7fb431afcf4b8b1.png
new file mode 100644
index 0000000..a53e850
Binary files /dev/null and b/3281c7e277534f11b7fb431afcf4b8b1.png differ
diff --git a/7107613a141f4739ad385773b0199aa9.png b/7107613a141f4739ad385773b0199aa9.png
new file mode 100644
index 0000000..dbab412
Binary files /dev/null and b/7107613a141f4739ad385773b0199aa9.png differ
diff --git a/9ab46710e8134feda151c12b282a931f.png b/9ab46710e8134feda151c12b282a931f.png
new file mode 100644
index 0000000..ac649f7
Binary files /dev/null and b/9ab46710e8134feda151c12b282a931f.png differ
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..65c5ca8
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,165 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ 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.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..6d50007
--- /dev/null
+++ b/README.md
@@ -0,0 +1,74 @@
+
+**线上预览:** [http://120.26.95.195:8889/](http://120.26.95.195:8889/)
+
+**欢迎页**
+.png)
+**收银台**
+.png)
+.png)
+**会员管理**
+.png)
+**库存管理**
+.png)
+.png)
+**订单管理**
+.png)
+
+## 简单版思维导图
+
+## springboot_vue
+
+正式开发前我们都需要一个完整的 可拓展性基础框架用于后续项目进行 这里我就把自己用的一套整合出来供大家学习使用
+
+## 首先你要掌握的技能
+
+在这里我不再对整合进行赘述 技能从来都是从实战中积累的:
+ 1. springboot框架的基本使用;
+ 2. jwt security的基本整合;
+ 3. mybatisplus 的使用 (基于瓷完成了前后端代码生成);
+ 4. rabc框架的基本理解;
+ 5. vue环境的基本搭建 npm命令使用;
+ 6. element框架的整合;
+ 7. linux简单部署(这个后续我会结合脚本来进行);
+
+## 我们将要做的系统的一个展示
+
+
+
+ 1. 动态路由 有了这个功能 前端就不用进行硬代码的配置 后台编辑即可 也可以快速的进行路由的改名和删除
+ 2. 多角色 基础动态路由 多角色就变的简单了 同时也更方便管理系统
+ 3. 多tab客户还是习惯像打开浏览器那也操作我们的系统 所以这个必不可少
+
+## 包结构说名
+后端
+
+ - 目前后端功能基本能满足我们需求
+ - 后续开发建立和system同级目录 进行功能开发即可
+
+前端
+
+
+## 程序的运行
+**后端**
+ 1. 导入pom文件进行依赖下载
+ 2. 修改yml数据源和缓存配置
+ 3. 运行AdminApplication 启动
+
+**前端**
+1. 执行npm install 下载依赖(下载慢可以执行) `npm conf set registry https://registry.npm.taobao.org`
+2. npm run dev进行系统的启动
+
+## 启动后截图
+**登陆**
+
+**工作台**
+
+**菜单权限管理**
+
+
+
+
+## 写到最后
+**代码地址** [https://gitee.com/ddeatrr/springboot_vue](https://gitee.com/xay12/springboot_vue)
+**问题反馈** qq: 727869402 wx: MAMBA_4EVER24
+
diff --git a/a5ce34cbfe774c9fbad8be527b869f3b.png b/a5ce34cbfe774c9fbad8be527b869f3b.png
new file mode 100644
index 0000000..4479275
Binary files /dev/null and b/a5ce34cbfe774c9fbad8be527b869f3b.png differ
diff --git a/b41683ee6b144da7afed88e485882213.png b/b41683ee6b144da7afed88e485882213.png
new file mode 100644
index 0000000..12aaade
Binary files /dev/null and b/b41683ee6b144da7afed88e485882213.png differ
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..9c500ec
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,160 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.5.12
+
+
+ com.dd
+ member
+ 0.1
+ admin
+ Demo project for Spring Boot
+
+ 1.8
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+
+ org.springframework.security
+ spring-security-test
+ test
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+
+ mysql
+ mysql-connector-java
+ runtime
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.4.3
+
+
+
+ com.baomidou
+ mybatis-plus-generator
+ 3.4.1
+
+
+
+ org.springframework.boot
+ spring-boot-starter-freemarker
+
+
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ 2.0.7
+
+
+
+
+
+ cn.hutool
+ hutool-all
+ 5.7.2
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.73
+
+
+
+
+ io.jsonwebtoken
+ jjwt
+ 0.9.1
+
+
+
+
+ p6spy
+ p6spy
+ 3.8.5
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+ src/main/java
+
+ **/*.properties
+ **/*.xml
+
+ false
+
+
+ src/main/resources
+
+
+
+
+
diff --git a/preview/2021204 (1).png b/preview/2021204 (1).png
new file mode 100644
index 0000000..c6b43a3
Binary files /dev/null and b/preview/2021204 (1).png differ
diff --git a/preview/2021204 (2).png b/preview/2021204 (2).png
new file mode 100644
index 0000000..f9a783f
Binary files /dev/null and b/preview/2021204 (2).png differ
diff --git a/preview/2021204 (3).png b/preview/2021204 (3).png
new file mode 100644
index 0000000..74571da
Binary files /dev/null and b/preview/2021204 (3).png differ
diff --git a/preview/2021204 (4).png b/preview/2021204 (4).png
new file mode 100644
index 0000000..fcfee31
Binary files /dev/null and b/preview/2021204 (4).png differ
diff --git a/preview/2021204 (5).png b/preview/2021204 (5).png
new file mode 100644
index 0000000..5e9527f
Binary files /dev/null and b/preview/2021204 (5).png differ
diff --git a/preview/2021204 (6).png b/preview/2021204 (6).png
new file mode 100644
index 0000000..650b12d
Binary files /dev/null and b/preview/2021204 (6).png differ
diff --git a/preview/2021204 (7).png b/preview/2021204 (7).png
new file mode 100644
index 0000000..2ff7907
Binary files /dev/null and b/preview/2021204 (7).png differ
diff --git a/preview/2021204 (8).png b/preview/2021204 (8).png
new file mode 100644
index 0000000..2b8d691
Binary files /dev/null and b/preview/2021204 (8).png differ
diff --git a/src/main/java/com/dd/admin/AdminApplication.java b/src/main/java/com/dd/admin/AdminApplication.java
new file mode 100644
index 0000000..07d2945
--- /dev/null
+++ b/src/main/java/com/dd/admin/AdminApplication.java
@@ -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);
+ }
+
+}
diff --git a/src/main/java/com/dd/admin/business/card/controller/CardController.java b/src/main/java/com/dd/admin/business/card/controller/CardController.java
new file mode 100644
index 0000000..9dc1e57
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/card/controller/CardController.java
@@ -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;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @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> page(CardDto cardDto) {
+ cardDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
+ IPage pageInfo = cardService.selectCardPage(cardDto);
+ return ResultBean.success(pageInfo);
+ }
+
+ @ApiOperation(value = "-列表")
+ @ApiOperationSupport(order = 2)
+ @GetMapping("/admin/card/list")
+ public ResultBean> list(CardDto cardDto) {
+ cardDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
+ List 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 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 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 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 delete(@PathVariable @NotBlank String cardId) {
+ Boolean b = cardService.removeById(cardId);
+ return ResultBean.success(b);
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/card/domain/CardDto.java b/src/main/java/com/dd/admin/business/card/domain/CardDto.java
new file mode 100644
index 0000000..bc47bc7
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/card/domain/CardDto.java
@@ -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;
+
+
+/**
+ *
+ * 返回对象
+ *
+ *
+ * @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;
+}
diff --git a/src/main/java/com/dd/admin/business/card/domain/CardVo.java b/src/main/java/com/dd/admin/business/card/domain/CardVo.java
new file mode 100644
index 0000000..2940e5c
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/card/domain/CardVo.java
@@ -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;
+
+/**
+ *
+ * 返回对象
+ *
+ *
+ * @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;
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/card/entity/Card.java b/src/main/java/com/dd/admin/business/card/entity/Card.java
new file mode 100644
index 0000000..c4082c9
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/card/entity/Card.java
@@ -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;
+
+/**
+ *
+ *
+ *
+ *
+ * @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;
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/card/mapper/CardMapper.java b/src/main/java/com/dd/admin/business/card/mapper/CardMapper.java
new file mode 100644
index 0000000..2acc653
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/card/mapper/CardMapper.java
@@ -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;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-17
+ */
+@Mapper
+public interface CardMapper extends BaseMapper {
+
+ IPage selectCardPage(Page page, @Param("cardDto") CardDto cardDto);
+
+ List selectCardList(@Param("cardDto") CardDto cardDto);
+}
diff --git a/src/main/java/com/dd/admin/business/card/mapper/xml/CardMapper.xml b/src/main/java/com/dd/admin/business/card/mapper/xml/CardMapper.xml
new file mode 100644
index 0000000..7f5c718
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/card/mapper/xml/CardMapper.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+ select
+ *
+ from business_card where DELETED = 0
+
+ and shop_id = #{cardDto.shopId}
+
+
+ and CARD_NAME like CONCAT('%', #{cardDto.keyword}, '%')
+
+ order by create_time desc
+
+
+
+ select
+ *
+ from business_card where DELETED = 0
+
+ and shop_id = #{cardDto.shopId}
+
+ order by create_time desc
+
+
diff --git a/src/main/java/com/dd/admin/business/card/service/CardService.java b/src/main/java/com/dd/admin/business/card/service/CardService.java
new file mode 100644
index 0000000..2308b90
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/card/service/CardService.java
@@ -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;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-17
+ */
+public interface CardService extends IService {
+
+ //-分页列表
+ IPage selectCardPage(CardDto cardDto);
+
+ //-列表
+ List selectCardList(CardDto cardDto);
+
+}
diff --git a/src/main/java/com/dd/admin/business/card/service/impl/CardServiceImpl.java b/src/main/java/com/dd/admin/business/card/service/impl/CardServiceImpl.java
new file mode 100644
index 0000000..45a1c17
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/card/service/impl/CardServiceImpl.java
@@ -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;
+
+/**
+ *
+ * 服务实现类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-17
+ */
+@Service
+public class CardServiceImpl extends ServiceImpl implements CardService {
+
+ @Override
+ public IPage selectCardPage(CardDto cardDto) {
+ Page page = PageFactory.defaultPage();
+ return baseMapper.selectCardPage(page,cardDto);
+ }
+
+ @Override
+ public List selectCardList(CardDto cardDto) {
+ return baseMapper.selectCardList(cardDto);
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/category/controller/CategoryController.java b/src/main/java/com/dd/admin/business/category/controller/CategoryController.java
new file mode 100644
index 0000000..b10d0a1
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/category/controller/CategoryController.java
@@ -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;
+
+/**
+ *
+ * 分类 前端控制器
+ *
+ *
+ * @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> page(CategoryDto categoryDto) {
+ categoryDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
+ IPage pageInfo = categoryService.selectCategoryPage(categoryDto);
+ return ResultBean.success(pageInfo);
+ }
+
+ @ApiOperation(value = "分类-列表")
+ @ApiOperationSupport(order = 2)
+ @GetMapping("/admin/category/list")
+ public ResultBean> list(CategoryDto categoryDto) {
+ categoryDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
+ List 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 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 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 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 delete(@PathVariable @NotBlank String categoryId) {
+ Boolean b = categoryService.removeById(categoryId);
+ return ResultBean.success(b);
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/category/domain/CategoryDto.java b/src/main/java/com/dd/admin/business/category/domain/CategoryDto.java
new file mode 100644
index 0000000..a8ec96d
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/category/domain/CategoryDto.java
@@ -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;
+
+
+/**
+ *
+ * 分类返回对象
+ *
+ *
+ * @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;
+}
diff --git a/src/main/java/com/dd/admin/business/category/domain/CategoryVo.java b/src/main/java/com/dd/admin/business/category/domain/CategoryVo.java
new file mode 100644
index 0000000..204e947
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/category/domain/CategoryVo.java
@@ -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;
+
+/**
+ *
+ * 分类返回对象
+ *
+ *
+ * @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;
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/category/entity/Category.java b/src/main/java/com/dd/admin/business/category/entity/Category.java
new file mode 100644
index 0000000..99c55f2
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/category/entity/Category.java
@@ -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;
+
+/**
+ *
+ * 分类
+ *
+ *
+ * @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;
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/category/mapper/CategoryMapper.java b/src/main/java/com/dd/admin/business/category/mapper/CategoryMapper.java
new file mode 100644
index 0000000..a739667
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/category/mapper/CategoryMapper.java
@@ -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;
+
+/**
+ *
+ * 分类 Mapper 接口
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-05-22
+ */
+@Mapper
+public interface CategoryMapper extends BaseMapper {
+
+ IPage selectCategoryPage(Page page, @Param("categoryDto") CategoryDto categoryDto);
+
+ List selectCategoryList(@Param("categoryDto") CategoryDto categoryDto);
+}
diff --git a/src/main/java/com/dd/admin/business/category/mapper/xml/CategoryMapper.xml b/src/main/java/com/dd/admin/business/category/mapper/xml/CategoryMapper.xml
new file mode 100644
index 0000000..26bcfa1
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/category/mapper/xml/CategoryMapper.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CATEGORY_ID, CATEGORY_NAME, CATEGORY_STATUS, SHOP_ID, SHOP_NAME, CREATE_NAME, CREATE_TIME, CREATE_ID, UPDATE_TIME, UPDATE_NAME, UPDATE_ID
+
+
+
+ select
+ *
+ from business_category where 1 = 1
+
+ and CATEGORY_NAME like CONCAT('%', #{categoryDto.keyword}, '%')
+
+
+
+ and shop_id = #{categoryDto.shopId}
+
+
+
+ and CATEGORY_STATUS = #{categoryDto.categoryStatus}
+
+ order by create_time desc
+
+
+
+ select
+ *
+ from business_category where 1 = 1
+
+ and shop_id = #{categoryDto.shopId}
+
+
+ and CATEGORY_STATUS = #{categoryDto.categoryStatus}
+
+ order by create_time desc
+
+
diff --git a/src/main/java/com/dd/admin/business/category/service/CategoryService.java b/src/main/java/com/dd/admin/business/category/service/CategoryService.java
new file mode 100644
index 0000000..03cc5b3
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/category/service/CategoryService.java
@@ -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;
+
+/**
+ *
+ * 分类 服务类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-05-22
+ */
+public interface CategoryService extends IService {
+
+ //分类-分页列表
+ IPage selectCategoryPage(CategoryDto categoryDto);
+
+ //分类-列表
+ List selectCategoryList(CategoryDto categoryDto);
+
+}
diff --git a/src/main/java/com/dd/admin/business/category/service/impl/CategoryServiceImpl.java b/src/main/java/com/dd/admin/business/category/service/impl/CategoryServiceImpl.java
new file mode 100644
index 0000000..b2c3414
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/category/service/impl/CategoryServiceImpl.java
@@ -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;
+
+/**
+ *
+ * 分类 服务实现类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-05-22
+ */
+@Service
+public class CategoryServiceImpl extends ServiceImpl implements CategoryService {
+
+ @Override
+ public IPage selectCategoryPage(CategoryDto categoryDto) {
+ Page page = PageFactory.defaultPage();
+ return baseMapper.selectCategoryPage(page,categoryDto);
+ }
+
+ @Override
+ public List selectCategoryList(CategoryDto categoryDto) {
+ return baseMapper.selectCategoryList(categoryDto);
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/detailServer/controller/SellDetailServerController.java b/src/main/java/com/dd/admin/business/detailServer/controller/SellDetailServerController.java
new file mode 100644
index 0000000..fb42339
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/detailServer/controller/SellDetailServerController.java
@@ -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;
+
+/**
+ *
+ * 订单详单服务人员 前端控制器
+ *
+ *
+ * @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> page(SellDetailServerDto detailServerDto) {
+ IPage pageInfo = detailServerService.selectSellDetailServerPage(detailServerDto);
+ return ResultBean.success(pageInfo);
+ }
+
+ @ApiOperation(value = "订单详单服务人员-列表")
+ @ApiOperationSupport(order = 2)
+ @GetMapping("/admin/detailServer/list")
+ public ResultBean> list(SellDetailServerDto detailServerDto) {
+ List list = detailServerService.selectSellDetailServerList(detailServerDto);
+ return ResultBean.success(list);
+ }
+
+ @ApiOperation(value = "订单详单服务人员-添加")
+ @ApiOperationSupport(order = 3)
+ @PostMapping("/admin/detailServer/add")
+ public ResultBean 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 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 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 delete(@PathVariable @NotBlank String detailServerId) {
+ Boolean b = detailServerService.removeById(detailServerId);
+ return ResultBean.success(b);
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/detailServer/domain/SellDetailServerDto.java b/src/main/java/com/dd/admin/business/detailServer/domain/SellDetailServerDto.java
new file mode 100644
index 0000000..2a2c14a
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/detailServer/domain/SellDetailServerDto.java
@@ -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;
+
+
+/**
+ *
+ * 订单详单服务人员返回对象
+ *
+ *
+ * @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;
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/detailServer/domain/SellDetailServerVo.java b/src/main/java/com/dd/admin/business/detailServer/domain/SellDetailServerVo.java
new file mode 100644
index 0000000..57b006a
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/detailServer/domain/SellDetailServerVo.java
@@ -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;
+
+/**
+ *
+ * 订单详单服务人员返回对象
+ *
+ *
+ * @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;
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/detailServer/entity/SellDetailServer.java b/src/main/java/com/dd/admin/business/detailServer/entity/SellDetailServer.java
new file mode 100644
index 0000000..58b8dc7
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/detailServer/entity/SellDetailServer.java
@@ -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;
+
+/**
+ *
+ * 订单详单服务人员
+ *
+ *
+ * @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;
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/detailServer/mapper/SellDetailServerMapper.java b/src/main/java/com/dd/admin/business/detailServer/mapper/SellDetailServerMapper.java
new file mode 100644
index 0000000..433c1b4
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/detailServer/mapper/SellDetailServerMapper.java
@@ -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;
+
+/**
+ *
+ * 订单详单服务人员 Mapper 接口
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-11-28
+ */
+@Mapper
+public interface SellDetailServerMapper extends BaseMapper {
+
+ IPage selectSellDetailServerPage(Page page, @Param("detailServerDto") SellDetailServerDto detailServerDto);
+
+ List selectSellDetailServerList(@Param("detailServerDto") SellDetailServerDto detailServerDto);
+}
diff --git a/src/main/java/com/dd/admin/business/detailServer/mapper/xml/SellDetailServerMapper.xml b/src/main/java/com/dd/admin/business/detailServer/mapper/xml/SellDetailServerMapper.xml
new file mode 100644
index 0000000..2bf3045
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/detailServer/mapper/xml/SellDetailServerMapper.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+ select
+ *
+ from business_sell_detail_server where 1 = 1
+
+
+
+ select
+ *
+ from business_sell_detail_server where 1 = 1
+
+
diff --git a/src/main/java/com/dd/admin/business/detailServer/service/SellDetailServerService.java b/src/main/java/com/dd/admin/business/detailServer/service/SellDetailServerService.java
new file mode 100644
index 0000000..a117d01
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/detailServer/service/SellDetailServerService.java
@@ -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;
+
+/**
+ *
+ * 订单详单服务人员 服务类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-11-28
+ */
+public interface SellDetailServerService extends IService {
+
+ //订单详单服务人员-分页列表
+ IPage selectSellDetailServerPage(SellDetailServerDto detailServerDto);
+
+ //订单详单服务人员-列表
+ List selectSellDetailServerList(SellDetailServerDto detailServerDto);
+
+ List selectSellDetailServerListBySellDetailIds(List sellDetailIds);
+}
diff --git a/src/main/java/com/dd/admin/business/detailServer/service/impl/SellDetailServerServiceImpl.java b/src/main/java/com/dd/admin/business/detailServer/service/impl/SellDetailServerServiceImpl.java
new file mode 100644
index 0000000..2a2457a
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/detailServer/service/impl/SellDetailServerServiceImpl.java
@@ -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;
+
+/**
+ *
+ * 订单详单服务人员 服务实现类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-11-28
+ */
+@Service
+public class SellDetailServerServiceImpl extends ServiceImpl implements SellDetailServerService {
+
+ @Override
+ public IPage selectSellDetailServerPage(SellDetailServerDto detailServerDto) {
+ Page page = PageFactory.defaultPage();
+ return baseMapper.selectSellDetailServerPage(page,detailServerDto);
+ }
+
+ @Override
+ public List selectSellDetailServerList(SellDetailServerDto detailServerDto) {
+ return baseMapper.selectSellDetailServerList(detailServerDto);
+ }
+
+ @Override
+ public List selectSellDetailServerListBySellDetailIds(List sellDetailIds) {
+ LambdaQueryWrapper selldetailQueryWrapper = new LambdaQueryWrapper<>();
+ if(CollectionUtil.isNotEmpty(sellDetailIds)){
+ selldetailQueryWrapper.in(SellDetailServer::getSellDetailId, sellDetailIds);
+ }
+ List sellDetailList = this.list(selldetailQueryWrapper);
+ return sellDetailList;
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/file/controller/FileController.java b/src/main/java/com/dd/admin/business/file/controller/FileController.java
new file mode 100644
index 0000000..3613802
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/file/controller/FileController.java
@@ -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;
+
+/**
+ *
+ * 文件 前端控制器
+ *
+ *
+ * @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> page(FileDto fileDto) {
+ IPage pageInfo = fileService.selectFilePage(fileDto);
+
+ return ResultBean.success(pageInfo);
+ }
+
+ @ApiOperation(value = "文件-列表")
+ @ApiOperationSupport(order = 2)
+ @GetMapping("/admin/file/list")
+ public ResultBean> list(FileDto fileDto) {
+ List list = fileService.selectFileList(fileDto);
+ return ResultBean.success(list);
+ }
+
+ @ApiOperation(value = "文件-添加")
+ @ApiOperationSupport(order = 3)
+ @PostMapping("/admin/file/add")
+ public ResultBean 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 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 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 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 map = new HashMap<>();
+ map.put("fileId", fileId);
+ map.put("filePath",filePath);
+ return ResultBean.success(map);
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/file/domain/FileDto.java b/src/main/java/com/dd/admin/business/file/domain/FileDto.java
new file mode 100644
index 0000000..3267cfe
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/file/domain/FileDto.java
@@ -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;
+
+
+/**
+ *
+ * 文件返回对象
+ *
+ *
+ * @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;
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/file/domain/FileVo.java b/src/main/java/com/dd/admin/business/file/domain/FileVo.java
new file mode 100644
index 0000000..ccd10f1
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/file/domain/FileVo.java
@@ -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;
+
+/**
+ *
+ * 文件返回对象
+ *
+ *
+ * @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;
+}
diff --git a/src/main/java/com/dd/admin/business/file/entity/File.java b/src/main/java/com/dd/admin/business/file/entity/File.java
new file mode 100644
index 0000000..499a6d6
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/file/entity/File.java
@@ -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;
+
+/**
+ *
+ * 文件
+ *
+ *
+ * @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;
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/file/mapper/FileMapper.java b/src/main/java/com/dd/admin/business/file/mapper/FileMapper.java
new file mode 100644
index 0000000..5083922
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/file/mapper/FileMapper.java
@@ -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;
+
+/**
+ *
+ * 文件 Mapper 接口
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-05-23
+ */
+@Mapper
+public interface FileMapper extends BaseMapper {
+
+ IPage selectFilePage(Page page, @Param("fileDto") FileDto fileDto);
+
+ List selectFileList(@Param("fileDto") FileDto fileDto);
+}
diff --git a/src/main/java/com/dd/admin/business/file/mapper/xml/FileMapper.xml b/src/main/java/com/dd/admin/business/file/mapper/xml/FileMapper.xml
new file mode 100644
index 0000000..c6b1cde
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/file/mapper/xml/FileMapper.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FILE_ID, PARENT_ID, FILE_BUCKET, FILE_NAME, FILE_SUFFIX, FILE_SIZE_KB, FINAL_NAME, FILE_PATH, FILE_TYPE, FILE_SYS_PATH, CREATE_TIME
+
+
+
+ select
+ *
+ from business_file where 1 = 1
+
+
+
+ select
+ *
+ from business_file where 1 = 1
+
+
diff --git a/src/main/java/com/dd/admin/business/file/service/FileService.java b/src/main/java/com/dd/admin/business/file/service/FileService.java
new file mode 100644
index 0000000..75d83a8
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/file/service/FileService.java
@@ -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;
+
+/**
+ *
+ * 文件 服务类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-05-23
+ */
+public interface FileService extends IService {
+
+ //文件-分页列表
+ IPage selectFilePage(FileDto fileDto);
+
+ //文件-列表
+ List selectFileList(FileDto fileDto);
+
+ //文件-上传
+ public FileVo uploadFile(MultipartFile file, String fileSavePath);
+
+ //传入文件id获取文件真实地址
+ public String getFileAuthUrl(String fileId);
+}
diff --git a/src/main/java/com/dd/admin/business/file/service/impl/FileServiceImpl.java b/src/main/java/com/dd/admin/business/file/service/impl/FileServiceImpl.java
new file mode 100644
index 0000000..4ec544b
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/file/service/impl/FileServiceImpl.java
@@ -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;
+
+/**
+ *
+ * 文件 服务实现类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-05-23
+ */
+@Service
+public class FileServiceImpl extends ServiceImpl implements FileService {
+
+ @Value("${dd.uploadPath}")
+ private String uploadPath;
+
+ @Override
+ public IPage selectFilePage(FileDto fileDto) {
+ Page page = PageFactory.defaultPage();
+ return baseMapper.selectFilePage(page,fileDto);
+ }
+
+ @Override
+ public List 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 "";
+ }
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/member/controller/MemberController.java b/src/main/java/com/dd/admin/business/member/controller/MemberController.java
new file mode 100644
index 0000000..1f4b362
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/member/controller/MemberController.java
@@ -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;
+
+/**
+ *
+ * 会员 前端控制器
+ *
+ *
+ * @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> page(MemberDto memberDto) {
+ memberDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
+ IPage pageInfo = memberService.selectMemberPage(memberDto);
+ return ResultBean.success(pageInfo);
+ }
+
+ @ApiOperation(value = "会员-列表")
+ @ApiOperationSupport(order = 2)
+ @GetMapping("/admin/member/list")
+ public ResultBean> list(MemberDto memberDto) {
+ memberDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
+ List 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> searchList(MemberDto memberDto) {
+ memberDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
+ memberDto.setLimit(10);
+ List 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 add(@RequestBody @Validated MemberDto memberDto) {
+ // 先根据手机号查询是否已存在会员
+ LambdaQueryWrapper 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 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 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 delete(@PathVariable @NotBlank String memberId) {
+ Boolean b = memberService.removeById(memberId);
+ return ResultBean.success(b);
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/member/domain/MemberDto.java b/src/main/java/com/dd/admin/business/member/domain/MemberDto.java
new file mode 100644
index 0000000..f9c1df4
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/member/domain/MemberDto.java
@@ -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;
+
+
+/**
+ *
+ * 会员返回对象
+ *
+ *
+ * @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;
+}
diff --git a/src/main/java/com/dd/admin/business/member/domain/MemberVo.java b/src/main/java/com/dd/admin/business/member/domain/MemberVo.java
new file mode 100644
index 0000000..5d3158f
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/member/domain/MemberVo.java
@@ -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;
+
+/**
+ *
+ * 会员返回对象
+ *
+ *
+ * @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;
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/member/entity/Member.java b/src/main/java/com/dd/admin/business/member/entity/Member.java
new file mode 100644
index 0000000..9f96829
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/member/entity/Member.java
@@ -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;
+
+/**
+ *
+ * 会员
+ *
+ *
+ * @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;
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/member/mapper/MemberMapper.java b/src/main/java/com/dd/admin/business/member/mapper/MemberMapper.java
new file mode 100644
index 0000000..d82d2ea
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/member/mapper/MemberMapper.java
@@ -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;
+
+/**
+ *
+ * 会员 Mapper 接口
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-05-21
+ */
+@Mapper
+public interface MemberMapper extends BaseMapper {
+
+ IPage selectMemberPage(Page page, @Param("memberDto") MemberDto memberDto);
+
+ List selectMemberList(@Param("memberDto") MemberDto memberDto);
+}
diff --git a/src/main/java/com/dd/admin/business/member/mapper/xml/MemberMapper.xml b/src/main/java/com/dd/admin/business/member/mapper/xml/MemberMapper.xml
new file mode 100644
index 0000000..c45ca60
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/member/mapper/xml/MemberMapper.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MEMBER_ID, MEMBER_NAME, MEMBER_PHONE, REMARK, PAY_PASSWORD, SHOP_NAME, SHOP_ID, CREATE_TIME
+
+
+
+ select
+ *
+ from business_member where 1 = 1
+
+ and (member_name like CONCAT('%', #{memberDto.keyword}, '%')
+ or member_phone like concat('%',#{memberDto.keyword},'%'))
+
+
+
+ and shop_id = #{memberDto.shopId}
+
+
+ order by create_time desc
+
+
+
+ select
+ *
+ from business_member where 1 = 1
+
+ and (member_name like CONCAT('%', #{memberDto.querySearch}, '%')
+ or member_phone like concat('%',#{memberDto.querySearch},'%'))
+
+
+
+ and shop_id = #{memberDto.shopId}
+
+
+ order by create_time desc
+
+
+ limit #{memberDto.limit}
+
+
+
diff --git a/src/main/java/com/dd/admin/business/member/service/MemberService.java b/src/main/java/com/dd/admin/business/member/service/MemberService.java
new file mode 100644
index 0000000..e107c90
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/member/service/MemberService.java
@@ -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;
+
+/**
+ *
+ * 会员 服务类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-05-21
+ */
+public interface MemberService extends IService {
+
+ //会员-分页列表
+ IPage selectMemberPage(MemberDto memberDto);
+
+ //会员-列表
+ List selectMemberList(MemberDto memberDto);
+
+ Integer selectMemberCount(String shopId);
+}
diff --git a/src/main/java/com/dd/admin/business/member/service/impl/MemberServiceImpl.java b/src/main/java/com/dd/admin/business/member/service/impl/MemberServiceImpl.java
new file mode 100644
index 0000000..3ef8623
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/member/service/impl/MemberServiceImpl.java
@@ -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;
+
+/**
+ *
+ * 会员 服务实现类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-05-21
+ */
+@Service
+public class MemberServiceImpl extends ServiceImpl implements MemberService {
+
+ @Override
+ public IPage selectMemberPage(MemberDto memberDto) {
+ Page page = PageFactory.defaultPage();
+ return baseMapper.selectMemberPage(page,memberDto);
+ }
+
+ @Override
+ public List selectMemberList(MemberDto memberDto) {
+ return baseMapper.selectMemberList(memberDto);
+ }
+
+ @Override
+ public Integer selectMemberCount(String shopId) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(Member::getShopId, shopId);
+ return baseMapper.selectCount(queryWrapper);
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/memberCard/controller/MemberCardController.java b/src/main/java/com/dd/admin/business/memberCard/controller/MemberCardController.java
new file mode 100644
index 0000000..6f3cd92
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/memberCard/controller/MemberCardController.java
@@ -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;
+
+/**
+ *
+ * 会员卡 前端控制器
+ *
+ *
+ * @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> page(MemberCardDto memberCardDto) {
+ memberCardDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
+ IPage pageInfo = memberCardService.selectMemberCardPage(memberCardDto);
+ return ResultBean.success(pageInfo);
+ }
+
+ @ApiOperation(value = "会员卡-列表")
+ @ApiOperationSupport(order = 2)
+ @GetMapping("/admin/memberCard/list")
+ public ResultBean> list(MemberCardDto memberCardDto) {
+ memberCardDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
+ List list = memberCardService.selectMemberCardList(memberCardDto);
+ return ResultBean.success(list);
+ }
+
+ @ApiOperation(value = "会员卡-列表")
+ @ApiOperationSupport(order = 2)
+ @GetMapping("/admin/memberCard/searchList")
+ public ResultBean> searchList(MemberCardDto memberCardDto) {
+ memberCardDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
+ memberCardDto.setLimit(10);
+ List 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 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 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 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 delete(@PathVariable @NotBlank String memberCardId) {
+ Boolean b = memberCardService.removeById(memberCardId);
+ return ResultBean.success(b);
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/memberCard/domain/MemberCardDto.java b/src/main/java/com/dd/admin/business/memberCard/domain/MemberCardDto.java
new file mode 100644
index 0000000..b676a46
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/memberCard/domain/MemberCardDto.java
@@ -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;
+
+
+/**
+ *
+ * 会员卡返回对象
+ *
+ *
+ * @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;
+}
diff --git a/src/main/java/com/dd/admin/business/memberCard/domain/MemberCardVo.java b/src/main/java/com/dd/admin/business/memberCard/domain/MemberCardVo.java
new file mode 100644
index 0000000..840b7c1
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/memberCard/domain/MemberCardVo.java
@@ -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;
+
+/**
+ *
+ * 会员卡返回对象
+ *
+ *
+ * @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;
+
+}
diff --git a/src/main/java/com/dd/admin/business/memberCard/entity/MemberCard.java b/src/main/java/com/dd/admin/business/memberCard/entity/MemberCard.java
new file mode 100644
index 0000000..83dcac3
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/memberCard/entity/MemberCard.java
@@ -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;
+
+/**
+ *
+ * 会员卡
+ *
+ *
+ * @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;
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/memberCard/mapper/MemberCardMapper.java b/src/main/java/com/dd/admin/business/memberCard/mapper/MemberCardMapper.java
new file mode 100644
index 0000000..2fa7fed
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/memberCard/mapper/MemberCardMapper.java
@@ -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;
+
+/**
+ *
+ * 会员卡 Mapper 接口
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+@Mapper
+public interface MemberCardMapper extends BaseMapper {
+
+ IPage selectMemberCardPage(Page page, @Param("memberCardDto") MemberCardDto memberCardDto);
+
+ List selectMemberCardList(@Param("memberCardDto") MemberCardDto memberCardDto);
+
+ MemberCardVo selectOneByCardNo(@Param("cardNo")String cardNo,@Param("shopId")String shopId);
+
+}
diff --git a/src/main/java/com/dd/admin/business/memberCard/mapper/xml/MemberCardMapper.xml b/src/main/java/com/dd/admin/business/memberCard/mapper/xml/MemberCardMapper.xml
new file mode 100644
index 0000000..74f228e
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/memberCard/mapper/xml/MemberCardMapper.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+ select
+ *
+ from business_member_card where 1 = 1
+
+ and shop_id = #{memberCardDto.shopId}
+
+
+
+
+ select
+ *
+ from business_member_card where deleted = 0
+
+ and member_id = #{memberCardDto.memberId}
+
+
+ and CARD_NO like CONCAT('%', #{memberCardDto.querySearch}, '%')
+
+
+ and shop_id = #{memberCardDto.shopId}
+
+ order by create_time desc
+
+ limit #{memberCardDto.limit}
+
+
+
+ select
+
+ from business_member_card
+ where
+ SHOP_ID = #{shopId} and
+ CARD_NO = #{cardNo} limit 0,1
+
+
diff --git a/src/main/java/com/dd/admin/business/memberCard/service/MemberCardService.java b/src/main/java/com/dd/admin/business/memberCard/service/MemberCardService.java
new file mode 100644
index 0000000..f0cb29f
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/memberCard/service/MemberCardService.java
@@ -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;
+
+/**
+ *
+ * 会员卡 服务类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+public interface MemberCardService extends IService {
+
+ //会员卡-分页列表
+ IPage selectMemberCardPage(MemberCardDto memberCardDto);
+
+ //会员卡-列表
+ List selectMemberCardList(MemberCardDto memberCardDto);
+
+ MemberCardVo selectOneByCardNo(String cardNo);
+
+ Integer selectMemberCardCount(String shopId);
+}
diff --git a/src/main/java/com/dd/admin/business/memberCard/service/impl/MemberCardServiceImpl.java b/src/main/java/com/dd/admin/business/memberCard/service/impl/MemberCardServiceImpl.java
new file mode 100644
index 0000000..8f29970
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/memberCard/service/impl/MemberCardServiceImpl.java
@@ -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;
+
+/**
+ *
+ * 会员卡 服务实现类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+@Service
+public class MemberCardServiceImpl extends ServiceImpl implements MemberCardService {
+
+ @Override
+ public IPage selectMemberCardPage(MemberCardDto memberCardDto) {
+ Page page = PageFactory.defaultPage();
+ return baseMapper.selectMemberCardPage(page,memberCardDto);
+ }
+
+ @Override
+ public List 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 queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(MemberCard::getShopId, shopId);
+ return baseMapper.selectCount(queryWrapper);
+ }
+}
+
diff --git a/src/main/java/com/dd/admin/business/operationLog/controller/OperationLogController.java b/src/main/java/com/dd/admin/business/operationLog/controller/OperationLogController.java
new file mode 100644
index 0000000..035867c
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/operationLog/controller/OperationLogController.java
@@ -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;
+
+/**
+ *
+ * 操作日志 前端控制器
+ *
+ *
+ * @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> page(OperationLogDto operationLogDto) {
+ IPage pageInfo = operationLogService.selectOperationLogPage(operationLogDto);
+ return ResultBean.success(pageInfo);
+ }
+
+ @ApiOperation(value = "操作日志-列表")
+ @ApiOperationSupport(order = 2)
+ @GetMapping("/admin/operationLog/list")
+ public ResultBean> list(OperationLogDto operationLogDto) {
+ List list = operationLogService.selectOperationLogList(operationLogDto);
+ return ResultBean.success(list);
+ }
+
+ @ApiOperation(value = "操作日志-添加")
+ @ApiOperationSupport(order = 3)
+ @PostMapping("/admin/operationLog/add")
+ public ResultBean 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 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 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 delete(@PathVariable @NotBlank String operationLogId) {
+ Boolean b = operationLogService.removeById(operationLogId);
+ return ResultBean.success(b);
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/operationLog/domain/OperationLogDto.java b/src/main/java/com/dd/admin/business/operationLog/domain/OperationLogDto.java
new file mode 100644
index 0000000..9fcc56f
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/operationLog/domain/OperationLogDto.java
@@ -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;
+
+
+/**
+ *
+ * 操作日志返回对象
+ *
+ *
+ * @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;
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/operationLog/domain/OperationLogVo.java b/src/main/java/com/dd/admin/business/operationLog/domain/OperationLogVo.java
new file mode 100644
index 0000000..d6d4546
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/operationLog/domain/OperationLogVo.java
@@ -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;
+
+/**
+ *
+ * 操作日志返回对象
+ *
+ *
+ * @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;
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/operationLog/entity/OperationLog.java b/src/main/java/com/dd/admin/business/operationLog/entity/OperationLog.java
new file mode 100644
index 0000000..60bdca2
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/operationLog/entity/OperationLog.java
@@ -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;
+
+/**
+ *
+ * 操作日志
+ *
+ *
+ * @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;
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/operationLog/mapper/OperationLogMapper.java b/src/main/java/com/dd/admin/business/operationLog/mapper/OperationLogMapper.java
new file mode 100644
index 0000000..f687494
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/operationLog/mapper/OperationLogMapper.java
@@ -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;
+
+/**
+ *
+ * 操作日志 Mapper 接口
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-07
+ */
+@Mapper
+public interface OperationLogMapper extends BaseMapper {
+
+ IPage selectOperationLogPage(Page page, @Param("operationLogDto") OperationLogDto operationLogDto);
+
+ List selectOperationLogList(@Param("operationLogDto") OperationLogDto operationLogDto);
+}
diff --git a/src/main/java/com/dd/admin/business/operationLog/mapper/xml/OperationLogMapper.xml b/src/main/java/com/dd/admin/business/operationLog/mapper/xml/OperationLogMapper.xml
new file mode 100644
index 0000000..8ca6e9f
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/operationLog/mapper/xml/OperationLogMapper.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+ select
+ *
+ from business_operation_log where 1 = 1
+ order by create_time desc
+
+
+
+ select
+ *
+ from business_operation_log where 1 = 1
+
+
diff --git a/src/main/java/com/dd/admin/business/operationLog/service/OperationLogService.java b/src/main/java/com/dd/admin/business/operationLog/service/OperationLogService.java
new file mode 100644
index 0000000..c44e905
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/operationLog/service/OperationLogService.java
@@ -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;
+
+/**
+ *
+ * 操作日志 服务类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-07
+ */
+public interface OperationLogService extends IService {
+
+ //操作日志-分页列表
+ IPage selectOperationLogPage(OperationLogDto operationLogDto);
+
+ //操作日志-列表
+ List selectOperationLogList(OperationLogDto operationLogDto);
+
+}
diff --git a/src/main/java/com/dd/admin/business/operationLog/service/impl/OperationLogServiceImpl.java b/src/main/java/com/dd/admin/business/operationLog/service/impl/OperationLogServiceImpl.java
new file mode 100644
index 0000000..964f849
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/operationLog/service/impl/OperationLogServiceImpl.java
@@ -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;
+
+/**
+ *
+ * 操作日志 服务实现类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-07
+ */
+@Service
+public class OperationLogServiceImpl extends ServiceImpl implements OperationLogService {
+
+ @Override
+ public IPage selectOperationLogPage(OperationLogDto operationLogDto) {
+ Page page = PageFactory.defaultPage();
+ return baseMapper.selectOperationLogPage(page,operationLogDto);
+ }
+
+ @Override
+ public List selectOperationLogList(OperationLogDto operationLogDto) {
+ return baseMapper.selectOperationLogList(operationLogDto);
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/pay/PayController.java b/src/main/java/com/dd/admin/business/pay/PayController.java
new file mode 100644
index 0000000..b34d09a
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/PayController.java
@@ -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 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 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 buildCard(@RequestBody @Validated MemberProductSell productSell) {
+ Sell sell = payService.executeProduct(productSell);
+ return ResultBean.success(sell);
+ }
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/pay/domain/BaseSell.java b/src/main/java/com/dd/admin/business/pay/domain/BaseSell.java
new file mode 100644
index 0000000..b03ea7f
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/domain/BaseSell.java
@@ -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 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;
+}
diff --git a/src/main/java/com/dd/admin/business/pay/domain/BuildCardForm.java b/src/main/java/com/dd/admin/business/pay/domain/BuildCardForm.java
new file mode 100644
index 0000000..9415ec1
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/domain/BuildCardForm.java
@@ -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 serverList;
+}
diff --git a/src/main/java/com/dd/admin/business/pay/domain/BuildCardSell.java b/src/main/java/com/dd/admin/business/pay/domain/BuildCardSell.java
new file mode 100644
index 0000000..b57c22b
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/domain/BuildCardSell.java
@@ -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;
+}
diff --git a/src/main/java/com/dd/admin/business/pay/domain/ChargedCardForm.java b/src/main/java/com/dd/admin/business/pay/domain/ChargedCardForm.java
new file mode 100644
index 0000000..c3df20a
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/domain/ChargedCardForm.java
@@ -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 serverList;
+}
diff --git a/src/main/java/com/dd/admin/business/pay/domain/ChargedCardSell.java b/src/main/java/com/dd/admin/business/pay/domain/ChargedCardSell.java
new file mode 100644
index 0000000..e7c6c67
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/domain/ChargedCardSell.java
@@ -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;
+}
diff --git a/src/main/java/com/dd/admin/business/pay/domain/MemberBaseSell.java b/src/main/java/com/dd/admin/business/pay/domain/MemberBaseSell.java
new file mode 100644
index 0000000..5c8864b
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/domain/MemberBaseSell.java
@@ -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;
+}
diff --git a/src/main/java/com/dd/admin/business/pay/domain/MemberProductSell.java b/src/main/java/com/dd/admin/business/pay/domain/MemberProductSell.java
new file mode 100644
index 0000000..787020b
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/domain/MemberProductSell.java
@@ -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 productFormList;
+
+}
diff --git a/src/main/java/com/dd/admin/business/pay/domain/ProductForm.java b/src/main/java/com/dd/admin/business/pay/domain/ProductForm.java
new file mode 100644
index 0000000..3887330
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/domain/ProductForm.java
@@ -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 serverList;
+}
diff --git a/src/main/java/com/dd/admin/business/pay/enmus/CashierExceptionEnum.java b/src/main/java/com/dd/admin/business/pay/enmus/CashierExceptionEnum.java
new file mode 100644
index 0000000..eb9498f
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/enmus/CashierExceptionEnum.java
@@ -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;
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/pay/enmus/DetailServiceEnum.java b/src/main/java/com/dd/admin/business/pay/enmus/DetailServiceEnum.java
new file mode 100644
index 0000000..bca3707
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/enmus/DetailServiceEnum.java
@@ -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;
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/pay/enmus/PayConst.java b/src/main/java/com/dd/admin/business/pay/enmus/PayConst.java
new file mode 100644
index 0000000..9a58104
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/enmus/PayConst.java
@@ -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;
+
+}
diff --git a/src/main/java/com/dd/admin/business/pay/service/AddSellDetailService.java b/src/main/java/com/dd/admin/business/pay/service/AddSellDetailService.java
new file mode 100644
index 0000000..efa58a9
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/service/AddSellDetailService.java
@@ -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);
+
+}
diff --git a/src/main/java/com/dd/admin/business/pay/service/PayService.java b/src/main/java/com/dd/admin/business/pay/service/PayService.java
new file mode 100644
index 0000000..8df18f5
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/service/PayService.java
@@ -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);
+
+}
diff --git a/src/main/java/com/dd/admin/business/pay/service/impl/PayServiceImpl.java b/src/main/java/com/dd/admin/business/pay/service/impl/PayServiceImpl.java
new file mode 100644
index 0000000..4273496
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/service/impl/PayServiceImpl.java
@@ -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 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;
+ }
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/pay/service/impl/SellDetailBuildCard.java b/src/main/java/com/dd/admin/business/pay/service/impl/SellDetailBuildCard.java
new file mode 100644
index 0000000..32c5cda
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/service/impl/SellDetailBuildCard.java
@@ -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 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;
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/pay/service/impl/SellDetailChargedCard.java b/src/main/java/com/dd/admin/business/pay/service/impl/SellDetailChargedCard.java
new file mode 100644
index 0000000..25a3e40
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/service/impl/SellDetailChargedCard.java
@@ -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 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;
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/pay/service/impl/SellDetailMemberProduct.java b/src/main/java/com/dd/admin/business/pay/service/impl/SellDetailMemberProduct.java
new file mode 100644
index 0000000..140393d
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/pay/service/impl/SellDetailMemberProduct.java
@@ -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 selldetailList = new ArrayList<>();
+
+ //获取订单详情
+ List 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 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 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;
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/product/controller/ProductController.java b/src/main/java/com/dd/admin/business/product/controller/ProductController.java
new file mode 100644
index 0000000..1006ae8
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/product/controller/ProductController.java
@@ -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;
+
+/**
+ *
+ * 商品 前端控制器
+ *
+ *
+ * @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> page(ProductDto productDto) {
+ productDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
+ IPage 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(ProductDto productDto) {
+ productDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
+ List 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 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 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 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 delete(@PathVariable @NotBlank String productId) {
+ Boolean b = productService.removeById(productId);
+ return ResultBean.success(b);
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/product/domain/ProductDto.java b/src/main/java/com/dd/admin/business/product/domain/ProductDto.java
new file mode 100644
index 0000000..d99a1a4
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/product/domain/ProductDto.java
@@ -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;
+
+
+/**
+ *
+ * 商品返回对象
+ *
+ *
+ * @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;
+}
diff --git a/src/main/java/com/dd/admin/business/product/domain/ProductVo.java b/src/main/java/com/dd/admin/business/product/domain/ProductVo.java
new file mode 100644
index 0000000..738a294
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/product/domain/ProductVo.java
@@ -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;
+
+/**
+ *
+ * 商品返回对象
+ *
+ *
+ * @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;
+
+}
diff --git a/src/main/java/com/dd/admin/business/product/entity/Product.java b/src/main/java/com/dd/admin/business/product/entity/Product.java
new file mode 100644
index 0000000..f36d189
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/product/entity/Product.java
@@ -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;
+
+/**
+ *
+ * 商品
+ *
+ *
+ * @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;
+}
diff --git a/src/main/java/com/dd/admin/business/product/mapper/ProductMapper.java b/src/main/java/com/dd/admin/business/product/mapper/ProductMapper.java
new file mode 100644
index 0000000..f130a83
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/product/mapper/ProductMapper.java
@@ -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;
+
+/**
+ *
+ * 商品 Mapper 接口
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-05-23
+ */
+@Mapper
+public interface ProductMapper extends BaseMapper {
+
+ IPage selectProductPage(Page page, @Param("productDto") ProductDto productDto);
+
+ List selectProductList(@Param("productDto") ProductDto productDto);
+}
diff --git a/src/main/java/com/dd/admin/business/product/mapper/xml/ProductMapper.xml b/src/main/java/com/dd/admin/business/product/mapper/xml/ProductMapper.xml
new file mode 100644
index 0000000..78bb9d7
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/product/mapper/xml/ProductMapper.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+ select
+ *
+ from business_product where 1 = 1
+
+ and PRODUCT_NAME like CONCAT('%', #{productDto.keyword}, '%')
+
+
+ and CATEGORY_ID = #{productDto.categoryId}
+
+
+ and DELETED = #{productDto.deleted}
+
+
+ and STOCK_CONTROL = #{productDto.stockControl}
+
+
+ and PRODUCT_STATUS = #{productDto.productStatus}
+
+
+ and shop_id = #{productDto.shopId}
+
+ order by create_time desc
+
+
+
+ select
+ *
+ from business_product where 1 = 1
+
+ and category_id = #{productDto.categoryId}
+
+
+ and DELETED = #{productDto.deleted}
+
+
+ and STOCK_CONTROL = #{productDto.stockControl}
+
+
+ and shop_id = #{productDto.shopId}
+
+
+ and PRODUCT_STATUS = #{productDto.productStatus}
+
+ order by create_time desc
+
+
diff --git a/src/main/java/com/dd/admin/business/product/service/ProductService.java b/src/main/java/com/dd/admin/business/product/service/ProductService.java
new file mode 100644
index 0000000..15b4361
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/product/service/ProductService.java
@@ -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;
+
+/**
+ *
+ * 商品 服务类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-05-23
+ */
+public interface ProductService extends IService {
+
+ //商品-分页列表
+ IPage selectProductPage(ProductDto productDto);
+
+ //商品-列表
+ List selectProductList(ProductDto productDto);
+
+ Product addProductCount(String productId,Long count);
+
+ Product subProductCount(String productId,Long count);
+
+ //根据机构shopId查询商品库存数量排行(可指定返回数量)
+ List getProductStockRankByShopId(String shopId, Integer limit);
+
+ Integer selectProductCount(String shopId);
+}
diff --git a/src/main/java/com/dd/admin/business/product/service/impl/ProductServiceImpl.java b/src/main/java/com/dd/admin/business/product/service/impl/ProductServiceImpl.java
new file mode 100644
index 0000000..f6c55f9
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/product/service/impl/ProductServiceImpl.java
@@ -0,0 +1,89 @@
+package com.dd.admin.business.product.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.exception.ApiException;
+import com.dd.admin.common.model.PageFactory;
+import com.dd.admin.business.product.entity.Product;
+import com.dd.admin.business.product.mapper.ProductMapper;
+import com.dd.admin.business.product.service.ProductService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.dd.admin.business.product.domain.ProductVo;
+import com.dd.admin.business.product.domain.ProductDto;
+import java.util.List;
+
+/**
+ *
+ * 商品 服务实现类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-05-23
+ */
+@Service
+public class ProductServiceImpl extends ServiceImpl implements ProductService {
+
+ @Override
+ public IPage selectProductPage(ProductDto productDto) {
+ Page page = PageFactory.defaultPage();
+ return baseMapper.selectProductPage(page,productDto);
+ }
+
+ @Override
+ public List selectProductList(ProductDto productDto) {
+ return baseMapper.selectProductList(productDto);
+ }
+
+ @Override
+ public Product addProductCount(String productId, Long count) {
+ Product product = this.getById(productId);
+ product.setProductCount(product.getProductCount() + count);
+ updateById(product);
+ return product;
+ }
+
+ @Override
+ public Product subProductCount(String productId, Long count) {
+ Product product = this.getById(productId);
+ product.setProductCount(product.getProductCount() - count);
+ if(product.getProductCount() < 0){
+ throw new ApiException("商品库存不足");
+ }
+ updateById(product);
+ return product;
+ }
+
+
+ /**
+ * 根据机构shopId查询商品库存数量排行(可指定返回数量)
+ *
+ * @param shopId 机构id
+ * @param limit 返回的排行数量限制(例如取前几名),如果为null则查询全部符合条件的商品排行
+ * @return 按库存数量排序后的商品列表(库存数量从大到小排序)
+ */
+ @Override
+ public List getProductStockRankByShopId(String shopId, Integer limit) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ // 根据shopId添加筛选条件,只查询指定机构下的商品
+ queryWrapper.eq(Product::getShopId, shopId);
+ // 按照库存数量字段(PRODUCT_COUNT)进行降序排序(从大到小)
+ queryWrapper.orderByDesc(Product::getProductCount);
+
+ if (limit!= null) {
+ // 如果传入了数量限制,则添加限制条件,只取前limit条记录
+ queryWrapper.last("LIMIT " + limit);
+ }
+
+ return baseMapper.selectList(queryWrapper);
+ }
+
+ @Override
+ public Integer selectProductCount(String shopId) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(Product::getShopId, shopId);
+ return baseMapper.selectCount(queryWrapper);
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/sell/controller/SellController.java b/src/main/java/com/dd/admin/business/sell/controller/SellController.java
new file mode 100644
index 0000000..62e5de5
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sell/controller/SellController.java
@@ -0,0 +1,132 @@
+package com.dd.admin.business.sell.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.dd.admin.business.sell.domain.CancelSellDto;
+import com.dd.admin.business.sell.enums.CancelSellServiceEnum;
+import com.dd.admin.business.sell.service.CancelSellService;
+import com.dd.admin.business.sellDetail.service.SellDetailService;
+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.transaction.annotation.Transactional;
+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.sell.entity.Sell;
+import com.dd.admin.business.sell.domain.SellVo;
+import com.dd.admin.business.sell.domain.SellDto;
+import com.dd.admin.business.sell.service.SellService;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import static com.dd.admin.business.pay.enmus.CashierExceptionEnum.PAY_SELL_CANCEL_ERROR;
+import static com.dd.admin.business.pay.enmus.PayConst.SELL_STATUS_REVOCATION;
+import static com.dd.admin.common.consts.MemberShopConst.SELL_STATUS_CANCEL;
+
+/**
+ *
+ * 订单 前端控制器
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+@Api(tags = "订单")
+@RestController
+public class SellController {
+
+ @Autowired
+ SellService sellService;
+
+ @Autowired
+ Map cancelSellServiceMap;
+
+ @Autowired
+ SellDetailService sellDetailService;
+
+ @ApiOperation(value = "订单-分页列表")
+ @ApiOperationSupport(order = 1)
+ @GetMapping("/admin/sell/page")
+ @OperLog(operModule = "获取订单列表",operType = OperType.QUERY,operDesc = "获取订单列表")
+ public ResultBean> page(SellDto sellDto) {
+ sellDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
+ IPage pageInfo = sellService.selectSellPage(sellDto);
+ sellService.setSellDetail(pageInfo.getRecords());
+ return ResultBean.success(pageInfo);
+ }
+
+ @ApiOperation(value = "订单-列表")
+ @ApiOperationSupport(order = 2)
+ @GetMapping("/admin/sell/list")
+ public ResultBean> list(SellDto sellDto) {
+ sellDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
+ List list = sellService.selectSellList(sellDto);
+ return ResultBean.success(list);
+ }
+
+ @ApiOperation(value = "订单-添加")
+ @ApiOperationSupport(order = 3)
+ @PostMapping("/admin/sell/add")
+ public ResultBean add(@RequestBody @Validated SellDto sellDto) {
+ Sell sell = BeanUtil.copyProperties(sellDto, Sell.class);
+ sellService.save(sell);
+ return ResultBean.success(sell);
+ }
+
+ @ApiOperation(value = "订单-查询")
+ @ApiOperationSupport(order = 4)
+ @GetMapping("/admin/sell/{sellId}")
+ public ResultBean get(@PathVariable @NotBlank String sellId) {
+ Sell sell = sellService.getById(sellId);
+ SellVo sellVo = BeanUtil.copyProperties(sell,SellVo.class);
+ return ResultBean.success(sellVo);
+ }
+
+ @ApiOperation(value = "订单-修改")
+ @ApiOperationSupport(order = 5)
+ @PostMapping("/admin/sell/update")
+ public ResultBean update(@RequestBody @Validated(UpdateGroup.class) SellDto sellDto) {
+ Sell sell = BeanUtil.copyProperties(sellDto, Sell.class);
+ sellService.updateById(sell);
+ return ResultBean.success(sell);
+ }
+
+ @ApiOperation(value = "订单-删除")
+ @ApiOperationSupport(order = 6)
+ @GetMapping("/admin/sell/delete/{sellId}")
+ public ResultBean delete(@PathVariable @NotBlank String sellId) {
+ Boolean b = sellService.removeById(sellId);
+ return ResultBean.success(b);
+ }
+
+ @ApiOperation(value = "订单-销单")
+ @ApiOperationSupport(order = 6)
+ @PostMapping("/admin/sell/cancel")
+ @Transactional
+ public ResultBean cancel(@RequestBody @Validated CancelSellDto cancelSellDto) {
+ Sell sell = sellService.getById(cancelSellDto.getSellId());
+ if(sell.getSellStatus().equals(SELL_STATUS_CANCEL)){
+ throw new ApiException(PAY_SELL_CANCEL_ERROR);
+ }
+ //销单
+ cancelSellServiceMap.get(CancelSellServiceEnum.getEnumBySellType(sell.getSellType()).getServiceName()).cancel(sell);
+ sell.setSellStatus(SELL_STATUS_REVOCATION);
+ sell.setRemark(cancelSellDto.getRemark());
+ sellService.updateById(sell);
+ sellDetailService.updateSellDetailStatus(sell.getSellId());
+ return ResultBean.success();
+ }
+
+}
diff --git a/src/main/java/com/dd/admin/business/sell/domain/CancelSellDto.java b/src/main/java/com/dd/admin/business/sell/domain/CancelSellDto.java
new file mode 100644
index 0000000..c86402e
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sell/domain/CancelSellDto.java
@@ -0,0 +1,17 @@
+package com.dd.admin.business.sell.domain;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value="销售表接收对象")
+public class CancelSellDto {
+ @NotBlank(message = "订单id不能为空")
+ private String sellId;
+
+ @NotBlank(message = "撤销原因不能为空")
+ private String remark;
+}
diff --git a/src/main/java/com/dd/admin/business/sell/domain/SellDto.java b/src/main/java/com/dd/admin/business/sell/domain/SellDto.java
new file mode 100644
index 0000000..9dfb0e5
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sell/domain/SellDto.java
@@ -0,0 +1,117 @@
+package com.dd.admin.business.sell.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;
+
+
+/**
+ *
+ * 订单返回对象
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+@Data
+@ApiModel(value="订单接收对象")
+public class SellDto {
+
+
+ @ApiModelProperty(value = "订单id")
+ @NotBlank(message = "订单id不能为空",groups = UpdateGroup.class)
+ private String sellId;
+
+ @ApiModelProperty(value = "订单号")
+ private String sellNo;
+
+ @ApiModelProperty(value = "流水号")
+ private String serialNo;
+
+ @ApiModelProperty(value = "会员ID")
+ private String memberId;
+
+ @ApiModelProperty(value = "会员卡ID")
+ private String memberCardId;
+
+ @ApiModelProperty(value = "会员卡名")
+ private String memberCardName;
+
+ @ApiModelProperty(value = "会员卡编号")
+ private String memberCardNo;
+
+ @ApiModelProperty(value = "会员名称")
+ private String memberName;
+
+ @ApiModelProperty(value = "消费金额")
+ private BigDecimal sellAmount;
+
+ @ApiModelProperty(value = "实际入账")
+ private BigDecimal realAmount;
+
+ @ApiModelProperty(value = "1商品 2开卡 ")
+ @TableField("SELL_TYPE")
+ private Integer sellType;
+
+ @ApiModelProperty(value = "0正常 1取消")
+ private Integer sellStatus;
+
+ @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 BigDecimal memberCardAfterAmount;
+
+ private BigDecimal memberCardBeforeAmount;
+
+ @ApiModelProperty(value = "消费后金额")
+ private BigDecimal memberCardAfterGiveAmount;
+
+ private BigDecimal memberCardBeforeGiveAmount;
+
+ @ApiModelProperty(value = "备注")
+ private String remark;
+
+ @ApiModelProperty(value = "搜索关键字")
+ private String keyword;
+}
diff --git a/src/main/java/com/dd/admin/business/sell/domain/SellVo.java b/src/main/java/com/dd/admin/business/sell/domain/SellVo.java
new file mode 100644
index 0000000..4af4121
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sell/domain/SellVo.java
@@ -0,0 +1,122 @@
+package com.dd.admin.business.sell.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 java.util.List;
+
+import com.dd.admin.business.sellDetail.domain.SellDetailVo;
+import com.dd.admin.business.sellDetail.entity.SellDetail;
+import com.dd.admin.business.sellPay.domain.SellpayVo;
+import com.dd.admin.business.sellPay.entity.Sellpay;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ * 订单返回对象
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+@Data
+@ApiModel(value="订单返回对象")
+public class SellVo {
+
+
+ @ApiModelProperty(value = "订单id")
+ private String sellId;
+
+ @ApiModelProperty(value = "订单号")
+ private String sellNo;
+
+ @ApiModelProperty(value = "流水号")
+ private String serialNo;
+
+ @ApiModelProperty(value = "会员ID")
+ private String memberId;
+
+ @ApiModelProperty(value = "会员卡ID")
+ private String memberCardId;
+
+ @ApiModelProperty(value = "会员卡名")
+ private String memberCardName;
+
+ @ApiModelProperty(value = "会员卡编号")
+ private String memberCardNo;
+
+ @ApiModelProperty(value = "会员名称")
+ private String memberName;
+
+ @ApiModelProperty(value = "消费金额")
+ private BigDecimal sellAmount;
+
+ @ApiModelProperty(value = "实际入账")
+ private BigDecimal realAmount;
+
+ @ApiModelProperty(value = "1商品 2开卡 ")
+ @TableField("SELL_TYPE")
+ private Integer sellType;
+
+ @ApiModelProperty(value = "0正常 1取消")
+ private Integer sellStatus;
+
+ @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 BigDecimal memberCardAfterAmount;
+
+ private BigDecimal memberCardBeforeAmount;
+
+ @ApiModelProperty(value = "消费后金额")
+ private BigDecimal memberCardAfterGiveAmount;
+
+ private BigDecimal memberCardBeforeGiveAmount;
+
+ @ApiModelProperty("订单详情")
+ private List sellDetailList;
+
+ @ApiModelProperty("支付方式")
+ private List sellPayList;
+
+ @ApiModelProperty(value = "备注")
+ private String remark;
+}
diff --git a/src/main/java/com/dd/admin/business/sell/entity/Sell.java b/src/main/java/com/dd/admin/business/sell/entity/Sell.java
new file mode 100644
index 0000000..8035ddd
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sell/entity/Sell.java
@@ -0,0 +1,140 @@
+package com.dd.admin.business.sell.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;
+
+/**
+ *
+ * 订单
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("business_sell")
+@ApiModel(value="Sell对象", description="订单")
+public class Sell implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "订单id")
+ @TableId(value = "SELL_ID", type = IdType.ASSIGN_UUID)
+ private String sellId;
+
+ @ApiModelProperty(value = "订单号")
+ @TableField("SELL_NO")
+ private String sellNo;
+
+ @ApiModelProperty(value = "流水号")
+ @TableField("SERIAL_NO")
+ private String serialNo;
+
+ @ApiModelProperty(value = "会员ID")
+ @TableField("MEMBER_ID")
+ private String memberId;
+
+ @ApiModelProperty(value = "会员卡ID")
+ @TableField("MEMBER_CARD_ID")
+ private String memberCardId;
+
+ @ApiModelProperty(value = "会员卡名")
+ @TableField("MEMBER_CARD_NAME")
+ private String memberCardName;
+
+ @ApiModelProperty(value = "会员卡编号")
+ @TableField("MEMBER_CARD_NO")
+ private String memberCardNo;
+
+ @ApiModelProperty(value = "会员名称")
+ @TableField("MEMBER_NAME")
+ private String memberName;
+
+ @ApiModelProperty(value = "消费金额")
+ @TableField("SELL_AMOUNT")
+ private BigDecimal sellAmount;
+
+ @ApiModelProperty(value = "实际入账")
+ @TableField("REAL_AMOUNT")
+ private BigDecimal realAmount;
+
+ @ApiModelProperty(value = "1商品 2开卡 ")
+ @TableField("SELL_TYPE")
+ private Integer sellType;
+
+ @ApiModelProperty(value = "0正常 1取消")
+ @TableField("SELL_STATUS")
+ private Integer sellStatus;
+
+ @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;
+
+ @ApiModelProperty(value = "消费后金额")
+ @TableField("MEMBER_CARD_AFTER_AMOUNT")
+ private BigDecimal memberCardAfterAmount;
+
+ @TableField("MEMBER_CARD_BEFORE_AMOUNT")
+ private BigDecimal memberCardBeforeAmount;
+
+ @ApiModelProperty(value = "消费后金额")
+ @TableField("MEMBER_CARD_AFTER_GIVE_AMOUNT")
+ private BigDecimal memberCardAfterGiveAmount;
+
+ @TableField("MEMBER_CARD_BEFORE_GIVE_AMOUNT")
+ private BigDecimal memberCardBeforeGiveAmount;
+
+ @ApiModelProperty(value = "备注")
+ private String remark;
+}
diff --git a/src/main/java/com/dd/admin/business/sell/enums/CancelSellServiceEnum.java b/src/main/java/com/dd/admin/business/sell/enums/CancelSellServiceEnum.java
new file mode 100644
index 0000000..8996af8
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sell/enums/CancelSellServiceEnum.java
@@ -0,0 +1,48 @@
+package com.dd.admin.business.sell.enums;
+
+
+import com.dd.admin.common.exception.ApiException;
+
+import java.util.Arrays;
+
+import static com.dd.admin.business.pay.enmus.CashierExceptionEnum.PAY_SELL_CANCEL_ERROR;
+import static com.dd.admin.business.pay.enmus.PayConst.*;
+
+
+public enum CancelSellServiceEnum {
+ CANCEL_MEMBER_BUILD_CARD(SELL_TYPE_BUILD_CARD,"cancelMemberBuildCard"),
+ CANCEL_MEMBER_CHARGED_CARD(SELL_TYPE_CHARGED_CARD,"cancelMemberChargedCard"),
+ CANCEL_MEMBER_PRODUCT(SELL_TYPE_PRODUCT,"cancelMemberProduct"),
+ ;
+
+ private Integer sellType;
+ private String serviceName;
+
+ CancelSellServiceEnum(Integer sellType, String serviceName) {
+ this.sellType = sellType;
+ this.serviceName = serviceName;
+ }
+
+ public Integer getSellType() {
+ return sellType;
+ }
+
+ public void setSellType(Integer sellType) {
+ this.sellType = sellType;
+ }
+
+ public String getServiceName() {
+ return serviceName;
+ }
+
+ public void setServiceName(String serviceName) {
+ this.serviceName = serviceName;
+ }
+
+ public static CancelSellServiceEnum getEnumBySellType(Integer sellType) {
+ CancelSellServiceEnum[] cancelSellServiceEnums = CancelSellServiceEnum.values();
+ return Arrays.stream(cancelSellServiceEnums)
+ .filter(cancelSellServiceEnum -> cancelSellServiceEnum.getSellType().equals(sellType))
+ .findFirst().orElseThrow(() -> new ApiException(PAY_SELL_CANCEL_ERROR));
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/sell/mapper/SellMapper.java b/src/main/java/com/dd/admin/business/sell/mapper/SellMapper.java
new file mode 100644
index 0000000..6c3eb43
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sell/mapper/SellMapper.java
@@ -0,0 +1,30 @@
+package com.dd.admin.business.sell.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.sell.entity.Sell;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dd.admin.business.sell.domain.SellVo;
+import com.dd.admin.business.sell.domain.SellDto;
+
+import java.util.List;
+
+/**
+ *
+ * 订单 Mapper 接口
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+@Mapper
+public interface SellMapper extends BaseMapper {
+
+ IPage selectSellPage(Page page, @Param("sellDto") SellDto sellDto);
+
+ List selectSellList(@Param("sellDto") SellDto sellDto);
+
+ Integer selectTodayCount(@Param("shopId") String shopId);
+}
diff --git a/src/main/java/com/dd/admin/business/sell/mapper/xml/SellMapper.xml b/src/main/java/com/dd/admin/business/sell/mapper/xml/SellMapper.xml
new file mode 100644
index 0000000..045ae07
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sell/mapper/xml/SellMapper.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELL_ID, SELL_NO, SERIAL_NO, MEMBER_ID, MEMBER_CARD_ID,MEMBER_NAME, SELL_AMOUNT, REAL_AMOUNT, SELL_TYPE, SELL_STATUS, DELETED, VERSION, SHOP_ID, SHOP_NAME, CREATE_NAME, CREATE_TIME, CREATE_ID, UPDATE_TIME, UPDATE_NAME, UPDATE_ID, MEMBER_CARD_AFTER_AMOUNT, MEMBER_CARD_BEFORE_AMOUNT,MEMBER_CARD_AFTER_GIVE_AMOUNT, MEMBER_CARD_BEFORE_GIVE_AMOUNT
+
+
+
+ select
+ *
+ from business_sell where 1 = 1
+
+ and shop_id = #{sellDto.shopId}
+
+
+ and (SELL_NO like CONCAT('%', #{sellDto.keyword}, '%')
+ or MEMBER_NAME like concat('%',#{sellDto.keyword},'%'))
+
+ order by create_time desc
+
+
+
+ select
+ *
+ from business_sell where 1 = 1
+
+ and shop_id = #{sellDto.shopId}
+
+ order by create_time desc
+
+
+ select count(*) from business_sell where shop_id = #{shopId} and DATE(create_time) = CURDATE()
+
+
diff --git a/src/main/java/com/dd/admin/business/sell/service/CancelSellService.java b/src/main/java/com/dd/admin/business/sell/service/CancelSellService.java
new file mode 100644
index 0000000..531dc5b
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sell/service/CancelSellService.java
@@ -0,0 +1,9 @@
+package com.dd.admin.business.sell.service;
+
+
+import com.dd.admin.business.sell.entity.Sell;
+
+public interface CancelSellService {
+
+ void cancel(Sell sell);
+}
diff --git a/src/main/java/com/dd/admin/business/sell/service/SellService.java b/src/main/java/com/dd/admin/business/sell/service/SellService.java
new file mode 100644
index 0000000..0cb9e27
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sell/service/SellService.java
@@ -0,0 +1,32 @@
+package com.dd.admin.business.sell.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.dd.admin.business.sell.entity.Sell;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.dd.admin.business.sell.domain.SellVo;
+import com.dd.admin.business.sell.domain.SellDto;
+import java.util.List;
+
+/**
+ *
+ * 订单 服务类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+public interface SellService extends IService {
+
+ //订单-分页列表
+ IPage selectSellPage(SellDto sellDto);
+
+ //订单-列表
+ List selectSellList(SellDto sellDto);
+
+ Integer selectTodayCount(String shopId);
+
+ //填充销售详情
+ public void setSellDetail(List sellVoList);
+
+ Integer selectSellCount(String shopId);
+}
diff --git a/src/main/java/com/dd/admin/business/sell/service/impl/CancelMemberBuildCard.java b/src/main/java/com/dd/admin/business/sell/service/impl/CancelMemberBuildCard.java
new file mode 100644
index 0000000..9906cac
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sell/service/impl/CancelMemberBuildCard.java
@@ -0,0 +1,48 @@
+package com.dd.admin.business.sell.service.impl;
+
+
+import com.dd.admin.business.memberCard.entity.MemberCard;
+import com.dd.admin.business.memberCard.service.MemberCardService;
+import com.dd.admin.business.sell.entity.Sell;
+import com.dd.admin.business.sell.service.CancelSellService;
+import com.dd.admin.business.sell.service.SellService;
+import com.dd.admin.business.sellDetail.service.SellDetailService;
+import com.dd.admin.common.exception.ApiException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+
+import static com.dd.admin.business.pay.enmus.CashierExceptionEnum.PAY_SELL_CARD_AMOUNT_CHANGE;
+
+
+@Service
+@Slf4j
+public class CancelMemberBuildCard implements CancelSellService {
+ @Autowired
+ MemberCardService memberCardService;
+ @Autowired
+ SellDetailService sellDetailService;
+ @Autowired
+ SellService sellService;
+ @Override
+ public void cancel(Sell sell) {
+ Sell extraSellInfo = sellService.getById(sell.getSellId());
+
+ //消费时用的哪张会员卡
+ MemberCard membercard = memberCardService.getById(extraSellInfo.getMemberCardId());
+ BigDecimal sellCardAmount = extraSellInfo.getMemberCardAfterAmount();
+ BigDecimal sellCardGiveAmount = extraSellInfo.getMemberCardAfterGiveAmount();
+ log.info("订单显示的卡余额:"+sellCardAmount);
+ BigDecimal cardAmount = membercard.getAmount();
+ BigDecimal cardGiveAmount = membercard.getGiveAmount();
+ log.info("当前卡余额:"+cardAmount);
+ //当前余额和订单充值余额比较
+ if(sellCardAmount.compareTo(cardAmount) != 0 || cardGiveAmount.compareTo(sellCardGiveAmount) != 0){
+ throw new ApiException(PAY_SELL_CARD_AMOUNT_CHANGE);
+ }
+ //删除卡
+ memberCardService.removeById(membercard);
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/sell/service/impl/CancelMemberChargedCard.java b/src/main/java/com/dd/admin/business/sell/service/impl/CancelMemberChargedCard.java
new file mode 100644
index 0000000..9a73d68
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sell/service/impl/CancelMemberChargedCard.java
@@ -0,0 +1,65 @@
+package com.dd.admin.business.sell.service.impl;
+
+import com.dd.admin.business.memberCard.entity.MemberCard;
+import com.dd.admin.business.memberCard.service.MemberCardService;
+import com.dd.admin.business.sell.entity.Sell;
+import com.dd.admin.business.sell.service.CancelSellService;
+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.common.exception.ApiException;
+import com.dd.admin.common.utils.BigDecimalUtil;
+import lombok.extern.slf4j.Slf4j;
+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.CashierExceptionEnum.PAY_SELL_CARD_AMOUNT_NOT_SUFFICIENT_FUNDS;
+
+
+@Service
+@Slf4j
+public class CancelMemberChargedCard implements CancelSellService {
+ @Autowired
+ MemberCardService memberCardService;
+ @Autowired
+ SellDetailService sellDetailService;
+ @Autowired
+ SellService sellService;
+ @Override
+ public void cancel(Sell sell) {
+ Sell extraSellInfo = sellService.getById(sell.getSellId());
+ //消费时用的哪张会员卡
+ MemberCard memberCard = memberCardService.getById(extraSellInfo.getMemberCardId());
+
+ List sellDetailList = sellDetailService.selectSellDetailList(sell.getSellId());
+ SellDetail sellDetail = sellDetailList.get(0);
+
+ BigDecimal sellCardAmount = sellDetail.getAmount();
+ BigDecimal sellCardGiveAmount = sellDetail.getGiveAmount();
+
+ BigDecimal cardAmount = memberCard.getAmount();
+ log.info("当前卡余额:"+cardAmount);
+ BigDecimal cardGiveAmount = memberCard.getGiveAmount();
+ log.info("当前卡余额:"+cardAmount);
+
+ //消费后余额
+ BigDecimal nowCardAmount = BigDecimalUtil.sub(cardAmount,sellCardAmount);
+ BigDecimal nowGiveAmount = BigDecimalUtil.sub(cardGiveAmount,sellCardGiveAmount);
+
+ if (nowCardAmount.signum() == -1|nowGiveAmount.signum() == -1) {
+ throw new ApiException(PAY_SELL_CARD_AMOUNT_NOT_SUFFICIENT_FUNDS);
+ }
+
+ //修改当前卡金赠送金
+ memberCard.setAmount(nowCardAmount);
+ memberCard.setGiveAmount(nowGiveAmount);
+ Boolean b = memberCardService.updateById(memberCard);
+ if(!b){
+ throw new ApiException(CARD_AMOUNT_CHANGE);
+ }
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/sell/service/impl/CancelMemberProduct.java b/src/main/java/com/dd/admin/business/sell/service/impl/CancelMemberProduct.java
new file mode 100644
index 0000000..1e2b68d
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sell/service/impl/CancelMemberProduct.java
@@ -0,0 +1,131 @@
+package com.dd.admin.business.sell.service.impl;
+
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
+import com.dd.admin.business.memberCard.entity.MemberCard;
+import com.dd.admin.business.memberCard.service.MemberCardService;
+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.CancelSellService;
+import com.dd.admin.business.sellDetail.domain.SellDetailDto;
+import com.dd.admin.business.sellDetail.domain.SellDetailVo;
+import com.dd.admin.business.sellDetail.entity.SellDetail;
+import com.dd.admin.business.sellDetail.service.SellDetailService;
+import com.dd.admin.business.sellPay.domain.SellpayVo;
+import com.dd.admin.business.sellPay.entity.Sellpay;
+import com.dd.admin.business.sellPay.service.SellpayService;
+import com.dd.admin.business.stock.entity.Stock;
+import com.dd.admin.business.stock.service.StockService;
+import com.dd.admin.business.stockDetail.domain.StockDetailDto;
+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 lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+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.CARD_AMOUNT_CHANGE;
+import static com.dd.admin.business.pay.enmus.PayConst.PAY_TYPE_CARD;
+import static com.dd.admin.business.pay.enmus.PayConst.PAY_TYPE_CARD_GIVE;
+import static com.dd.admin.common.consts.MemberShopConst.*;
+
+@Service
+@Slf4j
+public class CancelMemberProduct implements CancelSellService {
+
+ @Autowired
+ MemberCardService memberCardService;
+ @Autowired
+ SellDetailService sellDetailService;
+ @Autowired
+ ProductService productService;
+ @Autowired
+ StockService stockService;
+ @Autowired
+ StockDetailService stockDetailService;
+ @Autowired
+ SellpayService sellpayService;
+
+ @Override
+ public void cancel(Sell sell) {
+ List sellDetailList = sellDetailService.selectSellDetailList(sell.getSellId());
+ //增加库存
+ addInventory(sellDetailList);
+
+ MemberCard memberCard = memberCardService.getById(sell.getMemberCardId());
+
+ if(memberCard!=null){
+ BigDecimal cardAmount = memberCard.getAmount();
+ log.info("当前卡余额:"+cardAmount);
+ BigDecimal cardGiveAmount = memberCard.getGiveAmount();
+ log.info("当前卡赠送金余额:"+cardAmount);
+
+
+ List sellPayVoList = sellpayService.selectSellPayList(sell.getSellId());
+
+ //计算订单卡金支付的金额
+ Sellpay memberCardPay = sellPayVoList.stream().filter(p->
+ p.getPayType().equals(PAY_TYPE_CARD)
+ ).findFirst().orElse(null);
+ Sellpay memberGivePay= sellPayVoList.stream().filter(p->
+ p.getPayType().equals(PAY_TYPE_CARD_GIVE)
+ ).findFirst().orElse(null);
+
+ if(memberCardPay!=null){
+ memberCard.setAmount(BigDecimalUtil.add(cardAmount,memberCardPay.getAmount()));
+ }
+ if(memberGivePay!=null){
+ memberCard.setGiveAmount(BigDecimalUtil.add(cardGiveAmount,memberGivePay.getAmount()));
+ }
+ Boolean b = memberCardService.updateById(memberCard);
+ if(!b){
+ throw new ApiException(CARD_AMOUNT_CHANGE);
+ }
+ }
+ }
+
+
+ void addInventory(List productDetailList){
+
+ List stockDetailList = new ArrayList<>();
+ //模拟入库
+ productDetailList.stream().forEach(sellDetail -> {
+ String productId = sellDetail.getProductId();
+ Product product = productService.getById(productId);
+ if(product.getStockControl().equals(STOCK_CONTROL_YES)){
+ StockDetail stockDetail = new StockDetail();
+ stockDetail.setProductId(product.getProductId());
+ stockDetail.setProductName(product.getProductName());
+ stockDetail.setCount(sellDetail.getCount());
+ productService.addProductCount(product.getProductId(),sellDetail.getCount());
+ stockDetailList.add(stockDetail);
+ }
+ });
+
+
+ if(CollectionUtil.isNotEmpty(stockDetailList)){
+ //创建入库总单
+ Stock stock = new Stock();
+ stock.setStockInType(STOCK_IN_TYPE_CANCEL);
+ stock.setStockTitle(DateUtil.formatChineseDate(new Date(),false,true) + SecurityUtil.getLoginUser().getDeptName() + "入库单");
+ stock.setStockNo(StringUtil.getDateStringNow() + StringUtil.createCode(4));
+ stock.setStockType(STOCK_IN);
+ stockService.save(stock);
+
+ stockDetailList.stream().forEach(stockDetail -> {stockDetail.setStockId(stock.getStockId());});
+ stockDetailService.saveBatch(stockDetailList);
+ }
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/sell/service/impl/SellServiceImpl.java b/src/main/java/com/dd/admin/business/sell/service/impl/SellServiceImpl.java
new file mode 100644
index 0000000..d33eaa9
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sell/service/impl/SellServiceImpl.java
@@ -0,0 +1,97 @@
+package com.dd.admin.business.sell.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.detailServer.entity.SellDetailServer;
+import com.dd.admin.business.detailServer.service.SellDetailServerService;
+import com.dd.admin.business.sellDetail.entity.SellDetail;
+import com.dd.admin.business.sellDetail.service.SellDetailService;
+import com.dd.admin.business.sellPay.domain.SellpayVo;
+import com.dd.admin.business.sellPay.entity.Sellpay;
+import com.dd.admin.business.sellPay.service.SellpayService;
+import com.dd.admin.business.sellPay.service.impl.SellpayServiceImpl;
+import com.dd.admin.common.model.PageFactory;
+import com.dd.admin.business.sell.entity.Sell;
+import com.dd.admin.business.sell.mapper.SellMapper;
+import com.dd.admin.business.sell.service.SellService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dd.admin.common.utils.ColumnUtil;
+import com.dd.admin.common.utils.CommonUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.dd.admin.business.sell.domain.SellVo;
+import com.dd.admin.business.sell.domain.SellDto;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ *
+ * 订单 服务实现类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+@Service
+public class SellServiceImpl extends ServiceImpl implements SellService {
+
+ @Autowired
+ private SellDetailService sellDetailService;
+ @Autowired
+ private SellpayService sellpayService;
+ @Autowired
+ private SellDetailServerService sellDetailServerService;
+
+ @Override
+ public IPage selectSellPage(SellDto sellDto) {
+ Page page = PageFactory.defaultPage();
+ return baseMapper.selectSellPage(page,sellDto);
+ }
+
+ @Override
+ public List selectSellList(SellDto sellDto) {
+ return baseMapper.selectSellList(sellDto);
+ }
+
+ @Override
+ public Integer selectTodayCount(String shopId) {
+ return baseMapper.selectTodayCount(shopId);
+ }
+
+ @Override//TODO
+ public void setSellDetail(List sellVoList) {
+ List sellIds = sellVoList.stream().map(SellVo::getSellId).collect(Collectors.toList());
+ // 使用 MyBatis Plus 的条件构造器查询 SelldetailVo 列表
+
+ List sellDetailList = sellDetailService.selectSellDetailList(sellIds);
+ List sellpayList = sellpayService.selectSellPayList(sellIds);
+
+ List sellDetailIds = sellDetailList.stream().map(sellDetail -> sellDetail.getSellDetailId()).collect(Collectors.toList());
+ List sellDetailServers = sellDetailServerService.selectSellDetailServerListBySellDetailIds(sellDetailIds);
+ // 获得所有的消费总单
+ sellVoList.forEach(sellVo -> {
+ List selldetails = sellDetailList.stream()
+ .filter(selldetail -> sellVo.getSellId().equals(selldetail.getSellId()))
+ .collect(Collectors.toList());
+ selldetails.stream().forEach(sellDetail -> {
+ List detailServerList = sellDetailServers.stream().filter(sellDetailServer -> sellDetail.getSellDetailId().equals(sellDetailServer.getSellDetailId())).collect(Collectors.toList());
+ sellDetail.setDetailServerList(detailServerList);
+ });
+ sellVo.setSellDetailList(selldetails);
+
+ List sellpays = sellpayList.stream()
+ .filter(sellpay -> sellVo.getSellId().equals(sellpay.getSellId()))
+ .collect(Collectors.toList());
+ sellVo.setSellPayList(sellpays);
+ });
+ }
+
+ @Override
+ public Integer selectSellCount(String shopId) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(Sell::getShopId, shopId);
+ return baseMapper.selectCount(queryWrapper);
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/sellDetail/controller/SellDetailController.java b/src/main/java/com/dd/admin/business/sellDetail/controller/SellDetailController.java
new file mode 100644
index 0000000..ce9832b
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sellDetail/controller/SellDetailController.java
@@ -0,0 +1,88 @@
+package com.dd.admin.business.sellDetail.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.sellDetail.entity.SellDetail;
+import com.dd.admin.business.sellDetail.domain.SellDetailVo;
+import com.dd.admin.business.sellDetail.domain.SellDetailDto;
+import com.dd.admin.business.sellDetail.service.SellDetailService;
+
+import java.util.List;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * 订单详情 前端控制器
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+@Api(tags = "订单详情")
+@RestController
+public class SellDetailController {
+
+ @Autowired
+ SellDetailService sellDetailService;
+
+ @ApiOperation(value = "订单详情-分页列表")
+ @ApiOperationSupport(order = 1)
+ @GetMapping("/admin/sellDetail/page")
+ public ResultBean> page(SellDetailDto sellDetailDto) {
+ IPage pageInfo = sellDetailService.selectSellDetailPage(sellDetailDto);
+ return ResultBean.success(pageInfo);
+ }
+
+ @ApiOperation(value = "订单详情-列表")
+ @ApiOperationSupport(order = 2)
+ @GetMapping("/admin/sellDetail/list")
+ public ResultBean> list(SellDetailDto sellDetailDto) {
+ List list = sellDetailService.selectSellDetailList(sellDetailDto);
+ return ResultBean.success(list);
+ }
+
+ @ApiOperation(value = "订单详情-添加")
+ @ApiOperationSupport(order = 3)
+ @PostMapping("/admin/sellDetail/add")
+ public ResultBean add(@RequestBody @Validated SellDetailDto sellDetailDto) {
+ SellDetail sellDetail = BeanUtil.copyProperties(sellDetailDto, SellDetail.class);
+ sellDetailService.save(sellDetail);
+ return ResultBean.success(sellDetail);
+ }
+
+ @ApiOperation(value = "订单详情-查询")
+ @ApiOperationSupport(order = 4)
+ @GetMapping("/admin/sellDetail/{sellDetailId}")
+ public ResultBean get(@PathVariable @NotBlank String sellDetailId) {
+ SellDetail sellDetail = sellDetailService.getById(sellDetailId);
+ SellDetailVo sellDetailVo = BeanUtil.copyProperties(sellDetail,SellDetailVo.class);
+ return ResultBean.success(sellDetailVo);
+ }
+
+ @ApiOperation(value = "订单详情-修改")
+ @ApiOperationSupport(order = 5)
+ @PostMapping("/admin/sellDetail/update")
+ public ResultBean update(@RequestBody @Validated(UpdateGroup.class) SellDetailDto sellDetailDto) {
+ SellDetail sellDetail = BeanUtil.copyProperties(sellDetailDto, SellDetail.class);
+ sellDetailService.updateById(sellDetail);
+ return ResultBean.success(sellDetail);
+ }
+
+ @ApiOperation(value = "订单详情-删除")
+ @ApiOperationSupport(order = 6)
+ @GetMapping("/admin/sellDetail/delete/{sellDetailId}")
+ public ResultBean delete(@PathVariable @NotBlank String sellDetailId) {
+ Boolean b = sellDetailService.removeById(sellDetailId);
+ return ResultBean.success(b);
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/sellDetail/domain/SellDetailDto.java b/src/main/java/com/dd/admin/business/sellDetail/domain/SellDetailDto.java
new file mode 100644
index 0000000..6b883fc
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sellDetail/domain/SellDetailDto.java
@@ -0,0 +1,107 @@
+package com.dd.admin.business.sellDetail.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;
+
+
+/**
+ *
+ * 订单详情返回对象
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+@Data
+@ApiModel(value="订单详情接收对象")
+public class SellDetailDto {
+
+
+ @ApiModelProperty(value = "销售细单id")
+ @NotBlank(message = "订单详情id不能为空",groups = UpdateGroup.class)
+ private String sellDetailId;
+
+ @ApiModelProperty(value = "会员id")
+ private String memberId;
+
+ @ApiModelProperty(value = "订单id")
+ private String sellId;
+
+ @ApiModelProperty(value = "1开卡 2续卡 3项目 4商品")
+ private Integer sellType;
+
+ @ApiModelProperty(value = "商品类型")
+ private Integer productType;
+
+ @ApiModelProperty(value = "会员卡id")
+ private String memberCardId;
+
+ @ApiModelProperty(value = "商品ID")
+ private String productId;
+
+ @ApiModelProperty(value = "商品名")
+ private String productName;
+
+ @ApiModelProperty(value = "商品数量")
+ private Long count;
+
+ @ApiModelProperty(value = "折扣")
+ private BigDecimal discount;
+
+ @ApiModelProperty(value = "金额")
+ private BigDecimal amount;
+
+ @ApiModelProperty(value = "实际金额")
+ private BigDecimal realAmount;
+
+ @ApiModelProperty(value = "卡项ID")
+ private String cardId;
+
+ @ApiModelProperty(value = "卡名")
+ private String cardName;
+
+ @ApiModelProperty(value = "赠送金额")
+ private BigDecimal giveAmount;
+
+ @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 sellStatus;
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/sellDetail/domain/SellDetailVo.java b/src/main/java/com/dd/admin/business/sellDetail/domain/SellDetailVo.java
new file mode 100644
index 0000000..8731233
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sellDetail/domain/SellDetailVo.java
@@ -0,0 +1,105 @@
+package com.dd.admin.business.sellDetail.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;
+
+/**
+ *
+ * 订单详情返回对象
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+@Data
+@ApiModel(value="订单详情返回对象")
+public class SellDetailVo {
+
+
+ @ApiModelProperty(value = "销售细单id")
+ private String sellDetailId;
+
+ @ApiModelProperty(value = "会员id")
+ private String memberId;
+
+ @ApiModelProperty(value = "订单id")
+ private String sellId;
+
+ @ApiModelProperty(value = "1开卡 2续卡 3项目 4商品")
+ private Integer sellType;
+
+ @ApiModelProperty(value = "商品类型")
+ private Integer productType;
+
+ @ApiModelProperty(value = "会员卡id")
+ private String memberCardId;
+
+ @ApiModelProperty(value = "商品ID")
+ private String productId;
+
+ @ApiModelProperty(value = "商品名")
+ private String productName;
+
+ @ApiModelProperty(value = "商品数量")
+ private Long count;
+
+ @ApiModelProperty(value = "折扣")
+ private BigDecimal discount;
+
+ @ApiModelProperty(value = "金额")
+ private BigDecimal amount;
+
+ @ApiModelProperty(value = "实际金额")
+ private BigDecimal realAmount;
+
+ @ApiModelProperty(value = "卡项ID")
+ private String cardId;
+
+ @ApiModelProperty(value = "卡名")
+ private String cardName;
+
+ @ApiModelProperty(value = "赠送金额")
+ private BigDecimal giveAmount;
+
+ @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 sellStatus;
+
+ @ApiModelProperty(value = "百份比值")
+ private String percentage;
+
+}
diff --git a/src/main/java/com/dd/admin/business/sellDetail/entity/SellDetail.java b/src/main/java/com/dd/admin/business/sellDetail/entity/SellDetail.java
new file mode 100644
index 0000000..dd3cc6c
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sellDetail/entity/SellDetail.java
@@ -0,0 +1,141 @@
+package com.dd.admin.business.sellDetail.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+
+import java.util.ArrayList;
+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 java.util.List;
+
+import com.dd.admin.business.detailServer.entity.SellDetailServer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ * 订单详情
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("business_sell_detail")
+@ApiModel(value="SellDetail对象", description="订单详情")
+public class SellDetail implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "销售细单id")
+ @TableId(value = "SELL_DETAIL_ID", type = IdType.ASSIGN_UUID)
+ private String sellDetailId;
+
+ @ApiModelProperty(value = "会员id")
+ @TableField("MEMBER_ID")
+ private String memberId;
+
+ @ApiModelProperty(value = "订单id")
+ @TableField("SELL_ID")
+ private String sellId;
+
+ @ApiModelProperty(value = "1开卡 2续卡 3项目 4商品")
+ @TableField("SELL_TYPE")
+ private Integer sellType;
+
+ @ApiModelProperty(value = "商品类型")
+ @TableField("PRODUCT_TYPE")
+ private Integer productType;
+
+ @ApiModelProperty(value = "会员卡id")
+ @TableField("MEMBER_CARD_ID")
+ private String memberCardId;
+
+ @ApiModelProperty(value = "商品ID")
+ @TableField("PRODUCT_ID")
+ private String productId;
+
+ @ApiModelProperty(value = "商品名")
+ @TableField("PRODUCT_NAME")
+ private String productName;
+
+ @ApiModelProperty(value = "商品数量")
+ @TableField("COUNT")
+ private Long count;
+
+ @ApiModelProperty(value = "折扣")
+ @TableField("DISCOUNT")
+ private BigDecimal discount;
+
+ @ApiModelProperty(value = "金额")
+ @TableField("AMOUNT")
+ private BigDecimal amount;
+
+ @ApiModelProperty(value = "实际金额")
+ @TableField("REAL_AMOUNT")
+ private BigDecimal realAmount;
+
+ @ApiModelProperty(value = "商品实际金额")
+ @TableField("TOTAL_REAL_AMOUNT")
+ private BigDecimal totalRealAmount;
+
+ @ApiModelProperty(value = "卡项ID")
+ @TableField("CARD_ID")
+ private String cardId;
+
+ @ApiModelProperty(value = "卡名")
+ @TableField("CARD_NAME")
+ private String cardName;
+
+ @ApiModelProperty(value = "赠送金额")
+ @TableField("GIVE_AMOUNT")
+ private BigDecimal giveAmount;
+
+ @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("SELL_STATUS")
+ private Integer sellStatus;
+
+ @TableField(exist = false)
+ List detailServerList = new ArrayList<>();
+
+}
diff --git a/src/main/java/com/dd/admin/business/sellDetail/mapper/SellDetailMapper.java b/src/main/java/com/dd/admin/business/sellDetail/mapper/SellDetailMapper.java
new file mode 100644
index 0000000..d174385
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sellDetail/mapper/SellDetailMapper.java
@@ -0,0 +1,32 @@
+package com.dd.admin.business.sellDetail.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.sellDetail.entity.SellDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dd.admin.business.sellDetail.domain.SellDetailVo;
+import com.dd.admin.business.sellDetail.domain.SellDetailDto;
+
+import java.util.List;
+
+/**
+ *
+ * 订单详情 Mapper 接口
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+@Mapper
+public interface SellDetailMapper extends BaseMapper {
+
+ IPage selectSellDetailPage(Page page, @Param("sellDetailDto") SellDetailDto sellDetailDto);
+
+ List selectSellDetailList(@Param("sellDetailDto") SellDetailDto sellDetailDto);
+
+ Integer updateSellDetailStatus(@Param("SellId")String SellId);
+
+ List productProportion(@Param("shopId") String shopId, @Param("limit") Integer limit);
+}
diff --git a/src/main/java/com/dd/admin/business/sellDetail/mapper/xml/SellDetailMapper.xml b/src/main/java/com/dd/admin/business/sellDetail/mapper/xml/SellDetailMapper.xml
new file mode 100644
index 0000000..de3e79b
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sellDetail/mapper/xml/SellDetailMapper.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELL_DETAIL_ID, MEMBER_ID, SELL_ID, SELL_TYPE, MEMBER_CARD_ID, PRODUCT_ID, PRODUCT_NAME, COUNT, DISCOUNT, AMOUNT, REAL_AMOUNT, CARD_ID, CARD_NAME, GIVE_AMOUNT, SHOP_ID, SHOP_NAME, CREATE_NAME, CREATE_TIME, CREATE_ID, UPDATE_TIME, UPDATE_NAME, UPDATE_ID, SELL_STATUS
+
+
+ update business_sell_detail set sell_status = 1 where sell_id = #{sellId}
+
+
+
+ select
+ *
+ from business_sell_detail where 1 = 1
+
+
+
+ select
+ *
+ from business_sell_detail where 1 = 1
+
+
+ SELECT
+ a.product_id,
+ b.PRODUCT_NAME,
+ SUM(a.COUNT) AS productCount,
+ -- 计算百分比,先计算每个分组的数量占总数的比例,乘以100得到百分比值,再使用ROUND函数保留两位小数,最后用CONCAT拼接上%符号
+ ROUND(SUM(a.COUNT) / (SELECT SUM(COUNT) FROM business_sell_detail WHERE sell_type = 1 AND product_type = 1 AND SELL_STATUS = 0) * 100, 2) AS percentage
+ FROM
+ business_sell_detail a
+ LEFT JOIN
+ business_product b ON a.PRODUCT_ID = b.PRODUCT_ID
+ WHERE
+ a.sell_type = 1 AND a.product_type = 1 AND a.SELL_STATUS = 0
+
+ and a.shop_id = #{shopId}
+
+ GROUP BY
+ a.product_id
+
+
+
+ limit #{limit}
+
+
+
diff --git a/src/main/java/com/dd/admin/business/sellDetail/service/SellDetailService.java b/src/main/java/com/dd/admin/business/sellDetail/service/SellDetailService.java
new file mode 100644
index 0000000..40506fb
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sellDetail/service/SellDetailService.java
@@ -0,0 +1,38 @@
+package com.dd.admin.business.sellDetail.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.dd.admin.business.sellDetail.entity.SellDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.dd.admin.business.sellDetail.domain.SellDetailVo;
+import com.dd.admin.business.sellDetail.domain.SellDetailDto;
+import java.util.List;
+
+/**
+ *
+ * 订单详情 服务类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+public interface SellDetailService extends IService {
+
+ //订单详情-分页列表
+ IPage selectSellDetailPage(SellDetailDto sellDetailDto);
+
+ //订单详情-列表
+ List selectSellDetailList(SellDetailDto sellDetailDto);
+
+ //订单详情-列表
+ List selectSellDetailList(List sellIds);
+
+ //订单详情-列表
+ List selectSellDetailList(String sellId);
+
+
+ void updateSellDetailStatus(String sellId);
+
+ List productProportion(String shopId, Integer limit);
+
+}
diff --git a/src/main/java/com/dd/admin/business/sellDetail/service/impl/SellDetailServiceImpl.java b/src/main/java/com/dd/admin/business/sellDetail/service/impl/SellDetailServiceImpl.java
new file mode 100644
index 0000000..216260a
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sellDetail/service/impl/SellDetailServiceImpl.java
@@ -0,0 +1,70 @@
+package com.dd.admin.business.sellDetail.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.common.consts.MemberShopConst;
+import com.dd.admin.common.model.PageFactory;
+import com.dd.admin.business.sellDetail.entity.SellDetail;
+import com.dd.admin.business.sellDetail.mapper.SellDetailMapper;
+import com.dd.admin.business.sellDetail.service.SellDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.dd.admin.business.sellDetail.domain.SellDetailVo;
+import com.dd.admin.business.sellDetail.domain.SellDetailDto;
+import java.util.List;
+
+/**
+ *
+ * 订单详情 服务实现类
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+@Service
+public class SellDetailServiceImpl extends ServiceImpl implements SellDetailService {
+
+ @Override
+ public IPage selectSellDetailPage(SellDetailDto sellDetailDto) {
+ Page page = PageFactory.defaultPage();
+ return baseMapper.selectSellDetailPage(page,sellDetailDto);
+ }
+
+ @Override
+ public List selectSellDetailList(SellDetailDto sellDetailDto) {
+ return baseMapper.selectSellDetailList(sellDetailDto);
+ }
+
+ @Override
+ public List selectSellDetailList(List sellIds) {
+ LambdaQueryWrapper selldetailQueryWrapper = new LambdaQueryWrapper<>();
+ if(CollectionUtil.isNotEmpty(sellIds)){
+ selldetailQueryWrapper.in(SellDetail::getSellId, sellIds);
+ }
+ List sellDetailList = this.list(selldetailQueryWrapper);
+ return sellDetailList;
+ }
+
+ @Override
+ public List selectSellDetailList(String sellId) {
+ LambdaQueryWrapper selldetailQueryWrapper = new LambdaQueryWrapper<>();
+ selldetailQueryWrapper.eq(SellDetail::getSellId, sellId);
+ List sellDetailList = this.list(selldetailQueryWrapper);
+ return sellDetailList;
+ }
+
+ @Override
+ public void updateSellDetailStatus(String sellId) {
+ baseMapper.updateSellDetailStatus(sellId);
+ }
+
+ @Override
+ public List productProportion(String shopId, Integer limit) {
+ return baseMapper.productProportion(shopId,limit);
+ }
+
+
+
+}
diff --git a/src/main/java/com/dd/admin/business/sellJson/controller/SelljsonController.java b/src/main/java/com/dd/admin/business/sellJson/controller/SelljsonController.java
new file mode 100644
index 0000000..113e6bc
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/sellJson/controller/SelljsonController.java
@@ -0,0 +1,101 @@
+package com.dd.admin.business.sellJson.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.json.JSONUtil;
+import com.dd.admin.common.security.SecurityUtil;
+import com.dd.admin.common.utils.StringUtil;
+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.sellJson.entity.Selljson;
+import com.dd.admin.business.sellJson.domain.SelljsonVo;
+import com.dd.admin.business.sellJson.domain.SelljsonDto;
+import com.dd.admin.business.sellJson.service.SelljsonService;
+
+import java.util.List;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * 订单json 前端控制器
+ *
+ *
+ * @author 727869402@qq.com
+ * @since 2024-06-19
+ */
+@Api(tags = "订单json")
+@RestController
+public class SelljsonController {
+
+ @Autowired
+ SelljsonService sellJsonService;
+
+ @ApiOperation(value = "订单json-分页列表")
+ @ApiOperationSupport(order = 1)
+ @GetMapping("/admin/sellJson/page")
+ public ResultBean> page(SelljsonDto sellJsonDto) {
+ sellJsonDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
+ IPage pageInfo = sellJsonService.selectSelljsonPage(sellJsonDto);
+ return ResultBean.success(pageInfo);
+ }
+
+ @ApiOperation(value = "订单json-列表")
+ @ApiOperationSupport(order = 2)
+ @GetMapping("/admin/sellJson/list")
+ public ResultBean> list(SelljsonDto sellJsonDto) {
+ sellJsonDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
+ List list = sellJsonService.selectSelljsonList(sellJsonDto);
+ return ResultBean.success(list);
+ }
+
+ @ApiOperation(value = "订单json-添加")
+ @ApiOperationSupport(order = 3)
+ @PostMapping("/admin/sellJson/add")
+ public ResultBean add(@RequestBody @Validated SelljsonDto sellJsonDto) {
+ Selljson sellJson = BeanUtil.copyProperties(sellJsonDto, Selljson.class);
+ if(StringUtil.isNotEmpty(sellJson.getJsonId())){
+ Boolean b = sellJsonService.updateById(sellJson);
+ if(!b){
+ //证明该订单已经删除 或者计算 重新添加挂单即可
+ sellJsonService.save(sellJson);
+ }
+ }else{
+ sellJsonService.save(sellJson);
+ }
+ return ResultBean.success(sellJson);
+ }
+
+ @ApiOperation(value = "订单json-查询")
+ @ApiOperationSupport(order = 4)
+ @GetMapping("/admin/sellJson/{sellJsonId}")
+ public ResultBean get(@PathVariable @NotBlank String sellJsonId) {
+ Selljson sellJson = sellJsonService.getById(sellJsonId);
+ SelljsonVo sellJsonVo = BeanUtil.copyProperties(sellJson,SelljsonVo.class);
+ return ResultBean.success(sellJsonVo);
+ }
+
+ @ApiOperation(value = "订单json-修改")
+ @ApiOperationSupport(order = 5)
+ @PostMapping("/admin/sellJson/update")
+ public ResultBean