第一次提交

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

View File

@@ -0,0 +1,13 @@
package com.dd.admin;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class AdminApplication {
public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args);
}
}

View File

@@ -0,0 +1,95 @@
package com.dd.admin.business.card.controller;
import cn.hutool.core.bean.BeanUtil;
import com.dd.admin.common.aop.operationLog.aop.OperLog;
import com.dd.admin.common.aop.operationLog.aop.OperType;
import com.dd.admin.common.security.SecurityUtil;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.dd.admin.common.model.UpdateGroup;
import com.dd.admin.common.model.result.ResultBean;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotBlank;
import com.dd.admin.business.card.entity.Card;
import com.dd.admin.business.card.domain.CardVo;
import com.dd.admin.business.card.domain.CardDto;
import com.dd.admin.business.card.service.CardService;
import java.util.List;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 前端控制器
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-17
*/
@Api(tags = "")
@RestController
public class CardController {
@Autowired
CardService cardService;
@ApiOperation(value = "-分页列表")
@ApiOperationSupport(order = 1)
@GetMapping("/admin/card/page")
@OperLog(operModule = "获取卡项列表",operType = OperType.QUERY,operDesc = "获取卡项列表")
public ResultBean<IPage<CardVo>> page(CardDto cardDto) {
cardDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
IPage<CardVo> pageInfo = cardService.selectCardPage(cardDto);
return ResultBean.success(pageInfo);
}
@ApiOperation(value = "-列表")
@ApiOperationSupport(order = 2)
@GetMapping("/admin/card/list")
public ResultBean<List<CardVo>> list(CardDto cardDto) {
cardDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
List<CardVo> list = cardService.selectCardList(cardDto);
return ResultBean.success(list);
}
@ApiOperation(value = "-添加")
@ApiOperationSupport(order = 3)
@PostMapping("/admin/card/add")
@OperLog(operModule = "添加卡项",operType = OperType.ADD,operDesc = "添加卡项")
public ResultBean<Card> add(@RequestBody @Validated CardDto cardDto) {
Card card = BeanUtil.copyProperties(cardDto, Card.class);
cardService.save(card);
return ResultBean.success(card);
}
@ApiOperation(value = "-查询")
@ApiOperationSupport(order = 4)
@GetMapping("/admin/card/{cardId}")
public ResultBean<CardVo> get(@PathVariable @NotBlank String cardId) {
Card card = cardService.getById(cardId);
CardVo cardVo = BeanUtil.copyProperties(card,CardVo.class);
return ResultBean.success(cardVo);
}
@ApiOperation(value = "-修改")
@ApiOperationSupport(order = 5)
@PostMapping("/admin/card/update")
public ResultBean<Card> update(@RequestBody @Validated(UpdateGroup.class) CardDto cardDto) {
Card card = BeanUtil.copyProperties(cardDto, Card.class);
cardService.updateById(card);
return ResultBean.success(card);
}
@ApiOperation(value = "-删除")
@ApiOperationSupport(order = 6)
@GetMapping("/admin/card/delete/{cardId}")
public ResultBean<Card> delete(@PathVariable @NotBlank String cardId) {
Boolean b = cardService.removeById(cardId);
return ResultBean.success(b);
}
}

View File

@@ -0,0 +1,94 @@
package com.dd.admin.business.card.domain;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import com.dd.admin.common.model.UpdateGroup;
/**
* <p>
* 返回对象
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-17
*/
@Data
@ApiModel(value="接收对象")
public class CardDto {
@ApiModelProperty(value = "会员卡id")
@NotBlank(message = "id不能为空",groups = UpdateGroup.class)
private String cardId;
@ApiModelProperty(value = "会员卡名")
private String cardName;
@ApiModelProperty(value = "卡编号")
private BigDecimal cardNo;
@ApiModelProperty(value = "预设开卡金")
private BigDecimal cardAmount;
@ApiModelProperty(value = "预设赠送金")
private BigDecimal giveAmount;
@ApiModelProperty(value = "最低开卡金额")
private BigDecimal buildCardAmount;
@ApiModelProperty(value = "卡折扣")
private BigDecimal cardDiscount;
@ApiModelProperty(value = "卡提成")
private BigDecimal cardPushPercent;
@ApiModelProperty(value = "工本费用")
private String todos;
@ApiModelProperty(value = "0正常 1下架")
private Integer cardStatus;
@ApiModelProperty(value = "0正常 1删除")
private Integer deleted;
@ApiModelProperty(value = "门店id")
private String shopId;
@ApiModelProperty(value = "门店名")
private String shopName;
@ApiModelProperty(value = "创建人")
private String createName;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人id")
private String createId;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "修改人")
private String updateName;
@ApiModelProperty(value = "修改人id")
private String updateId;
@ApiModelProperty(value = "搜索关键字")
private String keyword;
}

View File

@@ -0,0 +1,89 @@
package com.dd.admin.business.card.domain;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 返回对象
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-17
*/
@Data
@ApiModel(value="返回对象")
public class CardVo {
@ApiModelProperty(value = "会员卡id")
private String cardId;
@ApiModelProperty(value = "会员卡名")
private String cardName;
@ApiModelProperty(value = "卡编号")
private String cardNo;
@ApiModelProperty(value = "预设开卡金")
private BigDecimal cardAmount;
@ApiModelProperty(value = "预设赠送金")
private BigDecimal giveAmount;
@ApiModelProperty(value = "最低开卡金额")
private BigDecimal buildCardAmount;
@ApiModelProperty(value = "卡折扣")
private BigDecimal cardDiscount;
@ApiModelProperty(value = "卡提成")
private BigDecimal cardPushPercent;
@ApiModelProperty(value = "工本费用")
private BigDecimal todos;
@ApiModelProperty(value = "0正常 1下架")
private Integer cardStatus;
@ApiModelProperty(value = "0正常 1删除")
private Integer deleted;
@ApiModelProperty(value = "门店id")
private String shopId;
@ApiModelProperty(value = "门店名")
private String shopName;
@ApiModelProperty(value = "创建人")
private String createName;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人id")
private String createId;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "修改人")
private String updateName;
@ApiModelProperty(value = "修改人id")
private String updateId;
}

View File

@@ -0,0 +1,112 @@
package com.dd.admin.business.card.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("business_card")
@ApiModel(value="Card对象", description="")
public class Card implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "会员卡id")
@TableId(value = "CARD_ID", type = IdType.ASSIGN_UUID)
private String cardId;
@ApiModelProperty(value = "会员卡名")
@TableField("CARD_NAME")
private String cardName;
@ApiModelProperty(value = "卡编号")
@TableField("CARD_NO")
private String cardNo;
@ApiModelProperty(value = "预设开卡金")
@TableField("CARD_AMOUNT")
private BigDecimal cardAmount;
@ApiModelProperty(value = "预设赠送金")
@TableField("GIVE_AMOUNT")
private BigDecimal giveAmount;
@ApiModelProperty(value = "最低开卡金额")
@TableField("BUILD_CARD_AMOUNT")
private BigDecimal buildCardAmount;
@ApiModelProperty(value = "卡折扣")
@TableField("CARD_DISCOUNT")
private BigDecimal cardDiscount;
@ApiModelProperty(value = "卡提成")
@TableField("CARD_PUSH_PERCENT")
private BigDecimal cardPushPercent;
@ApiModelProperty(value = "工本费用")
@TableField("TODOS")
private BigDecimal todos;
@ApiModelProperty(value = "0正常 1下架")
@TableField("CARD_STATUS")
private Integer cardStatus;
@ApiModelProperty(value = "0正常 1删除")
@TableField("DELETED")
@TableLogic
private Integer deleted;
@ApiModelProperty(value = "门店id")
@TableField(value = "SHOP_ID", fill = FieldFill.INSERT)
private String shopId;
@ApiModelProperty(value = "门店名")
@TableField(value = "SHOP_NAME", fill = FieldFill.INSERT)
private String shopName;
@ApiModelProperty(value = "创建人")
@TableField(value = "CREATE_NAME", fill = FieldFill.INSERT)
private String createName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "创建人id")
@TableField(value = "CREATE_ID", fill = FieldFill.INSERT)
private String createId;
@ApiModelProperty(value = "修改时间")
@TableField(value = "UPDATE_TIME", fill = FieldFill.UPDATE)
private Date updateTime;
@ApiModelProperty(value = "修改人")
@TableField(value = "UPDATE_NAME", fill = FieldFill.UPDATE)
private String updateName;
@ApiModelProperty(value = "修改人id")
@TableField(value = "UPDATE_ID", fill = FieldFill.UPDATE)
private String updateId;
}

View File

@@ -0,0 +1,28 @@
package com.dd.admin.business.card.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.admin.business.card.entity.Card;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dd.admin.business.card.domain.CardVo;
import com.dd.admin.business.card.domain.CardDto;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-17
*/
@Mapper
public interface CardMapper extends BaseMapper<Card> {
IPage<CardVo> selectCardPage(Page<CardVo> page, @Param("cardDto") CardDto cardDto);
List<CardVo> selectCardList(@Param("cardDto") CardDto cardDto);
}

View File

@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dd.admin.business.card.mapper.CardMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.dd.admin.business.card.entity.Card">
<id column="CARD_ID" property="cardId" />
<result column="CARD_NAME" property="cardName" />
<result column="CARD_NO" property="cardNo" />
<result column="CARD_AMOUNT" property="cardAmount" />
<result column="GIVE_AMOUNT" property="giveAmount" />
<result column="BUILD_CARD_AMOUNT" property="buildCardAmount" />
<result column="CARD_DISCOUNT" property="cardDiscount" />
<result column="CARD_PUSH_PERCENT" property="cardPushPercent" />
<result column="TODOS" property="todos" />
<result column="CARD_STATUS" property="cardStatus" />
<result column="DELETED" property="deleted" />
<result column="SHOP_ID" property="shopId" />
<result column="SHOP_NAME" property="shopName" />
<result column="CREATE_NAME" property="createName" />
<result column="CREATE_TIME" property="createTime" />
<result column="CREATE_ID" property="createId" />
<result column="UPDATE_TIME" property="updateTime" />
<result column="UPDATE_NAME" property="updateName" />
<result column="UPDATE_ID" property="updateId" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
CARD_ID, CARD_NAME, CARD_NO, CARD_AMOUNT, GIVE_AMOUNT, BUILD_CARD_AMOUNT, CARD_DISCOUNT, CARD_PUSH_PERCENT, TODOS, CARD_STATUS, DELETED, SHOP_ID, SHOP_NAME, CREATE_NAME, CREATE_TIME, CREATE_ID, UPDATE_TIME, UPDATE_NAME, UPDATE_ID
</sql>
<select id="selectCardPage" resultType="com.dd.admin.business.card.domain.CardVo">
select
*
from business_card where DELETED = 0
<if test="cardDto.shopId != null and cardDto.shopId != ''">
and shop_id = #{cardDto.shopId}
</if>
<if test="cardDto.keyword != null and cardDto.keyword != ''">
and CARD_NAME like CONCAT('%', #{cardDto.keyword}, '%')
</if>
order by create_time desc
</select>
<select id="selectCardList" resultType="com.dd.admin.business.card.domain.CardVo">
select
*
from business_card where DELETED = 0
<if test="cardDto.shopId != null and cardDto.shopId != ''">
and shop_id = #{cardDto.shopId}
</if>
order by create_time desc
</select>
</mapper>

View File

@@ -0,0 +1,26 @@
package com.dd.admin.business.card.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dd.admin.business.card.entity.Card;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dd.admin.business.card.domain.CardVo;
import com.dd.admin.business.card.domain.CardDto;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-17
*/
public interface CardService extends IService<Card> {
//-分页列表
IPage<CardVo> selectCardPage(CardDto cardDto);
//-列表
List<CardVo> selectCardList(CardDto cardDto);
}

View File

@@ -0,0 +1,36 @@
package com.dd.admin.business.card.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.admin.common.model.PageFactory;
import com.dd.admin.business.card.entity.Card;
import com.dd.admin.business.card.mapper.CardMapper;
import com.dd.admin.business.card.service.CardService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import com.dd.admin.business.card.domain.CardVo;
import com.dd.admin.business.card.domain.CardDto;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-17
*/
@Service
public class CardServiceImpl extends ServiceImpl<CardMapper, Card> implements CardService {
@Override
public IPage<CardVo> selectCardPage(CardDto cardDto) {
Page page = PageFactory.defaultPage();
return baseMapper.selectCardPage(page,cardDto);
}
@Override
public List<CardVo> selectCardList(CardDto cardDto) {
return baseMapper.selectCardList(cardDto);
}
}

View File

@@ -0,0 +1,95 @@
package com.dd.admin.business.category.controller;
import cn.hutool.core.bean.BeanUtil;
import com.dd.admin.common.aop.operationLog.aop.OperLog;
import com.dd.admin.common.aop.operationLog.aop.OperType;
import com.dd.admin.common.security.SecurityUtil;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.dd.admin.common.model.UpdateGroup;
import com.dd.admin.common.model.result.ResultBean;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotBlank;
import com.dd.admin.business.category.entity.Category;
import com.dd.admin.business.category.domain.CategoryVo;
import com.dd.admin.business.category.domain.CategoryDto;
import com.dd.admin.business.category.service.CategoryService;
import java.util.List;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 分类 前端控制器
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-22
*/
@Api(tags = "分类")
@RestController
public class CategoryController {
@Autowired
CategoryService categoryService;
@ApiOperation(value = "分类-分页列表")
@ApiOperationSupport(order = 1)
@GetMapping("/admin/category/page")
@OperLog(operModule = "获取分页列表",operType = OperType.QUERY,operDesc = "获取分页列表")
public ResultBean<IPage<CategoryVo>> page(CategoryDto categoryDto) {
categoryDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
IPage<CategoryVo> pageInfo = categoryService.selectCategoryPage(categoryDto);
return ResultBean.success(pageInfo);
}
@ApiOperation(value = "分类-列表")
@ApiOperationSupport(order = 2)
@GetMapping("/admin/category/list")
public ResultBean<List<CategoryVo>> list(CategoryDto categoryDto) {
categoryDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
List<CategoryVo> list = categoryService.selectCategoryList(categoryDto);
return ResultBean.success(list);
}
@ApiOperation(value = "分类-添加")
@ApiOperationSupport(order = 3)
@PostMapping("/admin/category/add")
@OperLog(operModule = "添加分类",operType = OperType.ADD,operDesc = "添加分类")
public ResultBean<Category> add(@RequestBody @Validated CategoryDto categoryDto) {
Category category = BeanUtil.copyProperties(categoryDto, Category.class);
categoryService.save(category);
return ResultBean.success(category);
}
@ApiOperation(value = "分类-查询")
@ApiOperationSupport(order = 4)
@GetMapping("/admin/category/{categoryId}")
public ResultBean<CategoryVo> get(@PathVariable @NotBlank String categoryId) {
Category category = categoryService.getById(categoryId);
CategoryVo categoryVo = BeanUtil.copyProperties(category,CategoryVo.class);
return ResultBean.success(categoryVo);
}
@ApiOperation(value = "分类-修改")
@ApiOperationSupport(order = 5)
@PostMapping("/admin/category/update")
public ResultBean<Category> update(@RequestBody @Validated(UpdateGroup.class) CategoryDto categoryDto) {
Category category = BeanUtil.copyProperties(categoryDto, Category.class);
categoryService.updateById(category);
return ResultBean.success(category);
}
@ApiOperation(value = "分类-删除")
@ApiOperationSupport(order = 6)
@GetMapping("/admin/category/delete/{categoryId}")
public ResultBean<Category> delete(@PathVariable @NotBlank String categoryId) {
Boolean b = categoryService.removeById(categoryId);
return ResultBean.success(b);
}
}

View File

@@ -0,0 +1,68 @@
package com.dd.admin.business.category.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import com.dd.admin.common.model.UpdateGroup;
/**
* <p>
* 分类返回对象
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-22
*/
@Data
@ApiModel(value="分类接收对象")
public class CategoryDto {
@ApiModelProperty(value = "分类id")
@NotBlank(message = "分类id不能为空",groups = UpdateGroup.class)
private String categoryId;
@ApiModelProperty(value = "分类名")
private String categoryName;
@ApiModelProperty(value = "0正常 1禁用")
private Integer categoryStatus;
@ApiModelProperty(value = "门店id")
private String shopId;
@ApiModelProperty(value = "门店名")
private String shopName;
@ApiModelProperty(value = "创建人")
private String createName;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人id")
private String createId;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "修改人")
private String updateName;
@ApiModelProperty(value = "修改人id")
private String updateId;
@ApiModelProperty(value = "搜索关键字")
private String keyword;
}

View File

@@ -0,0 +1,63 @@
package com.dd.admin.business.category.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 分类返回对象
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-22
*/
@Data
@ApiModel(value="分类返回对象")
public class CategoryVo {
@ApiModelProperty(value = "分类id")
private String categoryId;
@ApiModelProperty(value = "分类名")
private String categoryName;
@ApiModelProperty(value = "0正常 1禁用")
private Integer categoryStatus;
@ApiModelProperty(value = "门店id")
private String shopId;
@ApiModelProperty(value = "门店名")
private String shopName;
@ApiModelProperty(value = "创建人")
private String createName;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人id")
private String createId;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "修改人")
private String updateName;
@ApiModelProperty(value = "修改人id")
private String updateId;
}

View File

@@ -0,0 +1,77 @@
package com.dd.admin.business.category.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 分类
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-22
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("business_category")
@ApiModel(value="Category对象", description="分类")
public class Category implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "分类id")
@TableId(value = "CATEGORY_ID", type = IdType.ASSIGN_UUID)
private String categoryId;
@ApiModelProperty(value = "分类名")
@TableField("CATEGORY_NAME")
private String categoryName;
@ApiModelProperty(value = "0正常 1禁用")
@TableField("CATEGORY_STATUS")
private Integer categoryStatus;
@ApiModelProperty(value = "门店id")
@TableField(value = "SHOP_ID", fill = FieldFill.INSERT)
private String shopId;
@ApiModelProperty(value = "门店名")
@TableField(value = "SHOP_NAME", fill = FieldFill.INSERT)
private String shopName;
@ApiModelProperty(value = "创建人")
@TableField(value = "CREATE_NAME", fill = FieldFill.INSERT)
private String createName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "创建人id")
@TableField(value = "CREATE_ID", fill = FieldFill.INSERT)
private String createId;
@ApiModelProperty(value = "修改时间")
@TableField(value = "UPDATE_TIME", fill = FieldFill.UPDATE)
private Date updateTime;
@ApiModelProperty(value = "修改人")
@TableField(value = "UPDATE_NAME", fill = FieldFill.UPDATE)
private String updateName;
@ApiModelProperty(value = "修改人id")
@TableField(value = "UPDATE_ID", fill = FieldFill.UPDATE)
private String updateId;
}

View File

@@ -0,0 +1,28 @@
package com.dd.admin.business.category.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.admin.business.category.entity.Category;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dd.admin.business.category.domain.CategoryVo;
import com.dd.admin.business.category.domain.CategoryDto;
import java.util.List;
/**
* <p>
* 分类 Mapper 接口
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-22
*/
@Mapper
public interface CategoryMapper extends BaseMapper<Category> {
IPage<CategoryVo> selectCategoryPage(Page<CategoryVo> page, @Param("categoryDto") CategoryDto categoryDto);
List<CategoryVo> selectCategoryList(@Param("categoryDto") CategoryDto categoryDto);
}

View File

