feat(foundations):新增区域服务 1.价格更新 2.状态更改 3.草稿删除 4.热门设置 的功能

This commit is contained in:
JIAN 2024-08-14 17:19:00 +08:00
parent 99b7fd6aca
commit 1db850a6cf
4 changed files with 254 additions and 0 deletions

View File

@ -6,11 +6,14 @@ import com.jzo2o.foundations.model.dto.request.ServeUpsertReqDTO;
import com.jzo2o.foundations.model.dto.response.ServeResDTO;
import com.jzo2o.foundations.service.IServeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
/**
@ -36,4 +39,60 @@ public class ServeController {
public void add(@RequestBody List<ServeUpsertReqDTO> serveItems) {
serveService.addBatch(serveItems);
}
@PutMapping("/{id}")
@ApiOperation("更新区域下的服务的价格")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "服务id", required = true, dataTypeClass = Long.class),
@ApiImplicitParam(name = "price", value = "价格", required = true, dataTypeClass = BigDecimal.class)
})
public void updatePrice(@PathVariable("id") Long id,
@RequestParam("price") BigDecimal price) {
serveService.updatePrice(id, price);
}
@PutMapping("/onSale/{id}")
@ApiOperation("区域服务上架")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "服务id", required = true, dataTypeClass = Long.class),
})
public void onSale(@PathVariable("id") Long id) {
serveService.updateOnSale(id);
}
@PutMapping("/offSale/{id}")
@ApiOperation("区域服务上架")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "服务id", required = true, dataTypeClass = Long.class),
})
public void offSale(@PathVariable("id") Long id) {
serveService.updateOffSale(id);
}
@DeleteMapping("/{id}")
@ApiOperation("删除区域下的服务")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "服务id", required = true, dataTypeClass = Long.class)
})
public void delete(@PathVariable("id") Long id) {
serveService.deleteById(id);
}
@PutMapping("/onHot/{id}")
@ApiOperation("设置区域服务热门")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "服务id", required = true, dataTypeClass = Long.class),
})
public void onHot(@PathVariable("id") Long id) {
serveService.updateOnHot(id);
}
@PutMapping("/offHot/{id}")
@ApiOperation("设置区域服务热门")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "服务id", required = true, dataTypeClass = Long.class),
})
public void offHot(@PathVariable("id") Long id) {
serveService.updateOffHot(id);
}
}

View File

@ -0,0 +1,25 @@
package com.jzo2o.foundations.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 热门状态枚举类
* @author JIAN
*/
@AllArgsConstructor
@Getter
public enum HotStatusEnum {
ON_HOT(1, "热门状态"),
OFF_HOT(0, "非热门状态");
private final int status;
private final String description;
public boolean equals(Integer status) {
return this.status == status;
}
public boolean equals(HotStatusEnum hotStatusEnum) {
return hotStatusEnum != null && hotStatusEnum.status == this.getStatus();
}
}

View File

@ -7,6 +7,7 @@ import com.jzo2o.foundations.model.dto.request.ServePageQueryReqDTO;
import com.jzo2o.foundations.model.dto.request.ServeUpsertReqDTO;
import com.jzo2o.foundations.model.dto.response.ServeResDTO;
import java.math.BigDecimal;
import java.util.List;
/**
@ -25,4 +26,34 @@ public interface IServeService extends IService<Serve> {
* @param serveItems 服务项集合
*/
void addBatch(List<ServeUpsertReqDTO> serveItems);
/**
* 更新指定服务id的价格
*/
Serve updatePrice(Long id, BigDecimal price);
/**
* 设置指定服务上架
*/
Serve updateOnSale(Long id);
/**
* 设置指定的服务下架
*/
Serve updateOffSale(Long id);
/**
* 删除指定的服务
*/
void deleteById(Long id);
/**
* 设置指定服务热门
*/
Serve updateOnHot(Long id);
/**
* 取消指定服务热门
*/
Serve updateOffHot(Long id);
}

View File

