Jelajahi Sumber

项目相关代码提交

wangzhijun 2 minggu lalu
induk
melakukan
f5cecd9adc

+ 57 - 0
nightFragrance-admin/src/main/java/com/ylx/web/controller/project/ProjectController.java

@@ -0,0 +1,57 @@
+package com.ylx.web.controller.project;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ylx.common.annotation.Log;
+import com.ylx.common.core.domain.R;
+import com.ylx.common.enums.BusinessType;
+import com.ylx.project.domain.Project;
+import com.ylx.project.domain.dto.ProjectAddDTO;
+import com.ylx.project.domain.dto.ProjectSearchDTO;
+import com.ylx.project.domain.dto.ProjectUpdateDTO;
+import com.ylx.project.domain.vo.ProjectPageVo;
+import com.ylx.project.service.ProjectService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/project")
+@Api(tags = {"项目相关"})
+@Slf4j
+public class ProjectController {
+
+    @Resource
+    private ProjectService projectService;
+
+    @PreAuthorize("@ss.hasPermi('project:list')")
+    @ApiOperation("根据条件分页查询项目")
+    @GetMapping("/page")
+    public R<Page<ProjectPageVo>> page(Page<Project> page, ProjectSearchDTO dto) {
+        Page<ProjectPageVo> pageData = this.projectService.list(page, dto);
+        return R.ok(pageData);
+    }
+
+    @PreAuthorize("@ss.hasPermi('project:edit')")
+    @ApiOperation("编辑项目")
+    @Log(title = "编辑项目", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public R<?> edit(@Validated @RequestBody ProjectUpdateDTO dto) {
+        this.projectService.edit(dto);
+        return R.ok();
+    }
+
+    @PreAuthorize("@ss.hasPermi('project:add')")
+    @ApiOperation("新增项目")
+    @Log(title = "新增项目", businessType = BusinessType.INSERT)
+    @PostMapping
+    public R<?> add(@Validated @RequestBody ProjectAddDTO dto) {
+        this.projectService.add(dto);
+        return R.ok();
+    }
+
+}

+ 69 - 0
nightFragrance-massage/src/main/java/com/ylx/project/domain/Project.java

@@ -0,0 +1,69 @@
+package com.ylx.project.domain;
+
+import com.ylx.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class Project extends BaseEntity {
+    private static final long serialVersionUID = -7825952120084009270L;
+
+    @ApiModelProperty("id")
+    private Long id;
+
+    @ApiModelProperty("标题")
+    private String cTitle;
+
+    @ApiModelProperty("项目分类")
+    private Integer type;
+
+    @ApiModelProperty("封面图")
+    private String cCover;
+
+    @ApiModelProperty("原价")
+    private BigDecimal dYuanPrice;
+
+    @ApiModelProperty("标注价格(现价)")
+    private BigDecimal dPrice;
+
+    @ApiModelProperty("市场参考价(起)")
+    private BigDecimal priceMin;
+
+    @ApiModelProperty("市场参考价(止)")
+    private BigDecimal priceMax;
+
+    @ApiModelProperty("商户分佣比例")
+    private BigDecimal merchantShareRatio;
+
+    @ApiModelProperty("标时")
+    private Integer standardDuration;
+
+    @ApiModelProperty("计量单位(字典数据)")
+    private Integer unitType;
+
+    @ApiModelProperty("状态: 0=上架, 1=下架")
+    private Integer status;
+
+    @ApiModelProperty("是否推荐:0=否,1=是")
+    private Integer isRecommended;
+
+    @ApiModelProperty("价格是否自定义:0=否,1=是")
+    private Integer isPriceCustom;
+
+    @ApiModelProperty("标时是否自定义:0=否,1=是")
+    private Integer isTimeCustom;
+
+    @ApiModelProperty("项目亮点:关联亮点字典表的ID集合")
+    private String highlightIds;
+
+    @ApiModelProperty("适用人群")
+    private String targetAudience;
+
+    @ApiModelProperty("前端展示排序")
+    private Long sortOrder;
+
+}

+ 188 - 0
nightFragrance-massage/src/main/java/com/ylx/project/domain/dto/ProjectAddDTO.java

@@ -0,0 +1,188 @@
+package com.ylx.project.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@ApiModel("项目新增DTO")
+public class ProjectAddDTO implements Serializable {
+    private static final long serialVersionUID = 862152570131989654L;
+
+    @ApiModelProperty("标题")
+    private String cTitle;
+
+    @ApiModelProperty("项目分类")
+    private Integer type;
+
+    @ApiModelProperty("封面图")
+    private String cCover;
+
+    @ApiModelProperty("原价")
+    private BigDecimal dYuanPrice;
+
+    @ApiModelProperty("标注价格(现价)")
+    private BigDecimal dPrice;
+
+    @ApiModelProperty("标注价格(现价)")
+    private BigDecimal priceMin;
+
+    @ApiModelProperty("标注价格(现价)")
+    private BigDecimal priceMax;
+
+    @ApiModelProperty("商户分佣比例")
+    private BigDecimal merchantShareRatio;
+
+    @ApiModelProperty("标时")
+    private Integer standardDuration;
+
+    @ApiModelProperty("计量单位(字典数据)")
+    private Integer unitType;
+
+    @ApiModelProperty("状态: 0=上架, 1=下架")
+    private Integer status;
+
+    @ApiModelProperty("是否推荐:0=否,1=是")
+    private Integer isRecommended;
+
+    @ApiModelProperty("价格是否自定义:0=否,1=是")
+    private Integer isPriceCustom;
+
+    @ApiModelProperty("标时是否自定义:0=否,1=是")
+    private Integer isTimeCustom;
+
+    @ApiModelProperty("项目亮点:关联亮点字典表的ID集合")
+    private String highlightIds;
+
+    @ApiModelProperty("适用人群")
+    private String targetAudience;
+
+    public String getcTitle() {
+        return cTitle;
+    }
+
+    public void setcTitle(String cTitle) {
+        this.cTitle = cTitle;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getcCover() {
+        return cCover;
+    }
+
+    public void setcCover(String cCover) {
+        this.cCover = cCover;
+    }
+
+    public BigDecimal getdYuanPrice() {
+        return dYuanPrice;
+    }
+
+    public void setdYuanPrice(BigDecimal dYuanPrice) {
+        this.dYuanPrice = dYuanPrice;
+    }
+
+    public BigDecimal getdPrice() {
+        return dPrice;
+    }
+
+    public void setdPrice(BigDecimal dPrice) {
+        this.dPrice = dPrice;
+    }
+
+    public BigDecimal getPriceMin() {
+        return priceMin;
+    }
+
+    public void setPriceMin(BigDecimal priceMin) {
+        this.priceMin = priceMin;
+    }
+
+    public BigDecimal getPriceMax() {
+        return priceMax;
+    }
+
+    public void setPriceMax(BigDecimal priceMax) {
+        this.priceMax = priceMax;
+    }
+
+    public BigDecimal getMerchantShareRatio() {
+        return merchantShareRatio;
+    }
+
+    public void setMerchantShareRatio(BigDecimal merchantShareRatio) {
+        this.merchantShareRatio = merchantShareRatio;
+    }
+
+    public Integer getStandardDuration() {
+        return standardDuration;
+    }
+
+    public void setStandardDuration(Integer standardDuration) {
+        this.standardDuration = standardDuration;
+    }
+
+    public Integer getUnitType() {
+        return unitType;
+    }
+
+    public void setUnitType(Integer unitType) {
+        this.unitType = unitType;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Integer getIsRecommended() {
+        return isRecommended;
+    }
+
+    public void setIsRecommended(Integer isRecommended) {
+        this.isRecommended = isRecommended;
+    }
+
+    public Integer getIsPriceCustom() {
+        return isPriceCustom;
+    }
+
+    public void setIsPriceCustom(Integer isPriceCustom) {
+        this.isPriceCustom = isPriceCustom;
+    }
+
+    public Integer getIsTimeCustom() {
+        return isTimeCustom;
+    }
+
+    public void setIsTimeCustom(Integer isTimeCustom) {
+        this.isTimeCustom = isTimeCustom;
+    }
+
+    public String getHighlightIds() {
+        return highlightIds;
+    }
+
+    public void setHighlightIds(String highlightIds) {
+        this.highlightIds = highlightIds;
+    }
+
+    public String getTargetAudience() {
+        return targetAudience;
+    }
+
+    public void setTargetAudience(String targetAudience) {
+        this.targetAudience = targetAudience;
+    }
+}

+ 19 - 0
nightFragrance-massage/src/main/java/com/ylx/project/domain/dto/ProjectSearchDTO.java

@@ -0,0 +1,19 @@
+package com.ylx.project.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel("项目分页查询DTO")
+public class ProjectSearchDTO implements Serializable {
+    private static final long serialVersionUID = -5571734478026852868L;
+
+    @ApiModelProperty("服务名称")
+    private String cTitle;
+
+    @ApiModelProperty("状态: 0=上架, 1=下架")
+    private Integer status;
+}

+ 19 - 0
nightFragrance-massage/src/main/java/com/ylx/project/domain/dto/ProjectUpdateDTO.java

@@ -0,0 +1,19 @@
+package com.ylx.project.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+@ApiModel("项目编辑DTO")
+public class ProjectUpdateDTO extends ProjectAddDTO implements Serializable {
+    private static final long serialVersionUID = -3968072909449484824L;
+
+    @NotNull(message = "项目ID不能为空")
+    @ApiModelProperty("id")
+    private Long id;
+
+}

+ 65 - 0
nightFragrance-massage/src/main/java/com/ylx/project/domain/vo/ProjectPageVo.java

@@ -0,0 +1,65 @@
+package com.ylx.project.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel("项目分页vo")
+public class ProjectPageVo implements Serializable {
+    private static final long serialVersionUID = -1987716391112070223L;
+
+    @ApiModelProperty("id")
+    private Long id;
+
+    @ApiModelProperty("标题")
+    private String cTitle;
+
+    @ApiModelProperty("项目分类")
+    private Integer type;
+
+    @ApiModelProperty("封面图")
+    private String cCover;
+
+    @ApiModelProperty("标注价格(现价)")
+    private BigDecimal dPrice;
+
+    @ApiModelProperty("市场参考价(起)")
+    private BigDecimal priceMin;
+
+    @ApiModelProperty("市场参考价(止)")
+    private BigDecimal priceMax;
+
+    @ApiModelProperty("标时")
+    private Integer standardDuration;
+
+    @ApiModelProperty("计量单位(字典数据)")
+    private Integer unitType;
+
+    @ApiModelProperty("状态: 0=上架, 1=下架")
+    private Integer status;
+
+    @ApiModelProperty("是否推荐:0=否,1=是")
+    private Integer isRecommended;
+
+    @ApiModelProperty("价格是否自定义:0=否,1=是")
+    private Integer isPriceCustom;
+
+    @ApiModelProperty("标时是否自定义:0=否,1=是")
+    private Integer isTimeCustom;
+
+    @ApiModelProperty("项目亮点:关联亮点字典表的ID集合")
+    private String highlightIds;
+
+    @ApiModelProperty("适用人群")
+    private String targetAudience;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+}

+ 7 - 0
nightFragrance-massage/src/main/java/com/ylx/project/mapper/ProjectMapper.java

@@ -0,0 +1,7 @@
+package com.ylx.project.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ylx.project.domain.Project;
+
+public interface ProjectMapper extends BaseMapper<Project> {
+}

+ 18 - 0
nightFragrance-massage/src/main/java/com/ylx/project/service/ProjectService.java

@@ -0,0 +1,18 @@
+package com.ylx.project.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ylx.project.domain.Project;
+import com.ylx.project.domain.dto.ProjectAddDTO;
+import com.ylx.project.domain.dto.ProjectSearchDTO;
+import com.ylx.project.domain.dto.ProjectUpdateDTO;
+import com.ylx.project.domain.vo.ProjectPageVo;
+
+public interface ProjectService extends IService<Project> {
+
+    Page<ProjectPageVo> list(Page<Project> page, ProjectSearchDTO dto);
+
+    void edit(ProjectUpdateDTO dto);
+
+    void add(ProjectAddDTO dto);
+}

+ 106 - 0
nightFragrance-massage/src/main/java/com/ylx/project/service/impl/ProjectServiceImpl.java

@@ -0,0 +1,106 @@
+package com.ylx.project.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ylx.common.exception.ServiceException;
+import com.ylx.common.utils.DateUtils;
+import com.ylx.common.utils.SecurityUtils;
+import com.ylx.point.domain.PointActivity;
+import com.ylx.point.domain.vo.PointActivityPageVo;
+import com.ylx.project.domain.Project;
+import com.ylx.project.domain.dto.ProjectAddDTO;
+import com.ylx.project.domain.dto.ProjectSearchDTO;
+import com.ylx.project.domain.dto.ProjectUpdateDTO;
+import com.ylx.project.domain.vo.ProjectPageVo;
+import com.ylx.project.mapper.ProjectMapper;
+import com.ylx.project.service.ProjectService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> implements ProjectService {
+
+    @Override
+    public Page<ProjectPageVo> list(Page<Project> page, ProjectSearchDTO dto) {
+
+        LambdaQueryWrapper<Project> queryWrapper = new LambdaQueryWrapper<>();
+        if (ObjectUtil.isNotNull(dto.getCTitle())) {
+            queryWrapper.like(Project::getCTitle, dto.getCTitle());
+        }
+        if (ObjectUtil.isNotEmpty(dto.getStatus())) {
+            queryWrapper.eq(Project::getStatus, dto.getStatus());
+        }
+        queryWrapper.orderByDesc(Project::getCreateTime)
+                .orderByDesc(Project::getSortOrder);
+        Page<ProjectPageVo> pageData = new Page<>();
+        pageData.setSize(page.getSize());
+        pageData.setCurrent(page.getCurrent());
+
+        Page<Project> projectPage = this.baseMapper.selectPage(page, queryWrapper);
+        if (ObjectUtil.isNotNull(projectPage) && CollectionUtil.isNotEmpty(projectPage.getRecords())) {
+            List<ProjectPageVo> voList = projectPage.getRecords().stream()
+                    .map(this::convertToVo) // 抽取转换方法
+                    .collect(Collectors.toList());
+            pageData.setRecords(voList);
+            pageData.setTotal(projectPage.getTotal());
+            pageData.setPages(projectPage.getPages());
+        }
+        return pageData;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void edit(ProjectUpdateDTO dto) {
+
+        Long id = dto.getId();
+        Project entity = this.getById(id);
+        if (ObjectUtil.isNull(entity)) {
+            throw new IllegalArgumentException("参数有误,活动不存在");
+        }
+
+        BeanUtil.copyProperties(dto, entity);
+        entity.setUpdateBy(SecurityUtils.getUsername());
+        entity.setUpdateTime(DateUtils.getNowDate());
+
+        boolean updateResult = this.updateById(entity);
+        if (!updateResult) {
+            throw new ServiceException("更新项目失败");
+        }
+
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void add(ProjectAddDTO dto) {
+
+        Project entity = new Project();
+        BeanUtil.copyProperties(dto, entity);
+
+        entity.setCreateBy(SecurityUtils.getUsername());
+        entity.setCreateTime(DateUtils.getNowDate());
+
+        boolean saveResult = this.save(entity);
+        if (!saveResult) {
+            throw new ServiceException("添加项目失败");
+        }
+
+    }
+
+    private ProjectPageVo convertToVo(Project entity) {
+        ProjectPageVo vo = new ProjectPageVo();
+        // 属性拷贝(推荐)
+        BeanUtil.copyProperties(entity, vo);
+        return vo;
+    }
+
+}

+ 8 - 0
nightFragrance-massage/src/main/resources/mapper/project/ProjectMapper.xml

@@ -0,0 +1,8 @@
+<?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.ylx.project.mapper.ProjectMapper">
+
+
+</mapper>