@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dd.admin.business.category.mapper.CategoryMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.dd.admin.business.category.entity.Category">
<id column="CATEGORY_ID" property="categoryId" />
<result column="CATEGORY_NAME" property="categoryName" />
<result column="CATEGORY_STATUS" property="categoryStatus" />
<result column="SHOP_ID" property="shopId" />
<result column="SHOP_NAME" property="shopName" />
<result column="CREATE_NAME" property="createName" />
<result column="CREATE_TIME" property="createTime" />
<result column="CREATE_ID" property="createId" />
<result column="UPDATE_TIME" property="updateTime" />
<result column="UPDATE_NAME" property="updateName" />
<result column="UPDATE_ID" property="updateId" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
CATEGORY_ID, CATEGORY_NAME, CATEGORY_STATUS, SHOP_ID, SHOP_NAME, CREATE_NAME, CREATE_TIME, CREATE_ID, UPDATE_TIME, UPDATE_NAME, UPDATE_ID
</sql>
<select id="selectCategoryPage" resultType="com.dd.admin.business.category.domain.CategoryVo">
select
*
from business_category where 1 = 1
<if test="categoryDto.keyword != null and categoryDto.keyword != ''">
and CATEGORY_NAME like CONCAT('%', #{categoryDto.keyword}, '%')
</if>
<if test="categoryDto.shopId != null and categoryDto.shopId != ''">
and shop_id = #{categoryDto.shopId}
</if>
<if test="categoryDto.categoryStatus != null ">
and CATEGORY_STATUS = #{categoryDto.categoryStatus}
</if>
order by create_time desc
</select>
<select id="selectCategoryList" resultType="com.dd.admin.business.category.domain.CategoryVo">
select
*
from business_category where 1 = 1
<if test="categoryDto.shopId != null and categoryDto.shopId != ''">
and shop_id = #{categoryDto.shopId}
</if>
<if test="categoryDto.categoryStatus != null ">
and CATEGORY_STATUS = #{categoryDto.categoryStatus}
</if>
order by create_time desc
</select>
</mapper>

View File

@@ -0,0 +1,26 @@
package com.dd.admin.business.category.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dd.admin.business.category.entity.Category;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dd.admin.business.category.domain.CategoryVo;
import com.dd.admin.business.category.domain.CategoryDto;
import java.util.List;
/**
* <p>
* 分类 服务类
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-22
*/
public interface CategoryService extends IService<Category> {
//分类-分页列表
IPage<CategoryVo> selectCategoryPage(CategoryDto categoryDto);
//分类-列表
List<CategoryVo> selectCategoryList(CategoryDto categoryDto);
}

View File

@@ -0,0 +1,36 @@
package com.dd.admin.business.category.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.admin.common.model.PageFactory;
import com.dd.admin.business.category.entity.Category;
import com.dd.admin.business.category.mapper.CategoryMapper;
import com.dd.admin.business.category.service.CategoryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import com.dd.admin.business.category.domain.CategoryVo;
import com.dd.admin.business.category.domain.CategoryDto;
import java.util.List;
/**
* <p>
* 分类 服务实现类
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-22
*/
@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {
@Override
public IPage<CategoryVo> selectCategoryPage(CategoryDto categoryDto) {
Page page = PageFactory.defaultPage();
return baseMapper.selectCategoryPage(page,categoryDto);
}
@Override
public List<CategoryVo> selectCategoryList(CategoryDto categoryDto) {
return baseMapper.selectCategoryList(categoryDto);
}
}

View File

@@ -0,0 +1,88 @@
package com.dd.admin.business.detailServer.controller;
import cn.hutool.core.bean.BeanUtil;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.dd.admin.common.model.UpdateGroup;
import com.dd.admin.common.model.result.ResultBean;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotBlank;
import com.dd.admin.business.detailServer.entity.SellDetailServer;
import com.dd.admin.business.detailServer.domain.SellDetailServerVo;
import com.dd.admin.business.detailServer.domain.SellDetailServerDto;
import com.dd.admin.business.detailServer.service.SellDetailServerService;
import java.util.List;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 订单详单服务人员 前端控制器
* </p>
*
* @author 727869402@qq.com
* @since 2024-11-28
*/
@Api(tags = "订单详单服务人员")
@RestController
public class SellDetailServerController {
@Autowired
SellDetailServerService detailServerService;
@ApiOperation(value = "订单详单服务人员-分页列表")
@ApiOperationSupport(order = 1)
@GetMapping("/admin/detailServer/page")
public ResultBean<IPage<SellDetailServerVo>> page(SellDetailServerDto detailServerDto) {
IPage<SellDetailServerVo> pageInfo = detailServerService.selectSellDetailServerPage(detailServerDto);
return ResultBean.success(pageInfo);
}
@ApiOperation(value = "订单详单服务人员-列表")
@ApiOperationSupport(order = 2)
@GetMapping("/admin/detailServer/list")
public ResultBean<List<SellDetailServerVo>> list(SellDetailServerDto detailServerDto) {
List<SellDetailServerVo> list = detailServerService.selectSellDetailServerList(detailServerDto);
return ResultBean.success(list);
}
@ApiOperation(value = "订单详单服务人员-添加")
@ApiOperationSupport(order = 3)
@PostMapping("/admin/detailServer/add")
public ResultBean<SellDetailServer> add(@RequestBody @Validated SellDetailServerDto detailServerDto) {
SellDetailServer detailServer = BeanUtil.copyProperties(detailServerDto, SellDetailServer.class);
detailServerService.save(detailServer);
return ResultBean.success(detailServer);
}
@ApiOperation(value = "订单详单服务人员-查询")
@ApiOperationSupport(order = 4)
@GetMapping("/admin/detailServer/{detailServerId}")
public ResultBean<SellDetailServerVo> get(@PathVariable @NotBlank String detailServerId) {
SellDetailServer detailServer = detailServerService.getById(detailServerId);
SellDetailServerVo detailServerVo = BeanUtil.copyProperties(detailServer,SellDetailServerVo.class);
return ResultBean.success(detailServerVo);
}
@ApiOperation(value = "订单详单服务人员-修改")
@ApiOperationSupport(order = 5)
@PostMapping("/admin/detailServer/update")
public ResultBean<SellDetailServer> update(@RequestBody @Validated(UpdateGroup.class) SellDetailServerDto detailServerDto) {
SellDetailServer detailServer = BeanUtil.copyProperties(detailServerDto, SellDetailServer.class);
detailServerService.updateById(detailServer);
return ResultBean.success(detailServer);
}
@ApiOperation(value = "订单详单服务人员-删除")
@ApiOperationSupport(order = 6)
@GetMapping("/admin/detailServer/delete/{detailServerId}")
public ResultBean<SellDetailServer> delete(@PathVariable @NotBlank String detailServerId) {
Boolean b = detailServerService.removeById(detailServerId);
return ResultBean.success(b);
}
}

View File

@@ -0,0 +1,83 @@
package com.dd.admin.business.detailServer.domain;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import com.dd.admin.common.model.UpdateGroup;
/**
* <p>
* 订单详单服务人员返回对象
* </p>
*
* @author 727869402@qq.com
* @since 2024-11-28
*/
@Data
@ApiModel(value="订单详单服务人员接收对象")
public class SellDetailServerDto {
@ApiModelProperty(value = "详单对应服务人员记录id")
@NotBlank(message = "订单详单服务人员id不能为空",groups = UpdateGroup.class)
private String detailServerId;
@ApiModelProperty(value = "订单id")
private String sellId;
@ApiModelProperty(value = "详单id")
private String sellDetailId;
@ApiModelProperty(value = "服务人员")
private String serverId;
@ApiModelProperty(value = "服务人员")
private String serverName;
@ApiModelProperty(value = "提成")
private BigDecimal serverPushMoney;
@ApiModelProperty(value = "业绩")
private BigDecimal serverGrade;
@ApiModelProperty(value = "门店id")
private String shopId;
@ApiModelProperty(value = "门店名")
private String shopName;
@ApiModelProperty(value = "创建人")
private String createName;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人id")
private String createId;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "修改人")
private String updateName;
@ApiModelProperty(value = "修改人id")
private String updateId;
@ApiModelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,79 @@
package com.dd.admin.business.detailServer.domain;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 订单详单服务人员返回对象
* </p>
*
* @author 727869402@qq.com
* @since 2024-11-28
*/
@Data
@ApiModel(value="订单详单服务人员返回对象")
public class SellDetailServerVo {
@ApiModelProperty(value = "详单对应服务人员记录id")
private String detailServerId;
@ApiModelProperty(value = "订单id")
private String sellId;
@ApiModelProperty(value = "详单id")
private String sellDetailId;
@ApiModelProperty(value = "服务人员")
private String serverId;
@ApiModelProperty(value = "服务人员")
private String serverName;
@ApiModelProperty(value = "提成")
private BigDecimal serverPushMoney;
@ApiModelProperty(value = "业绩")
private BigDecimal serverGrade;
@ApiModelProperty(value = "门店id")
private String shopId;
@ApiModelProperty(value = "门店名")
private String shopName;
@ApiModelProperty(value = "创建人")
private String createName;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人id")
private String createId;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "修改人")
private String updateName;
@ApiModelProperty(value = "修改人id")
private String updateId;
@ApiModelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,98 @@
package com.dd.admin.business.detailServer.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 订单详单服务人员
* </p>
*
* @author 727869402@qq.com
* @since 2024-11-28
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("business_sell_detail_server")
@ApiModel(value="SellDetailServer对象", description="订单详单服务人员")
public class SellDetailServer implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "详单对应服务人员记录id")
@TableId(value = "DETAIL_SERVER_ID", type = IdType.ASSIGN_UUID)
private String detailServerId;
@ApiModelProperty(value = "订单id")
@TableField("SELL_ID")
private String sellId;
@ApiModelProperty(value = "详单id")
@TableField("SELL_DETAIL_ID")
private String sellDetailId;
@ApiModelProperty(value = "服务人员")
@TableField("SERVER_ID")
private String serverId;
@ApiModelProperty(value = "服务人员")
@TableField("SERVER_NAME")
private String serverName;
@ApiModelProperty(value = "提成")
@TableField("SERVER_PUSH_MONEY")
private BigDecimal serverPushMoney;
@ApiModelProperty(value = "业绩")
@TableField("SERVER_GRADE")
private BigDecimal serverGrade;
@ApiModelProperty(value = "门店id")
@TableField(value = "SHOP_ID", fill = FieldFill.INSERT)
private String shopId;
@ApiModelProperty(value = "门店名")
@TableField(value = "SHOP_NAME", fill = FieldFill.INSERT)
private String shopName;
@ApiModelProperty(value = "创建人")
@TableField(value = "CREATE_NAME", fill = FieldFill.INSERT)
private String createName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "创建人id")
@TableField(value = "CREATE_ID", fill = FieldFill.INSERT)
private String createId;
@ApiModelProperty(value = "修改时间")
@TableField(value = "UPDATE_TIME", fill = FieldFill.UPDATE)
private Date updateTime;
@ApiModelProperty(value = "修改人")
@TableField(value = "UPDATE_NAME", fill = FieldFill.UPDATE)
private String updateName;
@ApiModelProperty(value = "修改人id")
@TableField(value = "UPDATE_ID", fill = FieldFill.UPDATE)
private String updateId;
@ApiModelProperty(value = "备注")
@TableField("REMARK")
private String remark;
}

View File

@@ -0,0 +1,28 @@
package com.dd.admin.business.detailServer.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.admin.business.detailServer.entity.SellDetailServer;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dd.admin.business.detailServer.domain.SellDetailServerVo;
import com.dd.admin.business.detailServer.domain.SellDetailServerDto;
import java.util.List;
/**
* <p>
* 订单详单服务人员 Mapper 接口
* </p>
*
* @author 727869402@qq.com
* @since 2024-11-28
*/
@Mapper
public interface SellDetailServerMapper extends BaseMapper<SellDetailServer> {
IPage<SellDetailServerVo> selectSellDetailServerPage(Page<SellDetailServerVo> page, @Param("detailServerDto") SellDetailServerDto detailServerDto);
List<SellDetailServerVo> selectSellDetailServerList(@Param("detailServerDto") SellDetailServerDto detailServerDto);
}

View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dd.admin.business.detailServer.mapper.SellDetailServerMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.dd.admin.business.detailServer.entity.SellDetailServer">
<id column="DETAIL_SERVER_ID" property="detailServerId" />
<result column="SELL_ID" property="sellId" />
<result column="SELL_DETAIL_ID" property="sellDetailId" />
<result column="SERVER_ID" property="serverId" />
<result column="SERVER_NAME" property="serverName" />
<result column="SERVER_PUSH_MONEY" property="serverPushMoney" />
<result column="SERVER_GRADE" property="serverGrade" />
<result column="SHOP_ID" property="shopId" />
<result column="SHOP_NAME" property="shopName" />
<result column="CREATE_NAME" property="createName" />
<result column="CREATE_TIME" property="createTime" />
<result column="CREATE_ID" property="createId" />
<result column="UPDATE_TIME" property="updateTime" />
<result column="UPDATE_NAME" property="updateName" />
<result column="UPDATE_ID" property="updateId" />
<result column="REMARK" property="remark" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
DETAIL_SERVER_ID, SELL_ID, SELL_DETAIL_ID, SERVER_ID, SERVER_NAME, SERVER_PUSH_MONEY, SERVER_GRADE, SHOP_ID, SHOP_NAME, CREATE_NAME, CREATE_TIME, CREATE_ID, UPDATE_TIME, UPDATE_NAME, UPDATE_ID, REMARK
</sql>
<select id="selectSellDetailServerPage" resultType="com.dd.admin.business.detailServer.domain.SellDetailServerVo">
select
*
from business_sell_detail_server where 1 = 1
</select>
<select id="selectSellDetailServerList" resultType="com.dd.admin.business.detailServer.domain.SellDetailServerVo">
select
*
from business_sell_detail_server where 1 = 1
</select>
</mapper>

View File

@@ -0,0 +1,31 @@
package com.dd.admin.business.detailServer.service;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dd.admin.business.detailServer.entity.SellDetailServer;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dd.admin.business.detailServer.domain.SellDetailServerVo;
import com.dd.admin.business.detailServer.domain.SellDetailServerDto;
import com.dd.admin.business.sellDetail.entity.SellDetail;
import java.util.List;
/**
* <p>
* 订单详单服务人员 服务类
* </p>
*
* @author 727869402@qq.com
* @since 2024-11-28
*/
public interface SellDetailServerService extends IService<SellDetailServer> {
//订单详单服务人员-分页列表
IPage<SellDetailServerVo> selectSellDetailServerPage(SellDetailServerDto detailServerDto);
//订单详单服务人员-列表
List<SellDetailServerVo> selectSellDetailServerList(SellDetailServerDto detailServerDto);
List<SellDetailServer> selectSellDetailServerListBySellDetailIds(List<String> sellDetailIds);
}

View File

@@ -0,0 +1,49 @@
package com.dd.admin.business.detailServer.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.admin.business.sellDetail.entity.SellDetail;
import com.dd.admin.common.model.PageFactory;
import com.dd.admin.business.detailServer.entity.SellDetailServer;
import com.dd.admin.business.detailServer.mapper.SellDetailServerMapper;
import com.dd.admin.business.detailServer.service.SellDetailServerService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import com.dd.admin.business.detailServer.domain.SellDetailServerVo;
import com.dd.admin.business.detailServer.domain.SellDetailServerDto;
import java.util.List;
/**
* <p>
* 订单详单服务人员 服务实现类
* </p>
*
* @author 727869402@qq.com
* @since 2024-11-28
*/
@Service
public class SellDetailServerServiceImpl extends ServiceImpl<SellDetailServerMapper, SellDetailServer> implements SellDetailServerService {
@Override
public IPage<SellDetailServerVo> selectSellDetailServerPage(SellDetailServerDto detailServerDto) {
Page page = PageFactory.defaultPage();
return baseMapper.selectSellDetailServerPage(page,detailServerDto);
}
@Override
public List<SellDetailServerVo> selectSellDetailServerList(SellDetailServerDto detailServerDto) {
return baseMapper.selectSellDetailServerList(detailServerDto);
}
@Override
public List<SellDetailServer> selectSellDetailServerListBySellDetailIds(List<String> sellDetailIds) {
LambdaQueryWrapper<SellDetailServer> selldetailQueryWrapper = new LambdaQueryWrapper<>();
if(CollectionUtil.isNotEmpty(sellDetailIds)){
selldetailQueryWrapper.in(SellDetailServer::getSellDetailId, sellDetailIds);
}
List<SellDetailServer> sellDetailList = this.list(selldetailQueryWrapper);
return sellDetailList;
}
}

View File

@@ -0,0 +1,104 @@
package com.dd.admin.business.file.controller;
import cn.hutool.core.bean.BeanUtil;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.dd.admin.common.model.UpdateGroup;
import com.dd.admin.common.model.result.ResultBean;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotBlank;
import com.dd.admin.business.file.entity.File;
import com.dd.admin.business.file.domain.FileVo;
import com.dd.admin.business.file.domain.FileDto;
import com.dd.admin.business.file.service.FileService;
import java.util.HashMap;
import java.util.List;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
/**
* <p>
* 文件 前端控制器
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-23
*/
@Api(tags = "文件")
@RestController
public class FileController {
@Autowired
FileService fileService;
@ApiOperation(value = "文件-分页列表")
@ApiOperationSupport(order = 1)
@GetMapping("/admin/file/page")
public ResultBean<IPage<FileVo>> page(FileDto fileDto) {
IPage<FileVo> pageInfo = fileService.selectFilePage(fileDto);
return ResultBean.success(pageInfo);
}
@ApiOperation(value = "文件-列表")
@ApiOperationSupport(order = 2)
@GetMapping("/admin/file/list")
public ResultBean<List<FileVo>> list(FileDto fileDto) {
List<FileVo> list = fileService.selectFileList(fileDto);
return ResultBean.success(list);
}
@ApiOperation(value = "文件-添加")
@ApiOperationSupport(order = 3)
@PostMapping("/admin/file/add")
public ResultBean<File> add(@RequestBody @Validated FileDto fileDto) {
File file = BeanUtil.copyProperties(fileDto, File.class);
fileService.save(file);
return ResultBean.success(file);
}
@ApiOperation(value = "文件-查询")
@ApiOperationSupport(order = 4)
@GetMapping("/admin/file/{fileId}")
public ResultBean<FileVo> get(@PathVariable @NotBlank String fileId) {
File file = fileService.getById(fileId);
FileVo fileVo = BeanUtil.copyProperties(file,FileVo.class);
return ResultBean.success(fileVo);
}
@ApiOperation(value = "文件-修改")
@ApiOperationSupport(order = 5)
@PostMapping("/admin/file/update")
public ResultBean<File> update(@RequestBody @Validated(UpdateGroup.class) FileDto fileDto) {
File file = BeanUtil.copyProperties(fileDto, File.class);
fileService.updateById(file);
return ResultBean.success(file);
}
@ApiOperation(value = "文件-删除")
@ApiOperationSupport(order = 6)
@GetMapping("/admin/file/delete/{fileId}")
public ResultBean<File> delete(@PathVariable @NotBlank String fileId) {
Boolean b = fileService.removeById(fileId);
return ResultBean.success(b);
}
@ApiOperation(value = "文件-上传")
@PostMapping("/upload")
@ResponseBody
public ResultBean layuiUpload(@RequestPart("file") MultipartFile file, String fileSavePath) {
FileVo uploadResult = fileService.uploadFile(file,fileSavePath);
String fileId = uploadResult.getFileId();
String filePath = uploadResult.getFileSavePath();
HashMap<String, Object> map = new HashMap<>();
map.put("fileId", fileId);
map.put("filePath",filePath);
return ResultBean.success(map);
}
}