@ -1,11 +1,13 @@
package com.jzo2o.foundations.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jzo2o.common.expcetions.CommonException;
import com.jzo2o.common.expcetions.ForbiddenOperationException;
import com.jzo2o.common.model.PageResult;
import com.jzo2o.common.utils.BeanUtils;
import com.jzo2o.common.utils.ObjectUtils;
import com.jzo2o.foundations.enums.FoundationStatusEnum;
import com.jzo2o.foundations.enums.HotStatusEnum;
import com.jzo2o.foundations.mapper.RegionMapper;
import com.jzo2o.foundations.mapper.ServeItemMapper;
import com.jzo2o.foundations.mapper.ServeMapper;
@ -20,6 +22,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
/**
@ -64,6 +67,142 @@ public class ServeServiceImpl extends ServiceImpl<ServeMapper, Serve> implements
}
}
/**
* 根据id获取服务不存在则抛出异常
* @throws ForbiddenOperationException 拒绝异常
*/
private Serve getServeByIdIfExist(Long id) throws ForbiddenOperationException {
Serve serve = baseMapper.selectById(id);
if (ObjectUtils.isEmpty(serve)) {
throw new ForbiddenOperationException("所选服务不存在");
}
return serve;
}
@Override
@Transactional
public Serve updatePrice(Long id, BigDecimal price) {
// 区域服务检验
Serve serve = getServeByIdIfExist(id);
if (!lambdaUpdate()
.eq(Serve::getId, id)
.set(Serve::getPrice, price)
.update()) {
throw new CommonException("价格更新失败");
}
serve.setPrice(price);
return serve;
}
@Override
@Transactional
public Serve updateOnSale(Long id) {
// 区域服务检验
Serve serve = getServeByIdIfExist(id);
Integer saleStatus = serve.getSaleStatus();
if (!ObjectUtils.equal(saleStatus, FoundationStatusEnum.INIT.getStatus())
&& !ObjectUtils.equal(saleStatus, FoundationStatusEnum.DISABLE.getStatus())) {
throw new ForbiddenOperationException("草稿或下架状态才能上架");
}
Integer activeStatus = serveItemMapper.selectById(serve.getServeItemId()).getActiveStatus();
if (!ObjectUtils.equal(activeStatus, FoundationStatusEnum.ENABLE.getStatus())) {
throw new ForbiddenOperationException("对应的服务项未启用不能上架");
}
int enableStatus = FoundationStatusEnum.ENABLE.getStatus();
if (!lambdaUpdate()
.eq(Serve::getId, id)
.set(Serve::getSaleStatus, enableStatus)
.update()) {
throw new CommonException("状态更新失败");
}
serve.setSaleStatus(enableStatus);
return serve;
}
@Override
@Transactional
public Serve updateOffSale(Long id) {
// 区域服务检验
Serve serve = getServeByIdIfExist(id);
Integer saleStatus = serve.getSaleStatus();
if (!ObjectUtils.equal(saleStatus, FoundationStatusEnum.ENABLE.getStatus())) {
throw new ForbiddenOperationException("服务为上架状态才能下架");
}
int disableStatus = FoundationStatusEnum.DISABLE.getStatus();
if (!lambdaUpdate()
.eq(Serve::getId, id)
.set(Serve::getSaleStatus, disableStatus)
.update()) {
throw new CommonException("状态更新失败");
}
serve.setSaleStatus(disableStatus);
return serve;
}
@Override
@Transactional
public void deleteById(Long id) {
Serve serve = getServeByIdIfExist(id);
Integer saleStatus = serve.getSaleStatus();
if (!ObjectUtils.equal(saleStatus, FoundationStatusEnum.INIT.getStatus())) {
throw new ForbiddenOperationException("服务为草稿状态才能删除");
}
baseMapper.deleteById(id);
}
@Override
@Transactional
public Serve updateOnHot(Long id) {
Serve serve = getServeByIdIfExist(id);
if (serve.getIsHot() != HotStatusEnum.OFF_HOT.getStatus()) {
throw new RuntimeException("请勿重复设置热门");
}
int hotStatus = HotStatusEnum.ON_HOT.getStatus();
if (!lambdaUpdate()
.eq(Serve::getId, id)
.set(Serve::getIsHot, hotStatus)
.update()) {
throw new CommonException("热门状态更新失败");
}
serve.setIsHot(hotStatus);
return serve;
}
@Override
@Transactional
public Serve updateOffHot(Long id) {
Serve serve = getServeByIdIfExist(id);
if (serve.getIsHot() != HotStatusEnum.ON_HOT.getStatus()) {
throw new RuntimeException("请勿重复取消热门");
}
int hotStatus = HotStatusEnum.OFF_HOT.getStatus();
if (!lambdaUpdate()
.eq(Serve::getId, id)
.set(Serve::getIsHot, hotStatus)
.update()) {
throw new CommonException("热门状态更新失败");
}
serve.setIsHot(hotStatus);
return serve;
}
@Resource
private ServeItemMapper serveItemMapper;