From 1db850a6cf87ac04c5822435769ddefe03754f38 Mon Sep 17 00:00:00 2001 From: JIAN Date: Wed, 14 Aug 2024 17:19:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(foundations):=E6=96=B0=E5=A2=9E=E5=8C=BA?= =?UTF-8?q?=E5=9F=9F=E6=9C=8D=E5=8A=A1=201.=E4=BB=B7=E6=A0=BC=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=202.=E7=8A=B6=E6=80=81=E6=9B=B4=E6=94=B9=203.?= =?UTF-8?q?=E8=8D=89=E7=A8=BF=E5=88=A0=E9=99=A4=204.=E7=83=AD=E9=97=A8?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=20=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/operation/ServeController.java | 59 ++++++++ .../foundations/enums/HotStatusEnum.java | 25 ++++ .../foundations/service/IServeService.java | 31 ++++ .../service/impl/ServeServiceImpl.java | 139 ++++++++++++++++++ 4 files changed, 254 insertions(+) create mode 100644 jzo2o-foundations/src/main/java/com/jzo2o/foundations/enums/HotStatusEnum.java diff --git a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/controller/operation/ServeController.java b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/controller/operation/ServeController.java index ccdcd60..75bdb29 100644 --- a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/controller/operation/ServeController.java +++ b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/controller/operation/ServeController.java @@ -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 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); + } } \ No newline at end of file diff --git a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/enums/HotStatusEnum.java b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/enums/HotStatusEnum.java new file mode 100644 index 0000000..393b9ff --- /dev/null +++ b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/enums/HotStatusEnum.java @@ -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(); + } +} \ No newline at end of file diff --git a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/IServeService.java b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/IServeService.java index 0613f8f..fd57f7d 100644 --- a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/IServeService.java +++ b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/IServeService.java @@ -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 { * @param serveItems 服务项集合 */ void addBatch(List 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); } \ No newline at end of file diff --git a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/impl/ServeServiceImpl.java b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/impl/ServeServiceImpl.java index 0e51cdb..3042c38 100644 --- a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/impl/ServeServiceImpl.java +++ b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/impl/ServeServiceImpl.java @@ -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 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;