View File

@@ -0,0 +1,67 @@
package com.dd.admin.business.file.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import com.dd.admin.common.model.UpdateGroup;
/**
* <p>
* 文件返回对象
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-23
*/
@Data
@ApiModel(value="文件接收对象")
public class FileDto {
@ApiModelProperty(value = "文件id")
@NotBlank(message = "文件id不能为空",groups = UpdateGroup.class)
private String fileId;
@ApiModelProperty(value = "上级id")
private String parentId;
@ApiModelProperty(value = "文件仓库oss仓库")
private String fileBucket;
@ApiModelProperty(value = "文件名称")
private String fileName;
@ApiModelProperty(value = "文件后缀")
private String fileSuffix;
@ApiModelProperty(value = "文件大小kb")
private Long fileSizeKb;
@ApiModelProperty(value = "文件唯一标识id")
private String finalName;
@ApiModelProperty(value = "存储路径")
private String filePath;
@ApiModelProperty(value = "0文件夹 1文件")
private Integer fileType;
@ApiModelProperty(value = "存放的系统路径")
private String fileSysPath;
@ApiModelProperty(value = "创建时间")
private Date createTime;
}

View File

@@ -0,0 +1,64 @@
package com.dd.admin.business.file.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 文件返回对象
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-23
*/
@Data
@ApiModel(value="文件返回对象")
public class FileVo {
@ApiModelProperty(value = "文件id")
private String fileId;
@ApiModelProperty(value = "上级id")
private String parentId;
@ApiModelProperty(value = "文件仓库oss仓库")
private String fileBucket;
@ApiModelProperty(value = "文件名称")
private String fileName;
@ApiModelProperty(value = "文件后缀")
private String fileSuffix;
@ApiModelProperty(value = "文件大小kb")
private Long fileSizeKb;
@ApiModelProperty(value = "文件唯一标识id")
private String finalName;
@ApiModelProperty(value = "存储路径")
private String filePath;
@ApiModelProperty(value = "0文件夹 1文件")
private Integer fileType;
@ApiModelProperty(value = "存放的系统路径")
private String fileSysPath;
@ApiModelProperty(value = "创建时间")
private Date createTime;
private String originalFilename;
private String fileSavePath;
}

View File

@@ -0,0 +1,77 @@
package com.dd.admin.business.file.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 文件
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-23
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("business_file")
@ApiModel(value="File对象", description="文件")
public class File implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "文件id")
@TableId(value = "FILE_ID", type = IdType.ASSIGN_UUID)
private String fileId;
@ApiModelProperty(value = "上级id")
@TableField("PARENT_ID")
private String parentId;
@ApiModelProperty(value = "文件仓库oss仓库")
@TableField("FILE_BUCKET")
private String fileBucket;
@ApiModelProperty(value = "文件名称")
@TableField("FILE_NAME")
private String fileName;
@ApiModelProperty(value = "文件后缀")
@TableField("FILE_SUFFIX")
private String fileSuffix;
@ApiModelProperty(value = "文件大小kb")
@TableField("FILE_SIZE_KB")
private Long fileSizeKb;
@ApiModelProperty(value = "文件唯一标识id")
@TableField("FINAL_NAME")
private String finalName;
@ApiModelProperty(value = "存储路径")
@TableField("FILE_PATH")
private String filePath;
@ApiModelProperty(value = "0文件夹 1文件")
@TableField("FILE_TYPE")
private Integer fileType;
@ApiModelProperty(value = "存放的系统路径")
@TableField("FILE_SYS_PATH")
private String fileSysPath;
@ApiModelProperty(value = "创建时间")
@TableField(value = "CREATE_TIME")
private Date createTime;
}

View File

@@ -0,0 +1,28 @@
package com.dd.admin.business.file.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.admin.business.file.entity.File;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dd.admin.business.file.domain.FileVo;
import com.dd.admin.business.file.domain.FileDto;
import java.util.List;
/**
* <p>
* 文件 Mapper 接口
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-23
*/
@Mapper
public interface FileMapper extends BaseMapper<File> {
IPage<FileVo> selectFilePage(Page<FileVo> page, @Param("fileDto") FileDto fileDto);
List<FileVo> selectFileList(@Param("fileDto") FileDto fileDto);
}

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dd.admin.business.file.mapper.FileMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.dd.admin.business.file.entity.File">
<id column="FILE_ID" property="fileId" />
<result column="PARENT_ID" property="parentId" />
<result column="FILE_BUCKET" property="fileBucket" />
<result column="FILE_NAME" property="fileName" />
<result column="FILE_SUFFIX" property="fileSuffix" />
<result column="FILE_SIZE_KB" property="fileSizeKb" />
<result column="FINAL_NAME" property="finalName" />
<result column="FILE_PATH" property="filePath" />
<result column="FILE_TYPE" property="fileType" />
<result column="FILE_SYS_PATH" property="fileSysPath" />
<result column="CREATE_TIME" property="createTime" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
FILE_ID, PARENT_ID, FILE_BUCKET, FILE_NAME, FILE_SUFFIX, FILE_SIZE_KB, FINAL_NAME, FILE_PATH, FILE_TYPE, FILE_SYS_PATH, CREATE_TIME
</sql>
<select id="selectFilePage" resultType="com.dd.admin.business.file.domain.FileVo">
select
*
from business_file where 1 = 1
</select>
<select id="selectFileList" resultType="com.dd.admin.business.file.domain.FileVo">
select
*
from business_file where 1 = 1
</select>
</mapper>

View File

@@ -0,0 +1,33 @@
package com.dd.admin.business.file.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dd.admin.business.file.entity.File;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dd.admin.business.file.domain.FileVo;
import com.dd.admin.business.file.domain.FileDto;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* <p>
* 文件 服务类
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-23
*/
public interface FileService extends IService<File> {
//文件-分页列表
IPage<FileVo> selectFilePage(FileDto fileDto);
//文件-列表
List<FileVo> selectFileList(FileDto fileDto);
//文件-上传
public FileVo uploadFile(MultipartFile file, String fileSavePath);
//传入文件id获取文件真实地址
public String getFileAuthUrl(String fileId);
}

View File

@@ -0,0 +1,139 @@
package com.dd.admin.business.file.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.admin.common.exception.ApiException;
import com.dd.admin.common.model.PageFactory;
import com.dd.admin.business.file.entity.File;
import com.dd.admin.business.file.mapper.FileMapper;
import com.dd.admin.business.file.service.FileService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dd.admin.common.utils.ToolUtil;
import org.apache.tomcat.jni.FileInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.dd.admin.business.file.domain.FileVo;
import com.dd.admin.business.file.domain.FileDto;
import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.util.List;
/**
* <p>
* 文件 服务实现类
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-23
*/
@Service
public class FileServiceImpl extends ServiceImpl<FileMapper, File> implements FileService {
@Value("${dd.uploadPath}")
private String uploadPath;
@Override
public IPage<FileVo> selectFilePage(FileDto fileDto) {
Page page = PageFactory.defaultPage();
return baseMapper.selectFilePage(page,fileDto);
}
@Override
public List<FileVo> selectFileList(FileDto fileDto) {
return baseMapper.selectFileList(fileDto);
}
public String getSysUploadPath(){
java.io.File filepath = new java.io.File(uploadPath);
//该目录不存在 则创建
if (!filepath.exists()) {
boolean mkdirs = filepath.mkdirs();
}
return uploadPath;
}
@Override
public FileVo uploadFile(MultipartFile file, String fileSavePath) {
//需要返回的对象
FileVo fileVo = new FileVo();
//生成文件的唯一id
String fileId = IdWorker.get32UUID();
fileVo.setFileId(fileId);
//获取文件后缀
String fileSuffix = ToolUtil.getFileSuffix(file.getOriginalFilename());
fileVo.setFileSuffix(fileSuffix);
//获取文件原始名称
String originalFilename = file.getOriginalFilename();
fileVo.setOriginalFilename(originalFilename);
//生成文件的最终名称
String finalName = fileId + "." + ToolUtil.getFileSuffix(originalFilename);
fileVo.setFinalName(finalName);
fileVo.setFileSavePath(fileSavePath + finalName);
String sysUploadPath = getSysUploadPath();
String newFileSavePath = "";
//判断有没有结尾符,没有得加上
if (!fileSavePath.endsWith(java.io.File.separator)) {
newFileSavePath = fileSavePath + java.io.File.separator;
}
try {
java.io.File filepath = new java.io.File(sysUploadPath + newFileSavePath );
//该目录不存在 则创建
if (!filepath.exists()) {
boolean mkdirs = filepath.mkdirs();
}
System.out.println(filepath.getAbsolutePath());
System.out.println(filepath.getPath());
//保存文件到指定目录
java.io.File newFile = new java.io.File(sysUploadPath + newFileSavePath + finalName);
file.transferTo(newFile);
File fileInfo = new File();
//保存文件信息
fileInfo.setFileId(fileId);
fileInfo.setFileName(originalFilename);
fileInfo.setFileSuffix(fileSuffix);
fileInfo.setFilePath("/upload/" + fileSavePath + "/" + finalName);
fileVo.setFileSavePath(fileInfo.getFilePath());
fileInfo.setFinalName(finalName);
//计算文件大小kb
long kb = new BigDecimal(file.getSize())
.divide(BigDecimal.valueOf(1024))
.setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
fileInfo.setFileSizeKb(kb);
fileInfo.setFileSysPath(newFile.getAbsolutePath());
save(fileInfo);
} catch (Exception e) {
log.error("上传文件错误!", e);
throw new ApiException("上传文件错误!");
}
return fileVo;
}
@Override
public String getFileAuthUrl(String fileId) {
File file = getById(fileId);
if(file!=null){
return file.getFilePath();
}
return "";
}
}

View File

@@ -0,0 +1,118 @@
package com.dd.admin.business.member.controller;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dd.admin.common.aop.operationLog.aop.OperLog;
import com.dd.admin.common.aop.operationLog.aop.OperType;
import com.dd.admin.common.exception.ApiException;
import com.dd.admin.common.security.SecurityUtil;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.dd.admin.common.model.UpdateGroup;
import com.dd.admin.common.model.result.ResultBean;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotBlank;
import com.dd.admin.business.member.entity.Member;
import com.dd.admin.business.member.domain.MemberVo;
import com.dd.admin.business.member.domain.MemberDto;
import com.dd.admin.business.member.service.MemberService;
import java.util.List;
import org.springframework.web.bind.annotation.RestController;
import static com.dd.admin.business.pay.enmus.CashierExceptionEnum.MEMBER_ALREADY_BUILD;
/**
* <p>
* 会员 前端控制器
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-21
*/
@Api(tags = "会员")
@RestController
public class MemberController {
@Autowired
MemberService memberService;
@ApiOperation(value = "会员-分页列表")
@ApiOperationSupport(order = 1)
@GetMapping("/admin/member/page")
public ResultBean<IPage<MemberVo>> page(MemberDto memberDto) {
memberDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
IPage<MemberVo> pageInfo = memberService.selectMemberPage(memberDto);
return ResultBean.success(pageInfo);
}
@ApiOperation(value = "会员-列表")
@ApiOperationSupport(order = 2)
@GetMapping("/admin/member/list")
public ResultBean<List<MemberVo>> list(MemberDto memberDto) {
memberDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
List<MemberVo> list = memberService.selectMemberList(memberDto);
return ResultBean.success(list);
}
@ApiOperation(value = "会员-列表")
@ApiOperationSupport(order = 2)
@GetMapping("/admin/member/searchList")
@OperLog(operModule = "会员查询",operType = OperType.QUERY,operDesc = "会员查询")
public ResultBean<List<MemberVo>> searchList(MemberDto memberDto) {
memberDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
memberDto.setLimit(10);
List<MemberVo> list = memberService.selectMemberList(memberDto);
return ResultBean.success(list);
}
@ApiOperation(value = "会员-添加")
@ApiOperationSupport(order = 3)
@PostMapping("/admin/member/add")
@OperLog(operModule = "添加会员",operType = OperType.ADD,operDesc = "添加会员")
public ResultBean<Member> add(@RequestBody @Validated MemberDto memberDto) {
// 先根据手机号查询是否已存在会员
LambdaQueryWrapper<Member> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Member::getMemberPhone, memberDto.getMemberPhone());
Member existingMembers = memberService.getOne(queryWrapper);
if (existingMembers != null) {
// 如果存在,则返回错误信息,表示手机号已被注册
throw new ApiException(MEMBER_ALREADY_BUILD);
}
Member member = BeanUtil.copyProperties(memberDto, Member.class);
memberService.save(member);
return ResultBean.success(member);
}
@ApiOperation(value = "会员-查询")
@ApiOperationSupport(order = 4)
@GetMapping("/admin/member/{memberId}")
public ResultBean<MemberVo> get(@PathVariable @NotBlank String memberId) {
Member member = memberService.getById(memberId);
MemberVo memberVo = BeanUtil.copyProperties(member,MemberVo.class);
return ResultBean.success(memberVo);
}
@ApiOperation(value = "会员-修改")
@ApiOperationSupport(order = 5)
@PostMapping("/admin/member/update")
public ResultBean<Member> update(@RequestBody @Validated(UpdateGroup.class) MemberDto memberDto) {
Member member = BeanUtil.copyProperties(memberDto, Member.class);
memberService.updateById(member);
return ResultBean.success(member);
}
@ApiOperation(value = "会员-删除")
@ApiOperationSupport(order = 6)
@GetMapping("/admin/member/delete/{memberId}")
public ResultBean<Member> delete(@PathVariable @NotBlank String memberId) {
Boolean b = memberService.removeById(memberId);
return ResultBean.success(b);
}
}

View File

@@ -0,0 +1,67 @@
package com.dd.admin.business.member.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import com.dd.admin.common.model.UpdateGroup;
/**
* <p>
* 会员返回对象
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-21
*/
@Data
@ApiModel(value="会员接收对象")
public class MemberDto {
@ApiModelProperty(value = "会员表id")
@NotBlank(message = "会员id不能为空",groups = UpdateGroup.class)
private String memberId;
@ApiModelProperty(value = "会员姓名")
private String memberName;
@ApiModelProperty(value = "手机号")
private String memberPhone;
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "消费密码")
private String payPassword;
@ApiModelProperty(value = "门店名")
private String shopName;
@ApiModelProperty(value = "门店id")
private String shopId;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "会员姓名")
private String querySearch;
@ApiModelProperty(value = "条数")
private Integer limit;
@ApiModelProperty(value = "搜索会员关键字")
private String keyword;
}

View File

@@ -0,0 +1,56 @@
package com.dd.admin.business.member.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 会员返回对象
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-21
*/
@Data
@ApiModel(value="会员返回对象")
public class MemberVo {
@ApiModelProperty(value = "会员表id")
private String memberId;
@ApiModelProperty(value = "会员姓名")
private String memberName;
@ApiModelProperty(value = "手机号")
private String memberPhone;
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "消费密码")
private String payPassword;
@ApiModelProperty(value = "门店名")
private String shopName;
@ApiModelProperty(value = "门店id")
private String shopId;
@ApiModelProperty(value = "创建时间")
private Date createTime;
}

View File

@@ -0,0 +1,67 @@
package com.dd.admin.business.member.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 会员
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-21
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("business_member")
@ApiModel(value="Member对象", description="会员")
public class Member implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "会员表id")
@TableId(value = "MEMBER_ID", type = IdType.ASSIGN_UUID)
private String memberId;
@ApiModelProperty(value = "会员姓名")
@TableField("MEMBER_NAME")
private String memberName;
@ApiModelProperty(value = "手机号")
@TableField("MEMBER_PHONE")
private String memberPhone;
@ApiModelProperty(value = "备注")
@TableField("REMARK")
private String remark;
@ApiModelProperty(value = "消费密码")
@TableField("PAY_PASSWORD")
private String payPassword;
@ApiModelProperty(value = "门店名")
@TableField(value = "SHOP_NAME", fill = FieldFill.INSERT)
private String shopName;
@ApiModelProperty(value = "门店id")
@TableField(value = "SHOP_ID", fill = FieldFill.INSERT)
private String shopId;
@ApiModelProperty(value = "创建时间")
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
private Date createTime;
}

View File

@@ -0,0 +1,28 @@
package com.dd.admin.business.member.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.admin.business.member.entity.Member;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dd.admin.business.member.domain.MemberVo;
import com.dd.admin.business.member.domain.MemberDto;
import java.util.List;
/**
* <p>
* 会员 Mapper 接口
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-21
*/
@Mapper
public interface MemberMapper extends BaseMapper<Member> {
IPage<MemberVo> selectMemberPage(Page<MemberVo> page, @Param("memberDto") MemberDto memberDto);
List<MemberVo> selectMemberList(@Param("memberDto") MemberDto memberDto);
}

View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dd.admin.business.member.mapper.MemberMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.dd.admin.business.member.entity.Member">
<id column="MEMBER_ID" property="memberId" />
<result column="MEMBER_NAME" property="memberName" />
<result column="MEMBER_PHONE" property="memberPhone" />
<result column="REMARK" property="remark" />
<result column="PAY_PASSWORD" property="payPassword" />
<result column="SHOP_NAME" property="shopName" />
<result column="SHOP_ID" property="shopId" />
<result column="CREATE_TIME" property="createTime" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
MEMBER_ID, MEMBER_NAME, MEMBER_PHONE, REMARK, PAY_PASSWORD, SHOP_NAME, SHOP_ID, CREATE_TIME
</sql>
<select id="selectMemberPage" resultType="com.dd.admin.business.member.domain.MemberVo">
select
*
from business_member where 1 = 1
<if test="memberDto.keyword != null and memberDto.keyword != ''">
and (member_name like CONCAT('%', #{memberDto.keyword}, '%')
or member_phone like concat('%',#{memberDto.keyword},'%'))
</if>
<if test="memberDto.shopId != null and memberDto.shopId != ''">
and shop_id = #{memberDto.shopId}
</if>
order by create_time desc
</select>
<select id="selectMemberList" resultType="com.dd.admin.business.member.domain.MemberVo">
select
*
from business_member where 1 = 1
<if test="memberDto.querySearch != null and memberDto.querySearch != ''">
and (member_name like CONCAT('%', #{memberDto.querySearch}, '%')
or member_phone like concat('%',#{memberDto.querySearch},'%'))
</if>
<if test="memberDto.shopId != null and memberDto.shopId != ''">
and shop_id = #{memberDto.shopId}
</if>
order by create_time desc
<if test="memberDto.limit != null">
limit #{memberDto.limit}
</if>
</select>
</mapper>

View File

@@ -0,0 +1,27 @@
package com.dd.admin.business.member.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dd.admin.business.member.entity.Member;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dd.admin.business.member.domain.MemberVo;
import com.dd.admin.business.member.domain.MemberDto;
import java.util.List;
/**
* <p>
* 会员 服务类
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-21
*/
public interface MemberService extends IService<Member> {
//会员-分页列表
IPage<MemberVo> selectMemberPage(MemberDto memberDto);
//会员-列表
List<MemberVo> selectMemberList(MemberDto memberDto);
Integer selectMemberCount(String shopId);
}

View File

@@ -0,0 +1,45 @@
package com.dd.admin.business.member.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.admin.common.model.PageFactory;
import com.dd.admin.business.member.entity.Member;
import com.dd.admin.business.member.mapper.MemberMapper;
import com.dd.admin.business.member.service.MemberService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import com.dd.admin.business.member.domain.MemberVo;
import com.dd.admin.business.member.domain.MemberDto;
import java.util.List;
/**
* <p>
* 会员 服务实现类
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-21
*/
@Service
public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService {
@Override
public IPage<MemberVo> selectMemberPage(MemberDto memberDto) {
Page page = PageFactory.defaultPage();
return baseMapper.selectMemberPage(page,memberDto);
}
@Override
public List<MemberVo> selectMemberList(MemberDto memberDto) {
return baseMapper.selectMemberList(memberDto);
}
@Override
public Integer selectMemberCount(String shopId) {
LambdaQueryWrapper<Member> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Member::getShopId, shopId);
return baseMapper.selectCount(queryWrapper);
}
}

View File

@@ -0,0 +1,112 @@
package com.dd.admin.business.memberCard.controller;
import cn.hutool.core.bean.BeanUtil;
import com.dd.admin.business.member.domain.MemberVo;
import com.dd.admin.business.member.entity.Member;
import com.dd.admin.business.member.service.MemberService;
import com.dd.admin.common.security.SecurityUtil;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.dd.admin.common.model.UpdateGroup;
import com.dd.admin.common.model.result.ResultBean;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotBlank;
import com.dd.admin.business.memberCard.entity.MemberCard;
import com.dd.admin.business.memberCard.domain.MemberCardVo;
import com.dd.admin.business.memberCard.domain.MemberCardDto;
import com.dd.admin.business.memberCard.service.MemberCardService;
import java.util.List;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 会员卡 前端控制器
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-19
*/
@Api(tags = "会员卡")
@RestController
public class MemberCardController {
@Autowired
MemberCardService memberCardService;
@Autowired
MemberService memberService;
@ApiOperation(value = "会员卡-分页列表")
@ApiOperationSupport(order = 1)
@GetMapping("/admin/memberCard/page")
public ResultBean<IPage<MemberCardVo>> page(MemberCardDto memberCardDto) {
memberCardDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
IPage<MemberCardVo> pageInfo = memberCardService.selectMemberCardPage(memberCardDto);
return ResultBean.success(pageInfo);
}
@ApiOperation(value = "会员卡-列表")
@ApiOperationSupport(order = 2)
@GetMapping("/admin/memberCard/list")
public ResultBean<List<MemberCardVo>> list(MemberCardDto memberCardDto) {
memberCardDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
List<MemberCardVo> list = memberCardService.selectMemberCardList(memberCardDto);
return ResultBean.success(list);
}
@ApiOperation(value = "会员卡-列表")
@ApiOperationSupport(order = 2)
@GetMapping("/admin/memberCard/searchList")
public ResultBean<List<MemberCardVo>> searchList(MemberCardDto memberCardDto) {
memberCardDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
memberCardDto.setLimit(10);
List<MemberCardVo> list = memberCardService.selectMemberCardList(memberCardDto);
list.stream().forEach(memberCardVo -> {
Member member = memberService.getById(memberCardVo.getMemberId());
MemberVo memberVo = BeanUtil.copyProperties(member, MemberVo.class);
memberCardVo.setMember(memberVo);
});
return ResultBean.success(list);
}
@ApiOperation(value = "会员卡-添加")
@ApiOperationSupport(order = 3)
@PostMapping("/admin/memberCard/add")
public ResultBean<MemberCard> add(@RequestBody @Validated MemberCardDto memberCardDto) {
MemberCard memberCard = BeanUtil.copyProperties(memberCardDto, MemberCard.class);
memberCardService.save(memberCard);
return ResultBean.success(memberCard);
}
@ApiOperation(value = "会员卡-查询")
@ApiOperationSupport(order = 4)
@GetMapping("/admin/memberCard/{memberCardId}")
public ResultBean<MemberCardVo> get(@PathVariable @NotBlank String memberCardId) {
MemberCard memberCard = memberCardService.getById(memberCardId);
MemberCardVo memberCardVo = BeanUtil.copyProperties(memberCard,MemberCardVo.class);
return ResultBean.success(memberCardVo);
}
@ApiOperation(value = "会员卡-修改")
@ApiOperationSupport(order = 5)
@PostMapping("/admin/memberCard/update")
public ResultBean<MemberCard> update(@RequestBody @Validated(UpdateGroup.class) MemberCardDto memberCardDto) {
MemberCard memberCard = BeanUtil.copyProperties(memberCardDto, MemberCard.class);
memberCardService.updateById(memberCard);
return ResultBean.success(memberCard);
}
@ApiOperation(value = "会员卡-删除")
@ApiOperationSupport(order = 6)
@GetMapping("/admin/memberCard/delete/{memberCardId}")
public ResultBean<MemberCard> delete(@PathVariable @NotBlank String memberCardId) {
Boolean b = memberCardService.removeById(memberCardId);
return ResultBean.success(b);
}
}

View File

@@ -0,0 +1,103 @@
package com.dd.admin.business.memberCard.domain;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import com.dd.admin.common.model.UpdateGroup;
/**
* <p>
* 会员卡返回对象
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-19
*/
@Data
@ApiModel(value="会员卡接收对象")
public class MemberCardDto {
@ApiModelProperty(value = "会员卡id")
@NotBlank(message = "会员卡id不能为空",groups = UpdateGroup.class)
private String memberCardId;
@ApiModelProperty(value = "会员id")
private String memberId;
@ApiModelProperty(value = "卡项ID")
private String cardId;
@ApiModelProperty(value = "卡号")
private String cardNo;
@ApiModelProperty(value = "卡名称")
private String cardName;
@ApiModelProperty(value = "余额")
private BigDecimal amount;
@ApiModelProperty(value = "赠送金额")
private BigDecimal giveAmount;
@ApiModelProperty(value = "商品折扣")
private BigDecimal discount;
@ApiModelProperty(value = "开卡金额")
private BigDecimal buildCardAmount;
@ApiModelProperty(value = "提成比例")
private BigDecimal pushMoney;
@ApiModelProperty(value = "0正常 1取消")
private Integer cardStatus;
@ApiModelProperty(value = "0正常 1删除")
private Integer deleted;
@ApiModelProperty(value = "乐观锁字段")
private Long version;
@ApiModelProperty(value = "门店id")
private String shopId;
@ApiModelProperty(value = "门店名")
private String shopName;
@ApiModelProperty(value = "创建人")
private String createName;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人id")
private String createId;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "修改人")
private String updateName;
@ApiModelProperty(value = "修改人id")
private String updateId;
@ApiModelProperty(value = "搜索会员卡关键字")
private String querySearch;
@ApiModelProperty(value = "搜索会员卡关键字")
private Integer limit;
}

View File

@@ -0,0 +1,100 @@
package com.dd.admin.business.memberCard.domain;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import com.dd.admin.business.member.domain.MemberVo;
import com.dd.admin.business.memberCard.entity.MemberCard;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 会员卡返回对象
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-19
*/
@Data
@ApiModel(value="会员卡返回对象")
public class MemberCardVo {
@ApiModelProperty(value = "会员卡id")
private String memberCardId;
@ApiModelProperty(value = "会员id")
private String memberId;
@ApiModelProperty(value = "卡项ID")
private String cardId;
@ApiModelProperty(value = "卡号")
private String cardNo;
@ApiModelProperty(value = "卡名称")
private String cardName;
@ApiModelProperty(value = "余额")
private BigDecimal amount;
@ApiModelProperty(value = "赠送金额")
private BigDecimal giveAmount;
@ApiModelProperty(value = "商品折扣")
private BigDecimal discount;
@ApiModelProperty(value = "开卡金额")
private BigDecimal buildCardAmount;
@ApiModelProperty(value = "提成比例")
private BigDecimal pushMoney;
@ApiModelProperty(value = "0正常 1取消")
private Integer cardStatus;
@ApiModelProperty(value = "0正常 1删除")
private Integer deleted;
@ApiModelProperty(value = "乐观锁字段")
private Long version;
@ApiModelProperty(value = "门店id")
private String shopId;
@ApiModelProperty(value = "门店名")
private String shopName;
@ApiModelProperty(value = "创建人")
private String createName;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人id")
private String createId;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "修改人")
private String updateName;
@ApiModelProperty(value = "修改人id")
private String updateId;
@ApiModelProperty(value = "会员信息")
private MemberVo member;
}

View File

@@ -0,0 +1,121 @@
package com.dd.admin.business.memberCard.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 会员卡
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-19
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("business_member_card")
@ApiModel(value="MemberCard对象", description="会员卡")
public class MemberCard implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "会员卡id")
@TableId(value = "MEMBER_CARD_ID", type = IdType.ASSIGN_UUID)
private String memberCardId;
@ApiModelProperty(value = "会员id")
@TableField("MEMBER_ID")
private String memberId;
@ApiModelProperty(value = "卡项ID")
@TableField("CARD_ID")
private String cardId;
@ApiModelProperty(value = "卡号")
@TableField("CARD_NO")
private String cardNo;
@ApiModelProperty(value = "卡名称")
@TableField("CARD_NAME")
private String cardName;
@ApiModelProperty(value = "余额")
@TableField("AMOUNT")
private BigDecimal amount;
@ApiModelProperty(value = "赠送金额")
@TableField("GIVE_AMOUNT")
private BigDecimal giveAmount;
@ApiModelProperty(value = "商品折扣")
@TableField("DISCOUNT")
private BigDecimal discount;
@ApiModelProperty(value = "开卡金额")
@TableField("BUILD_CARD_AMOUNT")
private BigDecimal buildCardAmount;
@ApiModelProperty(value = "提成比例")
@TableField("PUSH_MONEY")
private BigDecimal pushMoney;
@ApiModelProperty(value = "0正常 1取消")
@TableField("CARD_STATUS")
private Integer cardStatus;
@ApiModelProperty(value = "0正常 1删除")
@TableField("DELETED")
@TableLogic
private Integer deleted;
@ApiModelProperty(value = "乐观锁字段")
@TableField("VERSION")
@Version
private Long version;
@ApiModelProperty(value = "门店id")
@TableField(value = "SHOP_ID", fill = FieldFill.INSERT)
private String shopId;
@ApiModelProperty(value = "门店名")
@TableField(value = "SHOP_NAME", fill = FieldFill.INSERT)
private String shopName;
@ApiModelProperty(value = "创建人")
@TableField(value = "CREATE_NAME", fill = FieldFill.INSERT)
private String createName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "创建人id")
@TableField(value = "CREATE_ID", fill = FieldFill.INSERT)
private String createId;
@ApiModelProperty(value = "修改时间")
@TableField(value = "UPDATE_TIME", fill = FieldFill.UPDATE)
private Date updateTime;
@ApiModelProperty(value = "修改人")
@TableField(value = "UPDATE_NAME", fill = FieldFill.UPDATE)
private String updateName;
@ApiModelProperty(value = "修改人id")
@TableField(value = "UPDATE_ID", fill = FieldFill.UPDATE)
private String updateId;
}

View File

@@ -0,0 +1,31 @@
package com.dd.admin.business.memberCard.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.admin.business.memberCard.entity.MemberCard;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dd.admin.business.memberCard.domain.MemberCardVo;
import com.dd.admin.business.memberCard.domain.MemberCardDto;
import java.util.List;
/**
* <p>
* 会员卡 Mapper 接口
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-19
*/
@Mapper
public interface MemberCardMapper extends BaseMapper<MemberCard> {
IPage<MemberCardVo> selectMemberCardPage(Page<MemberCardVo> page, @Param("memberCardDto") MemberCardDto memberCardDto);
List<MemberCardVo> selectMemberCardList(@Param("memberCardDto") MemberCardDto memberCardDto);
MemberCardVo selectOneByCardNo(@Param("cardNo")String cardNo,@Param("shopId")String shopId);
}

View File

@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dd.admin.business.memberCard.mapper.MemberCardMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.dd.admin.business.memberCard.entity.MemberCard">
<id column="MEMBER_CARD_ID" property="memberCardId" />
<result column="MEMBER_ID" property="memberId" />
<result column="CARD_ID" property="cardId" />
<result column="CARD_NO" property="cardNo" />
<result column="CARD_NAME" property="cardName" />
<result column="AMOUNT" property="amount" />
<result column="GIVE_AMOUNT" property="giveAmount" />
<result column="DISCOUNT" property="discount" />
<result column="BUILD_CARD_AMOUNT" property="buildCardAmount" />
<result column="PUSH_MONEY" property="pushMoney" />
<result column="CARD_STATUS" property="cardStatus" />
<result column="DELETED" property="deleted" />
<result column="VERSION" property="version" />
<result column="SHOP_ID" property="shopId" />
<result column="SHOP_NAME" property="shopName" />
<result column="CREATE_NAME" property="createName" />
<result column="CREATE_TIME" property="createTime" />
<result column="CREATE_ID" property="createId" />
<result column="UPDATE_TIME" property="updateTime" />
<result column="UPDATE_NAME" property="updateName" />
<result column="UPDATE_ID" property="updateId" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
MEMBER_CARD_ID, MEMBER_ID, CARD_ID, CARD_NO, CARD_NAME, AMOUNT, GIVE_AMOUNT, DISCOUNT, BUILD_CARD_AMOUNT, PUSH_MONEY, CARD_STATUS, DELETED, VERSION, SHOP_ID, SHOP_NAME, CREATE_NAME, CREATE_TIME, CREATE_ID, UPDATE_TIME, UPDATE_NAME, UPDATE_ID
</sql>
<select id="selectMemberCardPage" resultType="com.dd.admin.business.memberCard.domain.MemberCardVo">
select
*
from business_member_card where 1 = 1
<if test="memberCardDto.shopId != null and memberCardDto.shopId != ''">
and shop_id = #{memberCardDto.shopId}
</if>
</select>
<select id="selectMemberCardList" resultType="com.dd.admin.business.memberCard.domain.MemberCardVo">
select
*
from business_member_card where deleted = 0
<if test="memberCardDto.memberId != null and memberCardDto.memberId != ''">
and member_id = #{memberCardDto.memberId}
</if>
<if test="memberCardDto.querySearch != null and memberCardDto.querySearch != ''">
and CARD_NO like CONCAT('%', #{memberCardDto.querySearch}, '%')
</if>
<if test="memberCardDto.shopId != null and memberCardDto.shopId != ''">
and shop_id = #{memberCardDto.shopId}
</if>
order by create_time desc
<if test="memberCardDto.limit != null">
limit #{memberCardDto.limit}
</if>
</select>
<select id="selectOneByCardNo" resultType="com.dd.admin.business.memberCard.domain.MemberCardVo">
select
<include refid="Base_Column_List"/>
from business_member_card
where
SHOP_ID = #{shopId} and
CARD_NO = #{cardNo} limit 0,1
</select>
</mapper>

View File

@@ -0,0 +1,31 @@
package com.dd.admin.business.memberCard.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dd.admin.business.memberCard.entity.MemberCard;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dd.admin.business.memberCard.domain.MemberCardVo;
import com.dd.admin.business.memberCard.domain.MemberCardDto;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 会员卡 服务类
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-19
*/
public interface MemberCardService extends IService<MemberCard> {
//会员卡-分页列表
IPage<MemberCardVo> selectMemberCardPage(MemberCardDto memberCardDto);
//会员卡-列表
List<MemberCardVo> selectMemberCardList(MemberCardDto memberCardDto);
MemberCardVo selectOneByCardNo(String cardNo);
Integer selectMemberCardCount(String shopId);
}

View File

@@ -0,0 +1,53 @@
package com.dd.admin.business.memberCard.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.admin.business.member.entity.Member;
import com.dd.admin.common.model.PageFactory;
import com.dd.admin.business.memberCard.entity.MemberCard;
import com.dd.admin.business.memberCard.mapper.MemberCardMapper;
import com.dd.admin.business.memberCard.service.MemberCardService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dd.admin.common.security.SecurityUtil;
import org.springframework.stereotype.Service;
import com.dd.admin.business.memberCard.domain.MemberCardVo;
import com.dd.admin.business.memberCard.domain.MemberCardDto;
import java.util.List;
/**
* <p>
* 会员卡 服务实现类
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-19
*/
@Service
public class MemberCardServiceImpl extends ServiceImpl<MemberCardMapper, MemberCard> implements MemberCardService {
@Override
public IPage<MemberCardVo> selectMemberCardPage(MemberCardDto memberCardDto) {
Page page = PageFactory.defaultPage();
return baseMapper.selectMemberCardPage(page,memberCardDto);
}
@Override
public List<MemberCardVo> selectMemberCardList(MemberCardDto memberCardDto) {
return baseMapper.selectMemberCardList(memberCardDto);
}
@Override
public MemberCardVo selectOneByCardNo(String cardNo) {
String deptId = SecurityUtil.getLoginUser().getDeptId();
return baseMapper.selectOneByCardNo(cardNo,deptId);
}
@Override
public Integer selectMemberCardCount(String shopId) {
LambdaQueryWrapper<MemberCard> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MemberCard::getShopId, shopId);
return baseMapper.selectCount(queryWrapper);
}
}

View File

@@ -0,0 +1,88 @@
package com.dd.admin.business.operationLog.controller;
import cn.hutool.core.bean.BeanUtil;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.dd.admin.common.model.UpdateGroup;
import com.dd.admin.common.model.result.ResultBean;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotBlank;
import com.dd.admin.business.operationLog.entity.OperationLog;
import com.dd.admin.business.operationLog.domain.OperationLogVo;
import com.dd.admin.business.operationLog.domain.OperationLogDto;
import com.dd.admin.business.operationLog.service.OperationLogService;
import java.util.List;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 操作日志 前端控制器
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-07
*/
@Api(tags = "操作日志")
@RestController
public class OperationLogController {
@Autowired
OperationLogService operationLogService;
@ApiOperation(value = "操作日志-分页列表")
@ApiOperationSupport(order = 1)
@GetMapping("/admin/operationLog/page")
public ResultBean<IPage<OperationLogVo>> page(OperationLogDto operationLogDto) {
IPage<OperationLogVo> pageInfo = operationLogService.selectOperationLogPage(operationLogDto);
return ResultBean.success(pageInfo);
}
@ApiOperation(value = "操作日志-列表")
@ApiOperationSupport(order = 2)
@GetMapping("/admin/operationLog/list")
public ResultBean<List<OperationLogVo>> list(OperationLogDto operationLogDto) {
List<OperationLogVo> list = operationLogService.selectOperationLogList(operationLogDto);
return ResultBean.success(list);
}
@ApiOperation(value = "操作日志-添加")
@ApiOperationSupport(order = 3)
@PostMapping("/admin/operationLog/add")
public ResultBean<OperationLog> add(@RequestBody @Validated OperationLogDto operationLogDto) {
OperationLog operationLog = BeanUtil.copyProperties(operationLogDto, OperationLog.class);
operationLogService.save(operationLog);
return ResultBean.success(operationLog);
}
@ApiOperation(value = "操作日志-查询")
@ApiOperationSupport(order = 4)
@GetMapping("/admin/operationLog/{operationLogId}")
public ResultBean<OperationLogVo> get(@PathVariable @NotBlank String operationLogId) {
OperationLog operationLog = operationLogService.getById(operationLogId);
OperationLogVo operationLogVo = BeanUtil.copyProperties(operationLog,OperationLogVo.class);
return ResultBean.success(operationLogVo);
}
@ApiOperation(value = "操作日志-修改")
@ApiOperationSupport(order = 5)
@PostMapping("/admin/operationLog/update")
public ResultBean<OperationLog> update(@RequestBody @Validated(UpdateGroup.class) OperationLogDto operationLogDto) {
OperationLog operationLog = BeanUtil.copyProperties(operationLogDto, OperationLog.class);
operationLogService.updateById(operationLog);
return ResultBean.success(operationLog);
}
@ApiOperation(value = "操作日志-删除")
@ApiOperationSupport(order = 6)
@GetMapping("/admin/operationLog/delete/{operationLogId}")
public ResultBean<OperationLog> delete(@PathVariable @NotBlank String operationLogId) {
Boolean b = operationLogService.removeById(operationLogId);
return ResultBean.success(b);
}
}

View File

@@ -0,0 +1,78 @@
package com.dd.admin.business.operationLog.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import com.dd.admin.common.model.UpdateGroup;
/**
* <p>
* 操作日志返回对象
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-07
*/
@Data
@ApiModel(value="操作日志接收对象")
public class OperationLogDto {
@ApiModelProperty(value = "日志id")
private String operId;
@ApiModelProperty(value = "请求模块")
private String operModule;
@ApiModelProperty(value = "操作类型")
private String operType;
@ApiModelProperty(value = "操作描述")
private String operDesc;
@ApiModelProperty(value = "操作方法")
private String operMethod;
@ApiModelProperty(value = "请求参数")
private String oprrRequestParam;
@ApiModelProperty(value = "响应参数")
private String operResponseParam;
@ApiModelProperty(value = "操作人姓名")
private String operUserId;
@ApiModelProperty(value = "操作人ID")
private String operUserName;
@ApiModelProperty(value = "操作ip")
private String operIp;
@ApiModelProperty(value = "请求url")
private String operUrl;
@ApiModelProperty(value = "操作机构id")
private String operDeptId;
@ApiModelProperty(value = "机构名")
private String operDeptName;
private Date createTime;
@ApiModelProperty(value = "会员id")
private String memberId;
@ApiModelProperty(value = "会员名")
private String memberName;
}

View File

@@ -0,0 +1,75 @@
package com.dd.admin.business.operationLog.domain;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 操作日志返回对象
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-07
*/
@Data
@ApiModel(value="操作日志返回对象")
public class OperationLogVo {
@ApiModelProperty(value = "日志id")
private String operId;
@ApiModelProperty(value = "请求模块")
private String operModule;
@ApiModelProperty(value = "操作类型")
private String operType;
@ApiModelProperty(value = "操作描述")
private String operDesc;
@ApiModelProperty(value = "操作方法")
private String operMethod;
@ApiModelProperty(value = "请求参数")
private String oprrRequestParam;
@ApiModelProperty(value = "响应参数")
private String operResponseParam;
@ApiModelProperty(value = "操作人姓名")
private String operUserId;
@ApiModelProperty(value = "操作人ID")
private String operUserName;
@ApiModelProperty(value = "操作ip")
private String operIp;
@ApiModelProperty(value = "请求url")
private String operUrl;
@ApiModelProperty(value = "操作机构id")
private String operDeptId;
@ApiModelProperty(value = "机构名")
private String operDeptName;
private Date createTime;
@ApiModelProperty(value = "会员id")
private String memberId;
@ApiModelProperty(value = "会员名")
private String memberName;
}

View File

@@ -0,0 +1,92 @@
package com.dd.admin.business.operationLog.entity;
import com.baomidou.mybatisplus.annotation.*;
import java.util.Date;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 操作日志
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-07
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("business_operation_log")
@ApiModel(value="OperationLog对象", description="操作日志")
public class OperationLog implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "日志id")
@TableId(value = "OPER_ID", type = IdType.ASSIGN_UUID)
private String operId;
@ApiModelProperty(value = "请求模块")
@TableField("OPER_MODULE")
private String operModule;
@ApiModelProperty(value = "操作类型")
@TableField("OPER_TYPE")
private String operType;
@ApiModelProperty(value = "操作描述")
@TableField("OPER_DESC")
private String operDesc;
@ApiModelProperty(value = "操作方法")
@TableField("OPER_METHOD")
private String operMethod;
@ApiModelProperty(value = "请求参数")
@TableField("OPRR_REQUEST_PARAM")
private String oprrRequestParam;
@ApiModelProperty(value = "响应参数")
@TableField("OPER_RESPONSE_PARAM")
private String operResponseParam;
@ApiModelProperty(value = "操作人姓名")
@TableField("OPER_USER_ID")
private String operUserId;
@ApiModelProperty(value = "操作人ID")
@TableField("OPER_USER_NAME")
private String operUserName;
@ApiModelProperty(value = "操作ip")
@TableField("OPER_IP")
private String operIp;
@ApiModelProperty(value = "请求url")
@TableField("OPER_URL")
private String operUrl;
@ApiModelProperty(value = "操作机构id")
@TableField("OPER_DEPT_ID")
private String operDeptId;
@ApiModelProperty(value = "机构名")
@TableField("OPER_DEPT_NAME")
private String operDeptName;
@TableField(value = "CREATE_TIME")
private Date createTime;
@ApiModelProperty(value = "会员id")
@TableField("MEMBER_ID")
private String memberId;
@ApiModelProperty(value = "会员名")
@TableField("MEMBER_NAME")
private String memberName;
}

View File

@@ -0,0 +1,28 @@
package com.dd.admin.business.operationLog.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.admin.business.operationLog.entity.OperationLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dd.admin.business.operationLog.domain.OperationLogVo;
import com.dd.admin.business.operationLog.domain.OperationLogDto;
import java.util.List;
/**
* <p>
* 操作日志 Mapper 接口
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-07
*/
@Mapper
public interface OperationLogMapper extends BaseMapper<OperationLog> {
IPage<OperationLogVo> selectOperationLogPage(Page<OperationLogVo> page, @Param("operationLogDto") OperationLogDto operationLogDto);
List<OperationLogVo> selectOperationLogList(@Param("operationLogDto") OperationLogDto operationLogDto);
}

View File

@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dd.admin.business.operationLog.mapper.OperationLogMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.dd.admin.business.operationLog.entity.OperationLog">
<result column="OPER_ID" property="operId" />
<result column="OPER_MODULE" property="operModule" />
<result column="OPER_TYPE" property="operType" />
<result column="OPER_DESC" property="operDesc" />
<result column="OPER_METHOD" property="operMethod" />
<result column="OPRR_REQUEST_PARAM" property="oprrRequestParam" />
<result column="OPER_RESPONSE_PARAM" property="operResponseParam" />
<result column="OPER_USER_ID" property="operUserId" />
<result column="OPER_USER_NAME" property="operUserName" />
<result column="OPER_IP" property="operIp" />
<result column="OPER_URL" property="operUrl" />
<result column="OPER_DEPT_ID" property="operDeptId" />
<result column="OPER_DEPT_NAME" property="operDeptName" />
<result column="CREATE_TIME" property="createTime" />
<result column="MEMBER_ID" property="memberId" />
<result column="MEMBER_NAME" property="memberName" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
OPER_ID, OPER_MODULE, OPER_TYPE, OPER_DESC, OPER_METHOD, OPRR_REQUEST_PARAM, OPER_RESPONSE_PARAM, OPER_USER_ID, OPER_USER_NAME, OPER_IP, OPER_URL, OPER_DEPT_ID, OPER_DEPT_NAME, CREATE_TIME, MEMBER_ID, MEMBER_NAME
</sql>
<select id="selectOperationLogPage" resultType="com.dd.admin.business.operationLog.domain.OperationLogVo">
select
*
from business_operation_log where 1 = 1
order by create_time desc
</select>
<select id="selectOperationLogList" resultType="com.dd.admin.business.operationLog.domain.OperationLogVo">
select
*
from business_operation_log where 1 = 1
</select>
</mapper>

View File

@@ -0,0 +1,26 @@
package com.dd.admin.business.operationLog.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dd.admin.business.operationLog.entity.OperationLog;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dd.admin.business.operationLog.domain.OperationLogVo;
import com.dd.admin.business.operationLog.domain.OperationLogDto;
import java.util.List;
/**
* <p>
* 操作日志 服务类
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-07
*/
public interface OperationLogService extends IService<OperationLog> {
//操作日志-分页列表
IPage<OperationLogVo> selectOperationLogPage(OperationLogDto operationLogDto);
//操作日志-列表
List<OperationLogVo> selectOperationLogList(OperationLogDto operationLogDto);
}

View File

@@ -0,0 +1,36 @@
package com.dd.admin.business.operationLog.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.admin.common.model.PageFactory;
import com.dd.admin.business.operationLog.entity.OperationLog;
import com.dd.admin.business.operationLog.mapper.OperationLogMapper;
import com.dd.admin.business.operationLog.service.OperationLogService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import com.dd.admin.business.operationLog.domain.OperationLogVo;
import com.dd.admin.business.operationLog.domain.OperationLogDto;
import java.util.List;
/**
* <p>
* 操作日志 服务实现类
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-07
*/
@Service
public class OperationLogServiceImpl extends ServiceImpl<OperationLogMapper, OperationLog> implements OperationLogService {
@Override
public IPage<OperationLogVo> selectOperationLogPage(OperationLogDto operationLogDto) {
Page page = PageFactory.defaultPage();
return baseMapper.selectOperationLogPage(page,operationLogDto);
}
@Override
public List<OperationLogVo> selectOperationLogList(OperationLogDto operationLogDto) {
return baseMapper.selectOperationLogList(operationLogDto);
}
}

View File

@@ -0,0 +1,64 @@
package com.dd.admin.business.pay;
import cn.hutool.core.bean.BeanUtil;
import com.dd.admin.business.member.domain.MemberDto;
import com.dd.admin.business.member.entity.Member;
import com.dd.admin.business.pay.domain.BuildCardSell;
import com.dd.admin.business.pay.domain.ChargedCardSell;
import com.dd.admin.business.pay.domain.MemberProductSell;
import com.dd.admin.business.pay.service.PayService;
import com.dd.admin.business.sell.entity.Sell;
import com.dd.admin.common.aop.operationLog.aop.OperLog;
import com.dd.admin.common.aop.operationLog.aop.OperType;
import com.dd.admin.common.model.result.ResultBean;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@Api(tags = "结算控制器")
@RestController
public class PayController {
@Autowired
PayService payService;
@ApiOperation(value = "开卡结算")
@ApiOperationSupport(order = 3)
@PostMapping("/pay/buildCard")
@Transactional
@OperLog(operModule = "开卡结算",operType = OperType.ADD,operDesc = "开卡结算")
public ResultBean<Sell> buildCard(@RequestBody @Validated BuildCardSell buildCardSell) {
Sell sell = payService.executeBuildCard(buildCardSell);
return ResultBean.success(sell);
}
@ApiOperation(value = "续卡结算")
@ApiOperationSupport(order = 3)
@PostMapping("/pay/chargedCard")
@Transactional
@OperLog(operModule = "续卡结算",operType = OperType.ADD,operDesc = "续卡结算")
public ResultBean<Sell> chargedCard(@RequestBody @Validated ChargedCardSell chargedCardSell) {
Sell sell = payService.executeChargedCard(chargedCardSell);
return ResultBean.success(sell);
}
@ApiOperation(value = "商品结算")
@ApiOperationSupport(order = 3)
@PostMapping("/pay/productPay")
@Transactional
@OperLog(operModule = "商品结算",operType = OperType.ADD,operDesc = "商品结算")
public ResultBean<Sell> buildCard(@RequestBody @Validated MemberProductSell productSell) {
Sell sell = payService.executeProduct(productSell);
return ResultBean.success(sell);
}
}

View File

@@ -0,0 +1,34 @@
package com.dd.admin.business.pay.domain;
import com.dd.admin.business.sellPay.entity.Sellpay;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
@Data
public class BaseSell {
@ApiModelProperty(value = "订单号 可不填 不填将自动生成")
private String sellNo;
@ApiModelProperty(value = "支付列表")
@NotNull(message = "支付信息不能为空")
private List<Sellpay> sellPayList;
@ApiModelProperty(value = "订单金额")
@NotNull(message = "订单金额不能为空")
@Max(value = 1000000,message = "订单金额最大为1000000")
@Min(value = 0,message = "订单金额最小为0")
private BigDecimal sellAmount;
@ApiModelProperty(value = "json")
private String sellJson;
@ApiModelProperty(value = "jsonId")
private String jsonId;
}

View File

@@ -0,0 +1,40 @@
package com.dd.admin.business.pay.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.dd.admin.business.server.domain.ServerVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class BuildCardForm {
@ApiModelProperty(value = "会员卡id")
private String cardId;
@ApiModelProperty(value = "会员卡名")
@TableField("CARD_NAME")
private String cardName;
@ApiModelProperty(value = "卡编号")
@TableField("CARD_NO")
private String cardNo;
@ApiModelProperty(value = "预设开卡金")
@TableField("CARD_AMOUNT")
private BigDecimal cardAmount = BigDecimal.ZERO;
@ApiModelProperty(value = "预设赠送金")
@TableField("GIVE_AMOUNT")
private BigDecimal giveAmount = BigDecimal.ZERO;
@ApiModelProperty(value = "商品实际金额")
private BigDecimal totalRealAmount;
@ApiModelProperty(value = "服务人员列表")
private List<ServerVo> serverList;
}

View File

@@ -0,0 +1,18 @@
package com.dd.admin.business.pay.domain;
import com.dd.admin.business.card.entity.Card;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
@Data
@ApiModel(value="开卡接收对象")
public class BuildCardSell extends MemberBaseSell {
@ApiModelProperty(value = "开卡对象")
@NotNull(message = "开卡对象不能为空")
@Valid
BuildCardForm buildCardForm;
}

View File

@@ -0,0 +1,39 @@
package com.dd.admin.business.pay.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.dd.admin.business.server.domain.ServerVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class ChargedCardForm {
@ApiModelProperty(value = "会员卡id")
private String memberCardId;
@ApiModelProperty(value = "会员卡id")
private String cardId;
@ApiModelProperty(value = "会员卡名")
@TableField("CARD_NAME")
private String cardName;
@ApiModelProperty(value = "修改后卡编号")
@TableField("CARD_NO")
private String cardNo;
@ApiModelProperty(value = "充值开卡金")
private BigDecimal chargedCardAmount = BigDecimal.ZERO;
@ApiModelProperty(value = "充值赠送金")
private BigDecimal chargedGiveAmount = BigDecimal.ZERO;
@ApiModelProperty(value = "商品实际金额")
private BigDecimal totalRealAmount;
@ApiModelProperty(value = "服务人员列表")
private List<ServerVo> serverList;
}

View File

@@ -0,0 +1,17 @@
package com.dd.admin.business.pay.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
@Data
@ApiModel(value="续卡接收对象")
public class ChargedCardSell extends MemberBaseSell {
@ApiModelProperty(value = "续卡对象")
@NotNull(message = "续卡对象不能为空")
@Valid
ChargedCardForm chargedCardForm;
}

View File

@@ -0,0 +1,24 @@
package com.dd.admin.business.pay.domain;
import com.dd.admin.business.sellPay.entity.Sellpay;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
@Data
public class MemberBaseSell extends BaseSell{
@ApiModelProperty(value = "会员id")
private String memberId;
@ApiModelProperty(value = "会员卡id")
private String memberCardId;
@ApiModelProperty(value = "会员名")
private String memberName;
}

View File

@@ -0,0 +1,20 @@
package com.dd.admin.business.pay.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@ApiModel(value="会员商品消费")
public class MemberProductSell extends MemberBaseSell {
@ApiModelProperty(value = "商品对象")
@NotNull(message = "商品对不能为空")
@Valid
private List<ProductForm> productFormList;
}

View File

@@ -0,0 +1,48 @@
package com.dd.admin.business.pay.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.dd.admin.business.server.domain.ServerVo;
import com.dd.admin.common.model.UpdateGroup;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
import java.util.List;
@Data
public class ProductForm {
@ApiModelProperty(value = "商品id")
@NotBlank(message = "商品id不能为空",groups = UpdateGroup.class)
private String productId;
@ApiModelProperty(value = "分类id")
private String categoryId;
@ApiModelProperty(value = "分类名")
private String categoryName;
@ApiModelProperty(value = "商品名")
private String productName;
@ApiModelProperty(value = "商品金额")
private BigDecimal productAmount;
@ApiModelProperty(value = "商品会员金额")
private BigDecimal productMemberAmount;
@ApiModelProperty(value = "商品折扣")
private BigDecimal discount;
@ApiModelProperty(value = "商品数量")
private Long count;
@ApiModelProperty(value = "商品实际金额")
private BigDecimal realAmount;
@ApiModelProperty(value = "商品实际金额")
private BigDecimal totalRealAmount;
@ApiModelProperty(value = "服务人员列表")
private List<ServerVo> serverList;
}

View File

@@ -0,0 +1,59 @@
package com.dd.admin.business.pay.enmus;
import com.dd.admin.common.exception.enums.AbstractBaseExceptionEnum;
public enum CashierExceptionEnum implements AbstractBaseExceptionEnum {
CARD_AMOUNT_CHANGE(500,"余额已变动,为保证数据安全,操作中断,请重试!"),
MEMBER_CARD_NOT_SUFFICIENT_FUNDS(500,"会员卡余额不足,请重新操作!"),
MEMBER_CARD_GIVE_NOT_SUFFICIENT_FUNDS(500,"会员卡赠送余额不足,请重新操作!"),
MEMBER_CARD_ALREADY_BUILD(500,"该会员已经有充值账户,禁止重复创建!"),
MEMBER_ALREADY_BUILD(500,"该手机号已注册过,禁止重复创建!"),
MEMBER_DIFFERENT(500,"会员卡与会员信息不一致,请核实~"),
DEPT_DIFFERENT(500,"结算信息与当前门店信息不一致,请刷新后重试~"),
LKLPAY_NOT_AUTHCODE(500,"没有扫描或者扫描了错误的付款码,请核实!"),
LKLPAYINFO_IS_EXIST(500,"该组织的拉卡拉拓展信息已经配置过啦!"),
LKLPAYINFO_AUTHCODE_ERROR(500,"扫描用户付款码有误!"),
SELL_TYPE_ERROR(500,"传入的支付方式有误!"),
LKLPAYINFO_UNKONW_ERROR(500,"付款码支付有误!"),
LKLPAYINFO_COMPLETE_ERROR(500,"该订单已经完成了哦!"),
PRODUCT_ALREADY_EXIST(500,"该商品号已被占用!"),
CARDNO_ALREADY_EXIST(500,"该卡号已被占用!"),
CARD_ALREADY_EXIST(500,"该卡项编号已被占用!"),
PRODUCT_CARD_ALREADY_EXIST(500,"卡级价已存在,请更换其他卡项设置!"),
AUTHCODE_PAY_NOTZREO(500,"条码支付金额不能为0"),
COMBO_EXPIRED(500,"该套餐活动已过期!"),
COMBO_MONTH_COUNT_NONE(500,"套餐过期月数未设置!"),
MEMBER_COMBO_EXPIRED(500,"会员套餐截止期已过!"),
MEMBER_COMBO_NOT_SUFFICIENT_FUNDS(500,"套餐剩余项目次数不足!"),
MEMBER_COMBO_IS_USED(500,"该套餐已使用禁止销单!"),
MEMBER_COMBO_IS_DEL(500,"该套餐已删除!"),
PAY_MONEY_EMPTY(500,"付款码有误!"),
PAY_MONEY_ERROR(500,"付款金额有误!"),
PAY_ERROR(500,"条码付款发生了错误!"),
PAY_SELL_ERROR(500,"该订单状态已取消!"),
PAY_SELL_ALREADY(500,"该订单状态已结算!"),
PAY_SELL_CANCEL_ERROR(500,"该订单状态无法销单!"),
PAY_SELL_CARD_AMOUNT_CHANGE(500,"该卡已经生成消费记录,无法销单!"),
PAY_SELL_CARD_AMOUNT_NOT_SUFFICIENT_FUNDS(500,"销单后会员卡赠送余额不足,无法销单!"),
;
CashierExceptionEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
private Integer code;
private String message;
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getMessage() {
return this.message;
}
}

View File

@@ -0,0 +1,22 @@
package com.dd.admin.business.pay.enmus;
public enum DetailServiceEnum {
BUILD_CARD("sellDetailBuildCard"),
CHARGED_CARD("sellDetailChargedCard"),
MEMBER_PRODUCT("sellDetailMemberProduct"),
PEOPLE("sellDetailPeople");
private String serviceName;
DetailServiceEnum(String serviceName) {
this.serviceName = serviceName;
}
public String getServiceName() {
return serviceName;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
}

View File

@@ -0,0 +1,60 @@
package com.dd.admin.business.pay.enmus;
public class PayConst {
/**
* 订单状态销单
*/
public static final Integer SELL_STATUS_REVOCATION = 1;
/**
* 开卡
*/
public static final Integer SELL_TYPE_BUILD_CARD = 2;
/**
* 续卡
*/
public static final Integer SELL_TYPE_CHARGED_CARD = 3;
/**
* 商品服务
*/
public static final Integer SELL_TYPE_PRODUCT = 1;
/**
* 卡金支付
*/
public static final Integer PAY_TYPE_CARD = 1;
/**
* 赠送金支付
*/
public static final Integer PAY_TYPE_CARD_GIVE = 0;
public static final String PAY_TYPE_CARD_GIVE_NAME = "赠送金支付";
/**
* 优惠
*/
public static final Integer PAY_TYPE_DISCOUNT = 888;
/**
* 商品类型
*/
public static final Integer PRODUCT_TYPE_PRODUCT = 1;
/**
* 商品类型 卡项
*/
public static final Integer PRODUCT_TYPE_CARD = 2;
/**
* 商品类型 卡项
*/
public static final Integer PRODUCT_TYPE_CHARGED_CARD = 3;
/**
*待结算订单结算完毕
*/
public static final Integer PENDING_SELL_COMPLETE = 1;
}

View File

@@ -0,0 +1,19 @@
package com.dd.admin.business.pay.service;
import com.dd.admin.business.pay.domain.BaseSell;
import com.dd.admin.business.sell.domain.SellDto;
import com.dd.admin.business.sell.entity.Sell;
/**
* Description:创建销售细单接口 所有细单的操作 实现此接口
* date: 2021/7/12
* @author: wxl
*/
public interface AddSellDetailService {
void addSellDetail(Sell sell, BaseSell sellDto);
}

View File

@@ -0,0 +1,22 @@
package com.dd.admin.business.pay.service;
import com.dd.admin.business.memberCard.entity.MemberCard;
import com.dd.admin.business.pay.domain.BuildCardSell;
import com.dd.admin.business.pay.domain.ChargedCardSell;
import com.dd.admin.business.pay.domain.MemberProductSell;
import com.dd.admin.business.sell.entity.Sell;
import java.math.BigDecimal;
public interface PayService {
public Sell createSell(Sell sell);
public Sell setSellExtraInfo(String sellId, MemberCard memberCard, BigDecimal memberBeforeAmount,BigDecimal memberBeforeGiveAmount);
public Sell executeBuildCard(BuildCardSell buildCardSell);
public Sell executeChargedCard(ChargedCardSell chargedCardSell);
public Sell executeProduct(MemberProductSell productSell);
}

View File

@@ -0,0 +1,140 @@
package com.dd.admin.business.pay.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.dd.admin.business.memberCard.entity.MemberCard;
import com.dd.admin.business.pay.domain.BuildCardSell;
import com.dd.admin.business.pay.domain.ChargedCardSell;
import com.dd.admin.business.pay.domain.MemberProductSell;
import com.dd.admin.business.pay.service.AddSellDetailService;
import com.dd.admin.business.pay.service.PayService;
import com.dd.admin.business.sell.entity.Sell;
import com.dd.admin.business.sell.service.SellService;
import com.dd.admin.business.sellJson.entity.Selljson;
import com.dd.admin.business.sellJson.service.SelljsonService;
import com.dd.admin.business.sellPay.service.SellpayService;
import com.dd.admin.common.security.SecurityUtil;
import com.dd.admin.common.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Map;
import static com.dd.admin.business.pay.enmus.DetailServiceEnum.*;
import static com.dd.admin.business.pay.enmus.PayConst.*;
@Service
public class PayServiceImpl implements PayService {
@Autowired
private SellService sellService;
@Autowired
private Map<String, AddSellDetailService> detailServiceMap;
@Autowired
private SellpayService sellpayService;
@Autowired
private SelljsonService selljsonService;
@Override
public Sell createSell(Sell sell) {
String shopId = SecurityUtil.getLoginUser().getDeptId();
//直接执行save即可
if(StringUtil.isEmpty(sell.getSellNo())){
String sellNo = (StringUtil.getDateStringNow() + StringUtil.createCode(4));
sell.setSellNo(sellNo);
}
//插入时查看该门店今天数量为流水号
Integer count = sellService.selectTodayCount(shopId);
sell.setSerialNo(String.valueOf(count + 1));
sellService.save(sell);
return sell;
}
@Override
public Sell setSellExtraInfo(String sellId, MemberCard memberCard, BigDecimal memberBeforeAmount, BigDecimal memberBeforeGiveAmount) {
Sell extraSellInfo = new Sell();
extraSellInfo.setSellId(sellId);
if(memberCard!=null){
//设置订单的卡信息
extraSellInfo.setMemberCardId(memberCard.getMemberCardId());
extraSellInfo.setMemberCardName(memberCard.getCardName());
extraSellInfo.setMemberCardNo(memberCard.getCardNo());
//设置订单的卡余额
extraSellInfo.setMemberCardBeforeAmount(memberBeforeAmount);
extraSellInfo.setMemberCardBeforeGiveAmount(memberBeforeGiveAmount);
extraSellInfo.setMemberCardAfterAmount(memberCard.getAmount());
extraSellInfo.setMemberCardAfterGiveAmount(memberCard.getGiveAmount());
}
sellService.updateById(extraSellInfo);
return extraSellInfo;
}
@Override
public Sell executeBuildCard(BuildCardSell buildCardSell) {
if(StringUtil.isNotEmpty(buildCardSell.getJsonId())){
selljsonService.completePendingSell(buildCardSell.getJsonId());
}
Integer sellType = SELL_TYPE_BUILD_CARD;
//第一步创建订单
Sell sell = BeanUtil.copyProperties(buildCardSell,Sell.class);
sell.setSellType(sellType);
BigDecimal realAmount = sellpayService.getRealAmount(buildCardSell.getSellPayList(), buildCardSell.getSellAmount());
sell.setRealAmount(realAmount);
createSell(sell);
// selljsonService.save(new Selljson().setSellId(sell.getSellId()).setSellJson(buildCardSell.getSellJson()));
//创建销售细单
detailServiceMap.get(BUILD_CARD.getServiceName()).addSellDetail(sell,buildCardSell);
return sell;
}
@Override
public Sell executeChargedCard(ChargedCardSell chargedCardSell) {
if(StringUtil.isNotEmpty(chargedCardSell.getJsonId())){
selljsonService.completePendingSell(chargedCardSell.getJsonId());
}
Integer sellType = SELL_TYPE_CHARGED_CARD;
//chargedCardSell
Sell sell = BeanUtil.copyProperties(chargedCardSell,Sell.class);
sell.setSellType(sellType);
BigDecimal realAmount = sellpayService.getRealAmount(chargedCardSell.getSellPayList(), chargedCardSell.getSellAmount());
sell.setRealAmount(realAmount);
createSell(sell);
// selljsonService.save(new Selljson().setSellId(sell.getSellId()).setSellJson(chargedCardSell.getSellJson()));
//创建销售细单
detailServiceMap.get(CHARGED_CARD.getServiceName()).addSellDetail(sell,chargedCardSell);
return sell;
}
@Override
public Sell executeProduct(MemberProductSell productSell) {
if(StringUtil.isNotEmpty(productSell.getJsonId())){
selljsonService.completePendingSell(productSell.getJsonId());
}
Integer sellType = SELL_TYPE_PRODUCT;
//第一步创建订单
Sell sell = BeanUtil.copyProperties(productSell,Sell.class);
sell.setSellType(sellType);
BigDecimal realAmount = sellpayService.getRealAmount(productSell.getSellPayList(), productSell.getSellAmount());
sell.setRealAmount(realAmount);
createSell(sell);
//创建销售细单
detailServiceMap.get(MEMBER_PRODUCT.getServiceName()).addSellDetail(sell,productSell);
return sell;
}
}

View File

@@ -0,0 +1,162 @@
package com.dd.admin.business.pay.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.dd.admin.business.card.entity.Card;
import com.dd.admin.business.card.service.CardService;
import com.dd.admin.business.detailServer.entity.SellDetailServer;
import com.dd.admin.business.detailServer.service.SellDetailServerService;
import com.dd.admin.business.memberCard.domain.MemberCardVo;
import com.dd.admin.business.memberCard.entity.MemberCard;
import com.dd.admin.business.memberCard.service.MemberCardService;
import com.dd.admin.business.pay.domain.BaseSell;
import com.dd.admin.business.pay.domain.BuildCardForm;
import com.dd.admin.business.pay.domain.BuildCardSell;
import com.dd.admin.business.pay.service.AddSellDetailService;
import com.dd.admin.business.pay.service.PayService;
import com.dd.admin.business.sell.entity.Sell;
import com.dd.admin.business.sell.service.SellService;
import com.dd.admin.business.sellDetail.entity.SellDetail;
import com.dd.admin.business.sellDetail.service.SellDetailService;
import com.dd.admin.business.sellPay.entity.Sellpay;
import com.dd.admin.business.sellPay.service.SellpayService;
import com.dd.admin.business.server.domain.ServerVo;
import com.dd.admin.common.exception.ApiException;
import com.dd.admin.common.utils.BigDecimalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
import static com.dd.admin.business.pay.enmus.CashierExceptionEnum.CARDNO_ALREADY_EXIST;
import static com.dd.admin.business.pay.enmus.PayConst.PRODUCT_TYPE_CARD;
import static com.dd.admin.common.consts.MemberShopConst.PUSH_FIXED;
import static com.dd.admin.common.consts.MemberShopConst.PUSH_SCALE;
@Service
public class SellDetailBuildCard implements AddSellDetailService {
@Autowired
private CardService cardService;
@Autowired
private MemberCardService memberCardService;
@Autowired
private SellDetailService sellDetailService;
@Autowired
private SellpayService sellpayService;
@Autowired
private PayService payService;
@Autowired
private SellDetailServerService sellDetailServerService;
@Override
public void addSellDetail(Sell sell, BaseSell sellDto) {
//转换数据
BuildCardSell buildCardSell = (BuildCardSell) sellDto;
// 1 获取开卡金额 等信息 先开卡
String cardId = buildCardSell.getBuildCardForm().getCardId();
//获取需要的开卡信息
Card card = cardService.getById(cardId);
//开卡
MemberCard memberCard = buildMemberCard(sell, buildCardSell.getBuildCardForm(), card);
//2生成销售细单
SellDetail sellDetail = addSellDetail(sell, buildCardSell, memberCard, card);
//添加支付方式
sellpayService.addSellPayList(buildCardSell.getSellPayList(), sell.getSellId());
//4因为是开卡还要设置额外信息
payService.setSellExtraInfo(sell.getSellId(), memberCard, BigDecimal.ZERO, BigDecimal.ZERO);
}
MemberCard buildMemberCard(Sell sell, BuildCardForm buildCardForm, Card card) {
//设置卡的基本和余额信息
MemberCard memberCard = new MemberCard();
memberCard.setMemberId(sell.getMemberId());
memberCard.setCardId(card.getCardId());
memberCard.setCardName(card.getCardName());
String cardNo = buildCardForm.getCardNo();
MemberCardVo membercardVo = memberCardService.selectOneByCardNo(cardNo);
if (membercardVo != null) {
throw new ApiException(CARDNO_ALREADY_EXIST);
}
memberCard.setCardNo(buildCardForm.getCardNo());
memberCard.setAmount(buildCardForm.getCardAmount());
memberCard.setBuildCardAmount(buildCardForm.getCardAmount());
memberCard.setGiveAmount(buildCardForm.getGiveAmount());
//获取订单的卡折扣信息 设置进会员卡中
memberCard.setDiscount(card.getCardDiscount());
//设置该卡的提成金额
memberCard.setPushMoney(card.getCardPushPercent());
memberCardService.save(memberCard);
return memberCard;
}
SellDetail addSellDetail(Sell sell, BuildCardSell buildCardSell, MemberCard membercard, Card card) {
BuildCardForm buildCardForm = buildCardSell.getBuildCardForm();
SellDetail sellDetail = new SellDetail();
//3设置订单id 订单类型 订单状态
sellDetail.setSellId(sell.getSellId());
sellDetail.setSellType(sell.getSellType());
sellDetail.setMemberId(sell.getMemberId());
//设置商品信息
sellDetail.setProductType(PRODUCT_TYPE_CARD);
sellDetail.setCardId(buildCardForm.getCardId());
sellDetail.setCardName(buildCardForm.getCardName());
sellDetail.setAmount(buildCardForm.getCardAmount());
sellDetail.setGiveAmount(buildCardForm.getGiveAmount());
sellDetail.setRealAmount(sell.getRealAmount());
sellDetail.setTotalRealAmount(buildCardForm.getTotalRealAmount());
//设置会员信息
sellDetail.setMemberCardId(membercard.getMemberCardId());
//开卡后卡金和赠送金
sellDetail.setAmount(membercard.getAmount());
sellDetail.setGiveAmount(membercard.getGiveAmount());
//保存销售细单
sellDetailService.save(sellDetail);
//该条目有服务人员
List<ServerVo> serverList = buildCardForm.getServerList();
if (CollectionUtil.isNotEmpty(serverList)) {
//如果是固定金额 固定金额除以人数 获取固定金额
//如果是比例 计算出比例后提成 获取固定金额
//业绩和提成均平均分
//总提成
BigDecimal totalPushMoney = BigDecimal.ZERO;
//总业绩 为订单实付金额
BigDecimal totalGradeMoney = sellDetail.getTotalRealAmount();
//固定金额的话
//按比例
if (card.getCardPushPercent() != null) {
//提成额 先转换为百分数
BigDecimal pushPercent = BigDecimalUtil.div(card.getCardPushPercent(), new BigDecimal("100"));
//折后价*百分数
totalPushMoney = BigDecimalUtil.mul(totalGradeMoney, pushPercent);
}
//平均分
BigDecimal pushMoney = BigDecimalUtil.div(totalPushMoney, new BigDecimal(serverList.size()));
BigDecimal gradeMoney = BigDecimalUtil.div(totalGradeMoney, new BigDecimal(serverList.size()));
//设置服务人员
serverList.stream().forEach(server -> {
SellDetailServer sellDetailServer = new SellDetailServer();
sellDetailServer.setSellId(sell.getSellId());
sellDetailServer.setSellDetailId(sellDetail.getSellDetailId());
sellDetailServer.setServerId(server.getServerId());
sellDetailServer.setServerName(server.getServerName());
sellDetailServer.setServerPushMoney(pushMoney);
sellDetailServer.setServerGrade(gradeMoney);
sellDetailServerService.save(sellDetailServer);
});
}
return sellDetail;
}
}

View File

@@ -0,0 +1,192 @@
package com.dd.admin.business.pay.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.dd.admin.business.card.entity.Card;
import com.dd.admin.business.card.service.CardService;
import com.dd.admin.business.detailServer.entity.SellDetailServer;
import com.dd.admin.business.detailServer.service.SellDetailServerService;
import com.dd.admin.business.memberCard.domain.MemberCardVo;
import com.dd.admin.business.memberCard.entity.MemberCard;
import com.dd.admin.business.memberCard.service.MemberCardService;
import com.dd.admin.business.pay.domain.*;
import com.dd.admin.business.pay.service.AddSellDetailService;
import com.dd.admin.business.pay.service.PayService;
import com.dd.admin.business.sell.entity.Sell;
import com.dd.admin.business.sell.service.SellService;
import com.dd.admin.business.sellDetail.entity.SellDetail;
import com.dd.admin.business.sellDetail.service.SellDetailService;
import com.dd.admin.business.sellPay.entity.Sellpay;
import com.dd.admin.business.sellPay.service.SellpayService;
import com.dd.admin.business.server.domain.ServerVo;
import com.dd.admin.common.exception.ApiException;
import com.dd.admin.common.utils.BigDecimalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
import static com.dd.admin.business.pay.enmus.CashierExceptionEnum.CARD_AMOUNT_CHANGE;
import static com.dd.admin.business.pay.enmus.PayConst.PRODUCT_TYPE_CHARGED_CARD;
/**
* MemberCardRenewServiceImpl 类,实现了 AddSellDetailService 接口,用于处理会员卡续卡的业务逻辑
*/
@Service
public class SellDetailChargedCard implements AddSellDetailService {
@Autowired
private MemberCardService memberCardService; // 用于操作会员卡相关业务
@Autowired
private SellDetailService sellDetailService; // 处理销售详情的服务
@Autowired
private PayService payService; // 支付相关的服务
@Autowired
private SellpayService sellpayService; // 销售支付的服务
@Autowired
private SellDetailServerService sellDetailServerService;
@Autowired
private CardService cardService;
/**
* 处理添加销售详情的方法
*
* @param sell 销售实体
* @param baseSell 基础销售数据
*/
@Override
public void addSellDetail(Sell sell, BaseSell baseSell) {
// 将基础销售数据转换为 ChargedCardSell 类型
ChargedCardSell chargedCardSell = (ChargedCardSell) baseSell;
// 通过会员卡服务根据会员卡号获取会员信息
MemberCard memberHistoryCard = memberCardService.getById(chargedCardSell.getMemberCardId());
// 执行会员卡续卡的核心逻辑,并获取续卡后的会员信息
MemberCard chargedMemberCard = chargedMemberCard(chargedCardSell, memberHistoryCard);
// 生成销售细单
SellDetail sellDetail = createSellDetail(chargedCardSell, sell, chargedMemberCard);
// 通过销售支付服务添加销售支付列表
sellpayService.addSellPayList(chargedCardSell.getSellPayList(), sell.getSellId());
// 通过支付服务设置销售的额外信息
payService.setSellExtraInfo(sell.getSellId(), chargedMemberCard, BigDecimal.ZERO, BigDecimal.ZERO);
}
/**
* 执行会员卡续卡的核心逻辑
*
* @param chargedCardSell 构建卡销售数据
* @param memberHistoryCard 原会员卡信息
* @return 续卡后的会员卡信息
*/
MemberCard chargedMemberCard(ChargedCardSell chargedCardSell, MemberCard memberHistoryCard) {
// 获取原会员卡卡内金额
BigDecimal memberBeforeAmount = memberHistoryCard.getAmount();
// 获取原会员卡赠送金额
BigDecimal memberBeforeGiveAmount = memberHistoryCard.getGiveAmount();
// 从构建卡销售数据中获取续卡表单
ChargedCardForm chargedCardForm = chargedCardSell.getChargedCardForm();
// 获取续卡充值金额
BigDecimal chargedAmount = chargedCardForm.getChargedCardAmount();
// 获取续卡赠送金额
BigDecimal chargedGiveAmount = chargedCardForm.getChargedGiveAmount();
// 计算并设置续卡后的卡内金额
memberHistoryCard.setAmount(BigDecimalUtil.add(memberBeforeAmount, chargedAmount));
// 计算并设置续卡后的赠送金额
memberHistoryCard.setGiveAmount(BigDecimalUtil.add(memberBeforeGiveAmount, chargedGiveAmount));
// 更新会员卡信息
Boolean updated = memberCardService.updateById(memberHistoryCard);
// 如果更新失败,抛出异常
if (!updated) {
throw new ApiException(CARD_AMOUNT_CHANGE);
}
return memberHistoryCard;
}
/**
* 创建销售细单
*
* @param chargedCardSell 构建卡销售数据
* @param sell 销售实体
* @param memberCard 会员卡信息
* @return 生成的销售细单
*/
SellDetail createSellDetail(ChargedCardSell chargedCardSell, Sell sell, MemberCard memberCard) {
// 从构建卡销售数据中获取续卡表单
ChargedCardForm chargedCardForm = chargedCardSell.getChargedCardForm();
// 创建新的销售细单对象
SellDetail sellDetail = new SellDetail();
// 设置销售细单的销售 ID
sellDetail.setSellId(sell.getSellId());
// 设置销售细单的销售类型
sellDetail.setSellType(sell.getSellType());
// 设置销售细单的会员 ID
sellDetail.setMemberId(sell.getMemberId());
// 设置销售细单的产品类型为续卡
sellDetail.setProductType(PRODUCT_TYPE_CHARGED_CARD);
// 设置销售细单的卡 ID
sellDetail.setCardId(chargedCardForm.getCardId());
// 设置销售细单的卡名称
sellDetail.setCardName(chargedCardForm.getCardName());
// 设置销售细单的续卡金额
sellDetail.setAmount(chargedCardForm.getChargedCardAmount());
// 设置销售细单的续卡赠送金额
sellDetail.setGiveAmount(chargedCardForm.getChargedGiveAmount());
// 设置销售细单的实际金额
sellDetail.setRealAmount(chargedCardForm.getChargedCardAmount());
sellDetail.setTotalRealAmount(chargedCardForm.getTotalRealAmount());
// 设置销售细单的会员卡号
sellDetail.setMemberCardId(memberCard.getMemberCardId());
// 保存销售细单
sellDetailService.save(sellDetail);
Card card = cardService.getById(chargedCardForm.getCardId());
//该条目有服务人员
List<ServerVo> serverList = chargedCardForm.getServerList();
if (CollectionUtil.isNotEmpty(serverList)) {
//如果是固定金额 固定金额除以人数 获取固定金额
//如果是比例 计算出比例后提成 获取固定金额
//业绩和提成均平均分
//总提成
BigDecimal totalPushMoney = BigDecimal.ZERO;
//总业绩 为订单实付金额
BigDecimal totalGradeMoney = sellDetail.getTotalRealAmount();
//固定金额的话
//按比例
if (card.getCardPushPercent() != null) {
//提成额 先转换为百分数
BigDecimal pushPercent = BigDecimalUtil.div(card.getCardPushPercent(), new BigDecimal("100"));
//折后价*百分数
totalPushMoney = BigDecimalUtil.mul(totalGradeMoney, pushPercent);
}
//平均分
BigDecimal pushMoney = BigDecimalUtil.div(totalPushMoney, new BigDecimal(serverList.size()));
BigDecimal gradeMoney = BigDecimalUtil.div(totalGradeMoney, new BigDecimal(serverList.size()));
//设置服务人员
serverList.stream().forEach(server -> {
SellDetailServer sellDetailServer = new SellDetailServer();
sellDetailServer.setSellId(sell.getSellId());
sellDetailServer.setSellDetailId(sellDetail.getSellDetailId());
sellDetailServer.setServerId(server.getServerId());
sellDetailServer.setServerName(server.getServerName());
sellDetailServer.setServerPushMoney(pushMoney);
sellDetailServer.setServerGrade(gradeMoney);
sellDetailServerService.save(sellDetailServer);
});
}
return sellDetail;
}
}

View File

@@ -0,0 +1,261 @@
package com.dd.admin.business.pay.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import com.dd.admin.business.card.entity.Card;
import com.dd.admin.business.card.service.CardService;
import com.dd.admin.business.detailServer.entity.SellDetailServer;
import com.dd.admin.business.detailServer.service.SellDetailServerService;
import com.dd.admin.business.memberCard.domain.MemberCardVo;
import com.dd.admin.business.memberCard.entity.MemberCard;
import com.dd.admin.business.memberCard.service.MemberCardService;
import com.dd.admin.business.pay.domain.*;
import com.dd.admin.business.pay.service.AddSellDetailService;
import com.dd.admin.business.pay.service.PayService;
import com.dd.admin.business.product.entity.Product;
import com.dd.admin.business.product.service.ProductService;
import com.dd.admin.business.sell.entity.Sell;
import com.dd.admin.business.sell.service.SellService;
import com.dd.admin.business.sellDetail.entity.SellDetail;
import com.dd.admin.business.sellDetail.service.SellDetailService;
import com.dd.admin.business.sellPay.entity.Sellpay;
import com.dd.admin.business.sellPay.service.SellpayService;
import com.dd.admin.business.server.domain.ServerVo;
import com.dd.admin.business.stock.entity.Stock;
import com.dd.admin.business.stock.service.StockService;
import com.dd.admin.business.stockDetail.entity.StockDetail;
import com.dd.admin.business.stockDetail.service.StockDetailService;
import com.dd.admin.common.exception.ApiException;
import com.dd.admin.common.security.SecurityUtil;
import com.dd.admin.common.utils.BigDecimalUtil;
import com.dd.admin.common.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import static com.dd.admin.business.pay.enmus.CashierExceptionEnum.*;
import static com.dd.admin.business.pay.enmus.PayConst.*;
import static com.dd.admin.common.consts.MemberShopConst.*;
@Service
public class SellDetailMemberProduct implements AddSellDetailService {
@Autowired
private MemberCardService memberCardService;
@Autowired
private SellDetailService sellDetailService;
@Autowired
private SellpayService sellpayService;
@Autowired
private PayService payService;
@Autowired
private ProductService productService;
@Autowired
private StockService stockService;
@Autowired
private StockDetailService stockDetailService;
@Autowired
private SellDetailServerService sellDetailServerService;
@Override
public void addSellDetail(Sell sell, BaseSell sellDto) {
MemberProductSell memberProductSell = (MemberProductSell) sellDto;
String memberCardId = memberProductSell.getMemberCardId();
MemberCard memberCard = null;
BigDecimal memberBeforeAmount = null;
BigDecimal memberBeforeGiveAmount = null;
//如果有会员卡
if(StringUtil.isNotEmpty(memberCardId)){
//先获取消费前前金额
MemberCard memberHistoryCard = memberCardService.getById(memberCardId);
memberBeforeAmount = memberHistoryCard.getAmount();
memberBeforeGiveAmount = memberHistoryCard.getGiveAmount();
//扣款
memberCard = deductMemberCard(memberHistoryCard,memberProductSell.getSellPayList());
}
//添加支付方式
sellpayService.addSellPayList(memberProductSell.getSellPayList(),sell.getSellId());
//订单详情
List<SellDetail> selldetailList = new ArrayList<>();
//获取订单详情
List<ProductForm> productDetailFormList = memberProductSell.getProductFormList();
MemberCard finalMemberCard = memberCard;
//设置细单会员余额
BigDecimal finalMemberBeforeAmount = memberBeforeAmount;
BigDecimal finalMemberBeforeGiveAmount = memberBeforeGiveAmount;
productDetailFormList.stream().forEach(productSellDetail -> {
SellDetail selldetail = addSellDetail(productSellDetail,sell, finalMemberCard, finalMemberBeforeAmount, finalMemberBeforeGiveAmount);
selldetailList.add(selldetail);
});
payService.setSellExtraInfo(sell.getSellId(),memberCard,memberBeforeAmount,memberBeforeGiveAmount);
}
//添加详情
SellDetail addSellDetail(ProductForm productDetail , Sell sell, MemberCard memberCard,BigDecimal memberBeforeAmount,BigDecimal memberBeforeGiveAmount ){
SellDetail sellDetail = new SellDetail();
//3设置订单id 订单类型 订单状态
sellDetail.setSellId(sell.getSellId());
sellDetail.setSellType(sell.getSellType());
sellDetail.setSellStatus(sell.getSellStatus());
sellDetail.setMemberId(sell.getMemberId());
//设置商品信息
sellDetail.setProductType(PRODUCT_TYPE_PRODUCT);
sellDetail.setProductId(productDetail.getProductId());
sellDetail.setProductName(productDetail.getProductName());
sellDetail.setAmount(productDetail.getProductAmount());
sellDetail.setDiscount(productDetail.getDiscount());
sellDetail.setCount(productDetail.getCount());
sellDetail.setRealAmount(productDetail.getRealAmount());
sellDetail.setTotalRealAmount(productDetail.getTotalRealAmount());
//设置会员信息
if(memberCard!=null){
sellDetail.setCardId(memberCard.getCardId());
sellDetail.setMemberCardId(memberCard.getMemberCardId());
}
Product product = productService.getById(productDetail.getProductId());
//减去库存信息
if(product.getStockControl().equals(STOCK_CONTROL_YES)) {
//创建入库总单
Stock stock = new Stock();
stock.setStockOutType(STOCK_OUT_TYPE_USE);
stock.setStockTitle(DateUtil.formatChineseDate(new Date(), false, true) + SecurityUtil.getLoginUser().getDeptName() + "出库单");
stock.setStockNo(StringUtil.getDateStringNow() + StringUtil.createCode(4));
stock.setStockType(STOCK_OUT);
stockService.save(stock);
StockDetail stockDetail = new StockDetail();
stockDetail.setStockId(stock.getStockId());
stockDetail.setProductId(product.getProductId());
stockDetail.setProductName(product.getProductName());
stockDetail.setCount(productDetail.getCount());
productService.subProductCount(product.getProductId(), productDetail.getCount());
stockDetailService.save(stockDetail);
}
sellDetailService.save(sellDetail);
//该条目有服务人员
List<ServerVo> serverList = productDetail.getServerList();
if(CollectionUtil.isNotEmpty(serverList)) {
//如果是固定金额 固定金额除以人数 获取固定金额
//如果是比例 计算出比例后提成 获取固定金额
//业绩和提成均平均分
//总提成
BigDecimal totalPushMoney = BigDecimal.ZERO;
//总业绩 为订单实付金额
BigDecimal totalGradeMoney = sellDetail.getTotalRealAmount();
//固定金额的话
if (product.getPushType().equals(PUSH_FIXED)) {
totalPushMoney = BigDecimalUtil.mul(product.getPushAmount(),new BigDecimal(sellDetail.getCount()));
}
//按比例
if (product.getPushType().equals(PUSH_SCALE)) {
//提成额 先转换为百分数
BigDecimal pushPercent = BigDecimalUtil.div(product.getPushPercent(), new BigDecimal("100"));
//折后价*百分数
totalPushMoney = BigDecimalUtil.mul(totalGradeMoney, pushPercent);
}
//平均分
BigDecimal pushMoney = BigDecimalUtil.div(totalPushMoney, new BigDecimal(serverList.size()));
BigDecimal gradeMoney = BigDecimalUtil.div(totalGradeMoney, new BigDecimal(serverList.size()));
//设置服务人员
serverList.stream().forEach(server -> {
SellDetailServer sellDetailServer = new SellDetailServer();
sellDetailServer.setSellId(sell.getSellId());
sellDetailServer.setSellDetailId(sellDetail.getSellDetailId());
sellDetailServer.setServerId(server.getServerId());
sellDetailServer.setServerName(server.getServerName());
sellDetailServer.setServerPushMoney(pushMoney);
sellDetailServer.setServerGrade(gradeMoney);
sellDetailServerService.save(sellDetailServer);
});
}
return sellDetail;
}
//减去卡金
MemberCard deductMemberCard(MemberCard memberHistoryCard, List<Sellpay> sellPayList){
//消费前会员卡余额
BigDecimal memberBeforeAmount = memberHistoryCard.getAmount();
BigDecimal memberBeforeGiveAmount = memberHistoryCard.getGiveAmount();
BigDecimal memberBeforeTotalAmount = BigDecimalUtil.add(memberBeforeAmount,memberBeforeGiveAmount);
//订单需要支付的卡金
BigDecimal memberCardCost = sellPayList.stream()
.filter(p -> p.getPayType().equals(PAY_TYPE_CARD))
.map(Sellpay::getAmount)
.findFirst().orElse(BigDecimal.ZERO);
//订单需要支付的金额 先扣卡金 退款仅退卡金
//如果卡金足够支付
try {
if(memberBeforeAmount.compareTo(memberCardCost) > -1){
BigDecimal memberAfterAmount = BigDecimalUtil.sub(memberBeforeAmount, memberCardCost);
memberHistoryCard.setAmount(memberAfterAmount);
//卡总金额是否够支付
}else if(memberBeforeTotalAmount.compareTo(memberCardCost) > -1){
//这里已经出现了卡金不够支付的情况了 所以置为0 减去的金额是赠送金需要支付的
BigDecimal memberCardGiveCost = BigDecimalUtil.sub(memberCardCost, memberBeforeAmount);
sellPayList.stream().forEach(sellpay -> {
if(sellpay.getPayType().equals(PAY_TYPE_CARD)){
sellpay.setAmount(memberBeforeAmount);
}
});
memberHistoryCard.setAmount(BigDecimal.ZERO);
if(memberBeforeGiveAmount.compareTo(memberCardGiveCost) > -1){
Sellpay sellpay = new Sellpay();
sellpay.setPayType(PAY_TYPE_CARD_GIVE);
sellpay.setAmount(memberCardGiveCost);
sellpay.setPayName(PAY_TYPE_CARD_GIVE_NAME);
sellPayList.add(sellpay);
BigDecimal memAfterGiveAmount = BigDecimalUtil.sub(memberBeforeGiveAmount, memberCardGiveCost);
memberHistoryCard.setGiveAmount(memAfterGiveAmount);
}
}else{
throw new ApiException(MEMBER_CARD_NOT_SUFFICIENT_FUNDS);
}
Boolean b = memberCardService.updateById(memberHistoryCard);
//监听数据 乐观锁改变
if(!b){
throw new ApiException(CARD_AMOUNT_CHANGE);
}
}catch (ArithmeticException e) {
// 处理数值计算异常,并提供更详细的错误信息
throw new RuntimeException("数值计算出现异常:" + e.getMessage(), e);
}
return memberHistoryCard;
}
}

View File

@@ -0,0 +1,107 @@
package com.dd.admin.business.product.controller;
import cn.hutool.core.bean.BeanUtil;
import com.dd.admin.business.file.service.FileService;
import com.dd.admin.common.aop.operationLog.aop.OperLog;
import com.dd.admin.common.aop.operationLog.aop.OperType;
import com.dd.admin.common.security.SecurityUtil;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.dd.admin.common.model.UpdateGroup;
import com.dd.admin.common.model.result.ResultBean;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotBlank;
import com.dd.admin.business.product.entity.Product;
import com.dd.admin.business.product.domain.ProductVo;
import com.dd.admin.business.product.domain.ProductDto;
import com.dd.admin.business.product.service.ProductService;
import java.util.List;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 商品 前端控制器
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-23
*/
@Api(tags = "商品")
@RestController
public class ProductController {
@Autowired
ProductService productService;
@Autowired
FileService fileService;
@ApiOperation(value = "商品-分页列表")
@ApiOperationSupport(order = 1)
@GetMapping("/admin/product/page")
@OperLog(operModule = "获取商品列表",operType = OperType.QUERY,operDesc = "获取商品列表")
public ResultBean<IPage<ProductVo>> page(ProductDto productDto) {
productDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
IPage<ProductVo> pageInfo = productService.selectProductPage(productDto);
pageInfo.getRecords().stream().forEach(productVo -> {
String fileAuthUrl = fileService.getFileAuthUrl(productVo.getProductImage());
productVo.setProductImageUrl(fileAuthUrl);
});
return ResultBean.success(pageInfo);
}
@ApiOperation(value = "商品-列表")
@ApiOperationSupport(order = 2)
@GetMapping("/admin/product/list")
public ResultBean<List<ProductVo>> list(ProductDto productDto) {
productDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
List<ProductVo> list = productService.selectProductList(productDto);
list.stream().forEach(productVo -> {
String fileAuthUrl = fileService.getFileAuthUrl(productVo.getProductImage());
productVo.setProductImageUrl(fileAuthUrl);
});
return ResultBean.success(list);
}
@ApiOperation(value = "商品-添加")
@ApiOperationSupport(order = 3)
@PostMapping("/admin/product/add")
@OperLog(operModule = "商品-添加",operType = OperType.ADD,operDesc = "商品-添加")
public ResultBean<Product> add(@RequestBody @Validated ProductDto productDto) {
Product product = BeanUtil.copyProperties(productDto, Product.class);
productService.save(product);
return ResultBean.success(product);
}
@ApiOperation(value = "商品-查询")
@ApiOperationSupport(order = 4)
@GetMapping("/admin/product/{productId}")
public ResultBean<ProductVo> get(@PathVariable @NotBlank String productId) {
Product product = productService.getById(productId);
ProductVo productVo = BeanUtil.copyProperties(product,ProductVo.class);
return ResultBean.success(productVo);
}
@ApiOperation(value = "商品-修改")
@ApiOperationSupport(order = 5)
@PostMapping("/admin/product/update")
public ResultBean<Product> update(@RequestBody @Validated(UpdateGroup.class) ProductDto productDto) {
Product product = BeanUtil.copyProperties(productDto, Product.class);
productService.updateById(product);
return ResultBean.success(product);
}
@ApiOperation(value = "商品-删除")
@ApiOperationSupport(order = 6)
@GetMapping("/admin/product/delete/{productId}")
public ResultBean<Product> delete(@PathVariable @NotBlank String productId) {
Boolean b = productService.removeById(productId);
return ResultBean.success(b);
}
}

View File

@@ -0,0 +1,114 @@
package com.dd.admin.business.product.domain;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import com.dd.admin.common.model.UpdateGroup;
/**
* <p>
* 商品返回对象
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-23
*/
@Data
@ApiModel(value="商品接收对象")
public class ProductDto {
@ApiModelProperty(value = "商品id")
@NotBlank(message = "商品id不能为空",groups = UpdateGroup.class)
private String productId;
@ApiModelProperty(value = "分类id")
@NotBlank(message = "分类不能为空")
private String categoryId;
@ApiModelProperty(value = "分类名")
@NotBlank(message = "分类不能为空")
private String categoryName;
@ApiModelProperty(value = "商品名")
@NotBlank(message = "商品名不能为空")
private String productName;
@ApiModelProperty(value = "商品金额")
private BigDecimal productAmount;
@ApiModelProperty(value = "商品会员金额")
private BigDecimal productMemberAmount;
@ApiModelProperty(value = "商品图片")
private String productImage;
@ApiModelProperty(value = "库存数量")
private Long productCount;
@ApiModelProperty(value = "提成金额")
private BigDecimal pushAmount;
@ApiModelProperty(value = "提成比例")
private BigDecimal pushPercent;
@ApiModelProperty(value = "0正常 1下架")
private Integer productStatus;
@ApiModelProperty(value = "乐观锁字段")
private Long version;
@ApiModelProperty(value = "0正常 1删除")
private Integer deleted;
@ApiModelProperty(value = "门店id")
private String shopId;
@ApiModelProperty(value = "门店名")
private String shopName;
@ApiModelProperty(value = "创建人")
private String createName;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人id")
private String createId;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "修改人")
private String updateName;
@ApiModelProperty(value = "修改人id")
private String updateId;
@ApiModelProperty(value = "0不开启 1开启")
@NotNull(message = "库存管理不能为空")
private Integer stockControl;
@ApiModelProperty(value = "0固定金额 1比例")
@NotNull(message = "提成规则不能为空")
private Integer pushType;
@ApiModelProperty(value = "搜索关键字")
private String keyword;
}

View File

@@ -0,0 +1,105 @@
package com.dd.admin.business.product.domain;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
/**
* <p>
* 商品返回对象
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-23
*/
@Data
@ApiModel(value="商品返回对象")
public class ProductVo {
@ApiModelProperty(value = "商品id")
private String productId;
@ApiModelProperty(value = "分类id")
private String categoryId;
@ApiModelProperty(value = "分类名")
private String categoryName;
@ApiModelProperty(value = "商品名")
private String productName;
@ApiModelProperty(value = "商品金额")
private BigDecimal productAmount;
@ApiModelProperty(value = "商品会员金额")
private BigDecimal productMemberAmount;
@ApiModelProperty(value = "商品图片")
private String productImage;
@ApiModelProperty(value = "商品图片")
private String productImageUrl;
@ApiModelProperty(value = "库存数量")
private Long productCount;
@ApiModelProperty(value = "提成金额")
private BigDecimal pushAmount;
@ApiModelProperty(value = "提成比例")
private BigDecimal pushPercent;
@ApiModelProperty(value = "0正常 1下架")
private Integer productStatus;
@ApiModelProperty(value = "乐观锁字段")
private Long version;
@ApiModelProperty(value = "0正常 1删除")
private Integer deleted;
@ApiModelProperty(value = "门店id")
private String shopId;
@ApiModelProperty(value = "门店名")
private String shopName;
@ApiModelProperty(value = "创建人")
private String createName;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人id")
private String createId;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "修改人")
private String updateName;
@ApiModelProperty(value = "修改人id")
private String updateId;
@ApiModelProperty(value = "0不开启 1开启")
private Integer stockControl;
@ApiModelProperty(value = "0固定金额 1比例")
private Integer pushType;
}

View File

@@ -0,0 +1,132 @@
package com.dd.admin.business.product.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 商品
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-23
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("business_product")
@ApiModel(value="Product对象", description="商品")
public class Product implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "商品id")
@TableId(value = "PRODUCT_ID", type = IdType.ASSIGN_UUID)
private String productId;
@ApiModelProperty(value = "分类id")
@TableField("CATEGORY_ID")
private String categoryId;
@ApiModelProperty(value = "分类名")
@TableField("CATEGORY_NAME")
private String categoryName;
@ApiModelProperty(value = "商品名")
@TableField("PRODUCT_NAME")
private String productName;
@ApiModelProperty(value = "商品金额")
@TableField("PRODUCT_AMOUNT")
private BigDecimal productAmount;
@ApiModelProperty(value = "商品会员金额")
@TableField("PRODUCT_MEMBER_AMOUNT")
private BigDecimal productMemberAmount;
@ApiModelProperty(value = "商品图片")
@TableField("PRODUCT_IMAGE")
private String productImage;
@ApiModelProperty(value = "库存数量")
@TableField("PRODUCT_COUNT")
private Long productCount;
@ApiModelProperty(value = "库存数量")
@TableField(exist = false)
private Long count;
@ApiModelProperty(value = "提成金额")
@TableField("PUSH_AMOUNT")
private BigDecimal pushAmount;
@ApiModelProperty(value = "提成比例")
@TableField("PUSH_PERCENT")
private BigDecimal pushPercent;
@ApiModelProperty(value = "0正常 1下架")
@TableField("PRODUCT_STATUS")
private Integer productStatus;
@ApiModelProperty(value = "乐观锁字段")
@TableField("VERSION")
@Version
private Long version;
@ApiModelProperty(value = "0正常 1删除")
@TableField("DELETED")
@TableLogic
private Integer deleted;
@ApiModelProperty(value = "门店id")
@TableField(value = "SHOP_ID", fill = FieldFill.INSERT)
private String shopId;
@ApiModelProperty(value = "门店名")
@TableField(value = "SHOP_NAME", fill = FieldFill.INSERT)
private String shopName;
@ApiModelProperty(value = "创建人")
@TableField(value = "CREATE_NAME", fill = FieldFill.INSERT)
private String createName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "创建人id")
@TableField(value = "CREATE_ID", fill = FieldFill.INSERT)
private String createId;
@ApiModelProperty(value = "修改时间")
@TableField(value = "UPDATE_TIME", fill = FieldFill.UPDATE)
private Date updateTime;
@ApiModelProperty(value = "修改人")
@TableField(value = "UPDATE_NAME", fill = FieldFill.UPDATE)
private String updateName;
@ApiModelProperty(value = "修改人id")
@TableField(value = "UPDATE_ID", fill = FieldFill.UPDATE)
private String updateId;
@ApiModelProperty(value = "0不开启 1开启")
@TableField("STOCK_CONTROL")
private Integer stockControl;
@ApiModelProperty(value = "0固定金额 1比例")
@TableField("PUSH_TYPE")
private Integer pushType;
}

View File

@@ -0,0 +1,28 @@
package com.dd.admin.business.product.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.admin.business.product.entity.Product;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dd.admin.business.product.domain.ProductVo;
import com.dd.admin.business.product.domain.ProductDto;
import java.util.List;
/**
* <p>
* 商品 Mapper 接口
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-23
*/
@Mapper
public interface ProductMapper extends BaseMapper<Product> {
IPage<ProductVo> selectProductPage(Page<ProductVo> page, @Param("productDto") ProductDto productDto);
List<ProductVo> selectProductList(@Param("productDto") ProductDto productDto);
}

View File

@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dd.admin.business.product.mapper.ProductMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.dd.admin.business.product.entity.Product">
<id column="PRODUCT_ID" property="productId" />
<result column="CATEGORY_ID" property="categoryId" />
<result column="CATEGORY_NAME" property="categoryName" />
<result column="PRODUCT_NAME" property="productName" />
<result column="PRODUCT_AMOUNT" property="productAmount" />
<result column="PRODUCT_MEMBER_AMOUNT" property="productMemberAmount" />
<result column="PRODUCT_IMAGE" property="productImage" />
<result column="PRODUCT_COUNT" property="productCount" />
<result column="PUSH_AMOUNT" property="pushAmount" />
<result column="PUSH_PERCENT" property="pushPercent" />
<result column="PRODUCT_STATUS" property="productStatus" />
<result column="VERSION" property="version" />
<result column="DELETED" property="deleted" />
<result column="SHOP_ID" property="shopId" />
<result column="SHOP_NAME" property="shopName" />
<result column="CREATE_NAME" property="createName" />
<result column="CREATE_TIME" property="createTime" />
<result column="CREATE_ID" property="createId" />
<result column="UPDATE_TIME" property="updateTime" />
<result column="UPDATE_NAME" property="updateName" />
<result column="UPDATE_ID" property="updateId" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
PRODUCT_ID, CATEGORY_ID, CATEGORY_NAME, PRODUCT_NAME, PRODUCT_AMOUNT, PRODUCT_MEMBER_AMOUNT, PRODUCT_IMAGE, PRODUCT_COUNT, PUSH_AMOUNT, PUSH_PERCENT, PRODUCT_STATUS, VERSION, DELETED, SHOP_ID, SHOP_NAME, CREATE_NAME, CREATE_TIME, CREATE_ID, UPDATE_TIME, UPDATE_NAME, UPDATE_ID
</sql>
<select id="selectProductPage" resultType="com.dd.admin.business.product.domain.ProductVo">
select
*
from business_product where 1 = 1
<if test="productDto.keyword != null and productDto.keyword != ''">
and PRODUCT_NAME like CONCAT('%', #{productDto.keyword}, '%')
</if>
<if test="productDto.categoryId != null and productDto.categoryId != ''">
and CATEGORY_ID = #{productDto.categoryId}
</if>
<if test="productDto.deleted != null">
and DELETED = #{productDto.deleted}
</if>
<if test="productDto.stockControl != null">
and STOCK_CONTROL = #{productDto.stockControl}
</if>
<if test="productDto.productStatus != null">
and PRODUCT_STATUS = #{productDto.productStatus}
</if>
<if test="productDto.shopId != null and productDto.shopId != ''">
and shop_id = #{productDto.shopId}
</if>
order by create_time desc
</select>
<select id="selectProductList" resultType="com.dd.admin.business.product.domain.ProductVo">
select
*
from business_product where 1 = 1
<if test="productDto.categoryId != null and productDto.categoryId != ''">
and category_id = #{productDto.categoryId}
</if>
<if test="productDto.deleted != null">
and DELETED = #{productDto.deleted}
</if>
<if test="productDto.stockControl != null">
and STOCK_CONTROL = #{productDto.stockControl}
</if>
<if test="productDto.shopId != null and productDto.shopId != ''">
and shop_id = #{productDto.shopId}
</if>
<if test="productDto.productStatus != null">
and PRODUCT_STATUS = #{productDto.productStatus}
</if>
order by create_time desc
</select>
</mapper>

View File

@@ -0,0 +1,34 @@
package com.dd.admin.business.product.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dd.admin.business.product.entity.Product;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dd.admin.business.product.domain.ProductVo;
import com.dd.admin.business.product.domain.ProductDto;
import java.util.List;
/**
* <p>
* 商品 服务类
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-23
*/
public interface ProductService extends IService<Product> {
//商品-分页列表
IPage<ProductVo> selectProductPage(ProductDto productDto);
//商品-列表
List<ProductVo> selectProductList(ProductDto productDto);
Product addProductCount(String productId,Long count);
Product subProductCount(String productId,Long count);
//根据机构shopId查询商品库存数量排行可指定返回数量
List<Product> getProductStockRankByShopId(String shopId, Integer limit);
Integer selectProductCount(String shopId);
}

View File

@@ -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;
/**
* <p>
* 商品 服务实现类
* </p>
*
* @author 727869402@qq.com
* @since 2024-05-23
*/
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
@Override
public IPage<ProductVo> selectProductPage(ProductDto productDto) {
Page page = PageFactory.defaultPage();
return baseMapper.selectProductPage(page,productDto);
}
@Override
public List<ProductVo> 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<Product> getProductStockRankByShopId(String shopId, Integer limit) {
LambdaQueryWrapper<Product> 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<Product> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Product::getShopId, shopId);
return baseMapper.selectCount(queryWrapper);
}
}

View File

@@ -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;
/**
* <p>
* 订单 前端控制器
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-19
*/
@Api(tags = "订单")
@RestController
public class SellController {
@Autowired
SellService sellService;
@Autowired
Map<String, CancelSellService> cancelSellServiceMap;
@Autowired
SellDetailService sellDetailService;
@ApiOperation(value = "订单-分页列表")
@ApiOperationSupport(order = 1)
@GetMapping("/admin/sell/page")
@OperLog(operModule = "获取订单列表",operType = OperType.QUERY,operDesc = "获取订单列表")
public ResultBean<IPage<SellVo>> page(SellDto sellDto) {
sellDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
IPage<SellVo> pageInfo = sellService.selectSellPage(sellDto);
sellService.setSellDetail(pageInfo.getRecords());
return ResultBean.success(pageInfo);
}
@ApiOperation(value = "订单-列表")
@ApiOperationSupport(order = 2)
@GetMapping("/admin/sell/list")
public ResultBean<List<SellVo>> list(SellDto sellDto) {
sellDto.setShopId(SecurityUtil.getLoginUser().getDeptId());
List<SellVo> list = sellService.selectSellList(sellDto);
return ResultBean.success(list);
}
@ApiOperation(value = "订单-添加")
@ApiOperationSupport(order = 3)
@PostMapping("/admin/sell/add")
public ResultBean<Sell> 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<SellVo> 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<Sell> 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<Sell> 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<Sell> 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();
}
}

View File

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

View File

@@ -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;
/**
* <p>
* 订单返回对象
* </p>
*
* @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;
}

View File

@@ -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;
/**
* <p>
* 订单返回对象
* </p>
*
* @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<SellDetail> sellDetailList;
@ApiModelProperty("支付方式")
private List<Sellpay> sellPayList;
@ApiModelProperty(value = "备注")
private String remark;
}

View File

@@ -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;
/**
* <p>
* 订单
* </p>
*
* @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;
}

View File

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

View File

@@ -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;
/**
* <p>
* 订单 Mapper 接口
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-19
*/
@Mapper
public interface SellMapper extends BaseMapper<Sell> {
IPage<SellVo> selectSellPage(Page<SellVo> page, @Param("sellDto") SellDto sellDto);
List<SellVo> selectSellList(@Param("sellDto") SellDto sellDto);
Integer selectTodayCount(@Param("shopId") String shopId);
}

View File

@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dd.admin.business.sell.mapper.SellMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.dd.admin.business.sell.entity.Sell">
<id column="SELL_ID" property="sellId" />
<result column="SELL_NO" property="sellNo" />
<result column="SERIAL_NO" property="serialNo" />
<result column="MEMBER_ID" property="memberId" />
<result column="MEMBER_NAME" property="memberName" />
<result column="SELL_AMOUNT" property="sellAmount" />
<result column="REAL_AMOUNT" property="realAmount" />
<result column="SELL_TYPE" property="sellType" />
<result column="SELL_STATUS" property="sellStatus" />
<result column="DELETED" property="deleted" />
<result column="VERSION" property="version" />
<result column="SHOP_ID" property="shopId" />
<result column="SHOP_NAME" property="shopName" />
<result column="CREATE_NAME" property="createName" />
<result column="CREATE_TIME" property="createTime" />
<result column="CREATE_ID" property="createId" />
<result column="UPDATE_TIME" property="updateTime" />
<result column="UPDATE_NAME" property="updateName" />
<result column="UPDATE_ID" property="updateId" />
<result column="MEMBER_CARD_AFTER_AMOUNT" property="memberCardAfterAmount" />
<result column="MEMBER_CARD_BEFORE_AMOUNT" property="memberCardBeforeAmount" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
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
</sql>
<select id="selectSellPage" resultType="com.dd.admin.business.sell.domain.SellVo">
select
*
from business_sell where 1 = 1
<if test="sellDto.shopId != null and sellDto.shopId != ''">
and shop_id = #{sellDto.shopId}
</if>
<if test="sellDto.keyword != null and sellDto.keyword != ''">
and (SELL_NO like CONCAT('%', #{sellDto.keyword}, '%')
or MEMBER_NAME like concat('%',#{sellDto.keyword},'%'))
</if>
order by create_time desc
</select>
<select id="selectSellList" resultType="com.dd.admin.business.sell.domain.SellVo">
select
*
from business_sell where 1 = 1
<if test="sellDto.shopId != null and sellDto.shopId != ''">
and shop_id = #{sellDto.shopId}
</if>
order by create_time desc
</select>
<select id="selectTodayCount" resultType="java.lang.Integer">
select count(*) from business_sell where shop_id = #{shopId} and DATE(create_time) = CURDATE()
</select>
</mapper>

View File

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

View File

@@ -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;
/**
* <p>
* 订单 服务类
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-19
*/
public interface SellService extends IService<Sell> {
//订单-分页列表
IPage<SellVo> selectSellPage(SellDto sellDto);
//订单-列表
List<SellVo> selectSellList(SellDto sellDto);
Integer selectTodayCount(String shopId);
//填充销售详情
public void setSellDetail(List<SellVo> sellVoList);
Integer selectSellCount(String shopId);
}

View File

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

View File

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

View File

@@ -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<SellDetail> 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<Sellpay> 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<SellDetail> productDetailList){
List<StockDetail> 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);
}
}
}

View File

@@ -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;
/**
* <p>
* 订单 服务实现类
* </p>
*
* @author 727869402@qq.com
* @since 2024-06-19
*/
@Service
public class SellServiceImpl extends ServiceImpl<SellMapper, Sell> implements SellService {
@Autowired
private SellDetailService sellDetailService;
@Autowired
private SellpayService sellpayService;
@Autowired
private SellDetailServerService sellDetailServerService;
@Override
public IPage<SellVo> selectSellPage(SellDto sellDto) {
Page page = PageFactory.defaultPage();
return baseMapper.selectSellPage(page,sellDto);
}
@Override
public List<SellVo> selectSellList(SellDto sellDto) {
return baseMapper.selectSellList(sellDto);
}
@Override
public Integer selectTodayCount(String shopId) {
return baseMapper.selectTodayCount(shopId);
}
@Override//TODO
public void setSellDetail(List<SellVo> sellVoList) {
List<String> sellIds = sellVoList.stream().map(SellVo::getSellId).collect(Collectors.toList());
// 使用 MyBatis Plus 的条件构造器查询 SelldetailVo 列表
List<SellDetail> sellDetailList = sellDetailService.selectSellDetailList(sellIds);
List<Sellpay> sellpayList = sellpayService.selectSellPayList(sellIds);
List<String> sellDetailIds = sellDetailList.stream().map(sellDetail -> sellDetail.getSellDetailId()).collect(Collectors.toList());
List<SellDetailServer> sellDetailServers = sellDetailServerService.selectSellDetailServerListBySellDetailIds(sellDetailIds);
// 获得所有的消费总单
sellVoList.forEach(sellVo -> {
List<SellDetail> selldetails = sellDetailList.stream()
.filter(selldetail -> sellVo.getSellId().equals(selldetail.getSellId()))
.collect(Collectors.toList());
selldetails.stream().forEach(sellDetail -> {
List<SellDetailServer> detailServerList = sellDetailServers.stream().filter(sellDetailServer -> sellDetail.getSellDetailId().equals(sellDetailServer.getSellDetailId())).collect(Collectors.toList());
sellDetail.setDetailServerList(detailServerList);
});
sellVo.setSellDetailList(selldetails);
List<Sellpay> sellpays = sellpayList.stream()
.filter(sellpay -> sellVo.getSellId().equals(sellpay.getSellId()))
.collect(Collectors.toList());
sellVo.setSellPayList(sellpays);
});
}
@Override
public Integer selectSellCount(String shopId) {
LambdaQueryWrapper<Sell> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Sell::getShopId, shopId);
return baseMapper.selectCount(queryWrapper);
}
}

View File

@@ -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;
/**
* <p>
* 订单详情 前端控制器
* </p>
*
* @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<IPage<SellDetailVo>> page(SellDetailDto sellDetailDto) {
IPage<SellDetailVo> pageInfo = sellDetailService.selectSellDetailPage(sellDetailDto);
return ResultBean.success(pageInfo);
}
@ApiOperation(value = "订单详情-列表")
@ApiOperationSupport(order = 2)
@GetMapping("/admin/sellDetail/list")
public ResultBean<List<SellDetailVo>> list(SellDetailDto sellDetailDto) {
List<SellDetailVo> list = sellDetailService.selectSellDetailList(sellDetailDto);
return ResultBean.success(list);
}
@ApiOperation(value = "订单详情-添加")
@ApiOperationSupport(order = 3)
@PostMapping("/admin/sellDetail/add")
public ResultBean<SellDetail> 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<SellDetailVo> 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<SellDetail> 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<SellDetail> delete(@PathVariable @NotBlank String sellDetailId) {
Boolean b = sellDetailService.removeById(sellDetailId);
return ResultBean.success(b);
}
}

View File

@@ -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;
/**
* <p>
* 订单详情返回对象
* </p>
*
* @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;
}

View File

@@ -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;
/**
* <p>
* 订单详情返回对象
* </p>
*
* @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;
}

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