Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/dev' into dev

jinshihui 10 ore fa
parent
commit
aecb47d955
29 ha cambiato i file con 395 aggiunte e 118 eliminazioni
  1. 0 1
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/CouponController.java
  2. 1 1
      nightFragrance-massage/src/main/java/com/ylx/api/ApiProductSelectionController.java
  3. 1 1
      nightFragrance-massage/src/main/java/com/ylx/api/ApiUserPointController.java
  4. 21 21
      nightFragrance-massage/src/main/java/com/ylx/banner/controller/BannerController.java
  5. 35 0
      nightFragrance-massage/src/main/java/com/ylx/banner/controller/ClientBannerController.java
  6. 4 4
      nightFragrance-massage/src/main/java/com/ylx/banner/domain/Banner.java
  7. 31 0
      nightFragrance-massage/src/main/java/com/ylx/banner/domain/vo/BannerVO.java
  8. 6 6
      nightFragrance-massage/src/main/java/com/ylx/banner/mapper/BannerMapper.java
  9. 26 0
      nightFragrance-massage/src/main/java/com/ylx/banner/service/BannerService.java
  10. 50 18
      nightFragrance-massage/src/main/java/com/ylx/banner/service/impl/BannerServiceImpl.java
  11. 1 1
      nightFragrance-massage/src/main/java/com/ylx/giftCard/domain/vo/GiftCardDetailVO.java
  12. 1 1
      nightFragrance-massage/src/main/java/com/ylx/lottery/LotteryController.java
  13. 0 22
      nightFragrance-massage/src/main/java/com/ylx/massage/service/TLbtService.java
  14. 19 8
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/MaTechnicianServiceImpl.java
  15. 1 5
      nightFragrance-massage/src/main/java/com/ylx/order/controller/OrderController.java
  16. 6 0
      nightFragrance-massage/src/main/java/com/ylx/order/domain/TOrder.java
  17. 37 3
      nightFragrance-massage/src/main/java/com/ylx/order/service/impl/TOrderServiceImpl.java
  18. 1 1
      nightFragrance-massage/src/main/java/com/ylx/point/PointActivityController.java
  19. 1 1
      nightFragrance-massage/src/main/java/com/ylx/point/UserPointController.java
  20. 48 0
      nightFragrance-massage/src/main/java/com/ylx/project/controller/ClientProjectController.java
  21. 0 20
      nightFragrance-massage/src/main/java/com/ylx/project/controller/ProjectController.java
  22. 0 1
      nightFragrance-massage/src/main/java/com/ylx/project/service/ProjectService.java
  23. 35 0
      nightFragrance-massage/src/main/java/com/ylx/servicecategory/controller/ClientServiceCategoryController.java
  24. 31 0
      nightFragrance-massage/src/main/java/com/ylx/servicecategory/domain/vo/ClientServiceCategoryVO.java
  25. 3 0
      nightFragrance-massage/src/main/java/com/ylx/servicecategory/service/ServiceCategoryService.java
  26. 31 0
      nightFragrance-massage/src/main/java/com/ylx/servicecategory/service/impl/ServiceCategoryServiceImpl.java
  27. 1 1
      nightFragrance-massage/src/main/java/com/ylx/usercenter/UnifiedUserCenterController.java
  28. 2 2
      nightFragrance-massage/src/main/resources/mapper/banner/BannerMapper.xml
  29. 2 0
      nightFragrance-massage/src/main/resources/mapper/order/AdminOrderMapper.xml

+ 0 - 1
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/CouponController.java

@@ -9,7 +9,6 @@ import com.ylx.common.core.domain.R;
 import com.ylx.common.enums.BusinessType;
 import com.ylx.common.utils.StringUtils;
 import com.ylx.massage.domain.Coupon;
-import com.ylx.massage.domain.TLbt;
 import com.ylx.massage.service.CouponService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;

+ 1 - 1
nightFragrance-admin/src/main/java/com/ylx/web/controller/api/ApiProductSelectionController.java → nightFragrance-massage/src/main/java/com/ylx/api/ApiProductSelectionController.java

@@ -1,4 +1,4 @@
-package com.ylx.web.controller.api;
+package com.ylx.api;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ylx.common.core.domain.R;

+ 1 - 1
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/ApiUserPointController.java → nightFragrance-massage/src/main/java/com/ylx/api/ApiUserPointController.java

@@ -1,4 +1,4 @@
-package com.ylx.web.controller.massage;
+package com.ylx.api;
 
 import com.ylx.common.core.domain.R;
 import com.ylx.point.domain.dto.ApiAddPointsDTO;

+ 21 - 21
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TLbtController.java → nightFragrance-massage/src/main/java/com/ylx/banner/controller/BannerController.java

@@ -1,4 +1,4 @@
-package com.ylx.web.controller.massage;
+package com.ylx.banner.controller;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -8,9 +8,9 @@ import com.ylx.common.annotation.Log;
 import com.ylx.common.core.domain.R;
 import com.ylx.common.enums.BusinessType;
 import com.ylx.common.exception.ServiceException;
-import com.ylx.massage.domain.TLbt;
+import com.ylx.banner.domain.Banner;
 import com.ylx.massage.domain.dto.TLbtStatusDTO;
-import com.ylx.massage.service.TLbtService;
+import com.ylx.banner.service.BannerService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -30,10 +30,10 @@ import java.util.List;
 @RequestMapping("/api/lbt/v1")
 @Slf4j
 @Api(tags = {"轮播图管理"})
-public class TLbtController {
+public class BannerController {
 
     @Resource
-    private TLbtService lbtService;
+    private BannerService lbtService;
 
     /**
      * 获取轮播图
@@ -42,11 +42,11 @@ public class TLbtController {
      */
     @ApiOperation("获取轮播图")
     @RequestMapping(value = "/getAll", method = RequestMethod.GET)
-    public R<List<TLbt>> getAll() {
+    public R<List<Banner>> getAll() {
         try {
-            QueryWrapper<TLbt> wrapper = new QueryWrapper<>();
-            wrapper.lambda().orderByAsc(TLbt::getSort);
-            List<TLbt> list = lbtService.list(wrapper);
+            QueryWrapper<Banner> wrapper = new QueryWrapper<>();
+            wrapper.lambda().orderByAsc(Banner::getSort);
+            List<Banner> list = lbtService.list(wrapper);
             return R.ok(list);
         } catch (Exception e) {
             e.printStackTrace();
@@ -63,7 +63,7 @@ public class TLbtController {
     @Log(title = "轮播图管理", businessType = BusinessType.INSERT)
     @RequestMapping(value = "/addOrUpdate", method = RequestMethod.POST)
     @ApiOperation("添加或者更新轮播图")
-    public R addOrUpdate(@RequestBody TLbt lbt) {
+    public R addOrUpdate(@RequestBody Banner lbt) {
         try {
             log.info("请求参数:{}", JSON.toJSONString(lbt));
             return R.ok(lbtService.addOrUpdate(lbt));
@@ -85,14 +85,14 @@ public class TLbtController {
      */
     @ApiOperation("分页查询数据")
     @RequestMapping(value = "/select", method = RequestMethod.GET)
-    public R<Page<TLbt>> selectSpfl(Page<TLbt> page, TLbt lbt) {
+    public R<Page<Banner>> selectSpfl(Page<Banner> page, Banner lbt) {
         try {
-            LambdaQueryWrapper<TLbt> tLbtLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            tLbtLambdaQueryWrapper.like(StringUtils.isNotBlank(lbt.getTitle()), TLbt::getTitle, lbt.getTitle()).orderByAsc(TLbt::getSort);
+            LambdaQueryWrapper<Banner> tLbtLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            tLbtLambdaQueryWrapper.like(StringUtils.isNotBlank(lbt.getTitle()), Banner::getTitle, lbt.getTitle()).orderByAsc(Banner::getSort);
             //查询条件添加显示状态
-            tLbtLambdaQueryWrapper.eq(lbt.getStatus() != null, TLbt::getStatus, lbt.getStatus());
+            tLbtLambdaQueryWrapper.eq(lbt.getStatus() != null, Banner::getStatus, lbt.getStatus());
             // 获取查询返回结果
-            Page<TLbt> pageSelect = lbtService.page(page, tLbtLambdaQueryWrapper);
+            Page<Banner> pageSelect = lbtService.page(page, tLbtLambdaQueryWrapper);
             return R.ok(pageSelect);
         } catch (Exception e) {
             e.printStackTrace();
@@ -103,15 +103,15 @@ public class TLbtController {
     /**
      * 删除轮播图
      *
-     * @param tLbt
+     * @param banner
      * @return R
      */
     @Log(title = "轮播图管理", businessType = BusinessType.DELETE)
     @RequestMapping(value = "/del", method = RequestMethod.POST)
     @ApiOperation("删除轮播图")
-    public R del(@RequestBody TLbt tLbt) {
+    public R del(@RequestBody Banner banner) {
         try {
-            return R.ok(lbtService.del(tLbt));
+            return R.ok(lbtService.del(banner));
         } catch (ServiceException s) {
             log.error(s.toString());
             return R.fail(s.getMessage());
@@ -145,12 +145,12 @@ public class TLbtController {
     /**
      * 根据id查询轮播图
      *
-     * @param tLbt
+     * @param banner
      * @return R
      */
     @ApiOperation("根据id查询轮播图")
     @RequestMapping(value = "/wx/getByid", method = RequestMethod.POST)
-    public R getById(@RequestBody TLbt tLbt) {
-        return R.ok(lbtService.getById(tLbt.getId()));
+    public R getById(@RequestBody Banner banner) {
+        return R.ok(lbtService.getById(banner.getId()));
     }
 }

+ 35 - 0
nightFragrance-massage/src/main/java/com/ylx/banner/controller/ClientBannerController.java

@@ -0,0 +1,35 @@
+package com.ylx.banner.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ylx.banner.domain.Banner;
+import com.ylx.banner.domain.vo.BannerVO;
+import com.ylx.banner.service.BannerService;
+import com.ylx.common.core.domain.R;
+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.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/client/banner")
+@Api(tags = {"客户端轮播图"})
+@Slf4j
+@PreAuthorize("@customerAuth.isCustomer()")
+public class ClientBannerController {
+
+    @Resource
+    private BannerService bannerService;
+
+    @ApiOperation("客户端首页分页查询轮播图数据")
+    @PostMapping("/page")
+    public R<Page<BannerVO>> page(Page<Banner> page) {
+        Page<BannerVO> pageData = this.bannerService.page(page);
+        return R.ok(pageData);
+    }
+
+}

+ 4 - 4
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TLbt.java → nightFragrance-massage/src/main/java/com/ylx/banner/domain/Banner.java

@@ -1,4 +1,4 @@
-package com.ylx.massage.domain;
+package com.ylx.banner.domain;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -23,9 +23,9 @@ import java.util.Date;
 @Getter
 @Setter
 @Accessors(chain = true)
-@TableName("t_lbt")
-@ApiModel(value = "TLbt", description = "轮播图")
-public class TLbt implements Serializable {
+@TableName("banner")
+@ApiModel(value = "Banner", description = "轮播图")
+public class Banner implements Serializable {
 
     private static final long serialVersionUID = 1L;
 

+ 31 - 0
nightFragrance-massage/src/main/java/com/ylx/banner/domain/vo/BannerVO.java

@@ -0,0 +1,31 @@
+package com.ylx.banner.domain.vo;
+
+import com.ylx.banner.domain.Banner;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("客户端轮播图VO")
+@Data
+public class BannerVO {
+
+    @ApiModelProperty("主键")
+    private String id;
+
+    @ApiModelProperty("标题")
+    private String title;
+
+    @ApiModelProperty("图片地址")
+    private String imgUrl;
+
+    @ApiModelProperty("跳转地址,支持HTTP链接或内部路由")
+    private String jumpUrl;
+
+    public BannerVO(Banner entity) {
+        this.id = entity.getId();
+        this.title = entity.getTitle();
+        this.imgUrl = entity.getImgUrl();
+        this.jumpUrl = entity.getJumpUrl();
+    }
+
+}

+ 6 - 6
nightFragrance-massage/src/main/java/com/ylx/massage/mapper/TLbtMapper.java → nightFragrance-massage/src/main/java/com/ylx/banner/mapper/BannerMapper.java

@@ -1,15 +1,15 @@
-package com.ylx.massage.mapper;
+package com.ylx.banner.mapper;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
-import com.ylx.massage.domain.TLbt;
+import com.ylx.banner.domain.Banner;
 
 /**
  * 轮播图 Mapper 接口
  */
 @Mapper
-public interface TLbtMapper extends BaseMapper<TLbt> {
+public interface BannerMapper extends BaseMapper<Banner> {
 
     /**
      * 根据ID查询轮播图。
@@ -17,7 +17,7 @@ public interface TLbtMapper extends BaseMapper<TLbt> {
      * @param id 轮播图ID
      * @return 轮播图
      */
-    default TLbt selectLbtById(String id) {
+    default Banner selectLbtById(String id) {
         return selectById(id);
     }
 
@@ -28,7 +28,7 @@ public interface TLbtMapper extends BaseMapper<TLbt> {
      * @return 数量
      */
     default Long countByStatus(Integer status) {
-        return selectCount(new LambdaQueryWrapper<TLbt>().eq(TLbt::getStatus, status));
+        return selectCount(new LambdaQueryWrapper<Banner>().eq(Banner::getStatus, status));
     }
 
     /**
@@ -37,7 +37,7 @@ public interface TLbtMapper extends BaseMapper<TLbt> {
      * @param lbt 轮播图
      * @return 影响行数
      */
-    default int updateLbtById(TLbt lbt) {
+    default int updateLbtById(Banner lbt) {
         return updateById(lbt);
     }
 }

+ 26 - 0
nightFragrance-massage/src/main/java/com/ylx/banner/service/BannerService.java

@@ -0,0 +1,26 @@
+package com.ylx.banner.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ylx.banner.domain.Banner;
+import com.ylx.banner.domain.vo.BannerVO;
+import com.ylx.massage.domain.dto.TLbtStatusDTO;
+
+/**
+ * <p>
+ * 轮播图 服务类
+ * </p>
+ *
+ * @author YJR
+ * @since 2023-11-24
+ */
+public interface BannerService extends IService<Banner> {
+
+    Boolean addOrUpdate(Banner lbt);
+
+    Boolean del(Banner banner);
+
+    Boolean updateStatus(TLbtStatusDTO dto);
+
+    Page<BannerVO> page(Page<Banner> page);
+}

+ 50 - 18
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TLbtServiceImpl.java → nightFragrance-massage/src/main/java/com/ylx/banner/service/impl/BannerServiceImpl.java

@@ -1,31 +1,38 @@
-package com.ylx.massage.service.impl;
+package com.ylx.banner.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 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.banner.domain.vo.BannerVO;
 import com.ylx.common.exception.ServiceException;
 import com.ylx.common.utils.uuid.IdUtils;
-import com.ylx.massage.domain.TLbt;
+import com.ylx.banner.domain.Banner;
+import com.ylx.giftCard.domain.GiftCard;
+import com.ylx.giftCard.domain.vo.GiftCardVO;
 import com.ylx.massage.domain.dto.TLbtStatusDTO;
-import com.ylx.massage.mapper.TLbtMapper;
-import com.ylx.massage.service.TLbtService;
+import com.ylx.banner.mapper.BannerMapper;
+import com.ylx.banner.service.BannerService;
 import com.ylx.common.utils.DateUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 轮播图 服务实现类
  */
 @Service
-public class TLbtServiceImpl extends ServiceImpl<TLbtMapper, TLbt> implements TLbtService {
+public class BannerServiceImpl extends ServiceImpl<BannerMapper, Banner> implements BannerService {
     private static final int STATUS_HIDE = 0;
     private static final int STATUS_SHOW = 1;
     private static final long MAX_SHOW_COUNT = 5L;
     private static final long MIN_SHOW_COUNT = 1L;
+    private static final int NOT_DELETE = 0;
 
     @Override
-    public Boolean addOrUpdate(TLbt lbt) {
+    public Boolean addOrUpdate(Banner lbt) {
         if (StringUtils.isBlank(lbt.getImgUrl())) {
             throw new ServiceException("图片不能为空");
         }
@@ -33,8 +40,8 @@ public class TLbtServiceImpl extends ServiceImpl<TLbtMapper, TLbt> implements TL
             throw new ServiceException("序号不能为空");
         }
         Integer i = lbt.getSort();
-        LambdaQueryWrapper<TLbt> query = new LambdaQueryWrapper<TLbt>().eq(TLbt::getSort, i);
-        TLbt one = getOne(query);
+        LambdaQueryWrapper<Banner> query = new LambdaQueryWrapper<Banner>().eq(Banner::getSort, i);
+        Banner one = getOne(query);
         if (StringUtils.isBlank(lbt.getId())) {
             //新增
             lbt.setId(IdUtils.simpleUUID());
@@ -43,7 +50,7 @@ public class TLbtServiceImpl extends ServiceImpl<TLbtMapper, TLbt> implements TL
             }
         } else {
             //修改
-            query.ne(TLbt::getId, lbt.getId());
+            query.ne(Banner::getId, lbt.getId());
             if (getOne(query) != null) {
                 batchLbt(i);
             }
@@ -56,22 +63,22 @@ public class TLbtServiceImpl extends ServiceImpl<TLbtMapper, TLbt> implements TL
      * @param i
      */
     private void batchLbt(Integer i) {
-        LambdaQueryWrapper<TLbt> query1 = new LambdaQueryWrapper<TLbt>().ge(TLbt::getSort, i);
-        List<TLbt> lbts = list(query1);
+        LambdaQueryWrapper<Banner> query1 = new LambdaQueryWrapper<Banner>().ge(Banner::getSort, i);
+        List<Banner> lbts = list(query1);
         lbts.forEach(tLbt1 -> tLbt1.setSort(tLbt1.getSort() + 1));
         updateBatchById(lbts);
     }
 
     @Override
-    public Boolean del(TLbt tLbt) {
-        if (tLbt == null) {
+    public Boolean del(Banner banner) {
+        if (banner == null) {
             throw new ServiceException("参数不能为空");
         }
-        if (StringUtils.isBlank(tLbt.getId())) {
+        if (StringUtils.isBlank(banner.getId())) {
             throw new ServiceException("ID不能为空");
         }
 
-        TLbt exists = baseMapper.selectLbtById(tLbt.getId());
+        Banner exists = baseMapper.selectLbtById(banner.getId());
         if (exists == null) {
             throw new ServiceException("轮播图不存在");
         }
@@ -79,7 +86,7 @@ public class TLbtServiceImpl extends ServiceImpl<TLbtMapper, TLbt> implements TL
             throw new ServiceException("当前banner已显示,不可删除!");
         }
 
-        boolean removed = this.removeById(tLbt.getId());
+        boolean removed = this.removeById(banner.getId());
         if (!removed) {
             throw new ServiceException("轮播图删除失败");
         }
@@ -98,7 +105,7 @@ public class TLbtServiceImpl extends ServiceImpl<TLbtMapper, TLbt> implements TL
             throw new ServiceException("显示状态值不正确");
         }
 
-        TLbt exists = baseMapper.selectLbtById(dto.getId());
+        Banner exists = baseMapper.selectLbtById(dto.getId());
         if (exists == null) {
             throw new ServiceException("轮播图不存在");
         }
@@ -114,7 +121,7 @@ public class TLbtServiceImpl extends ServiceImpl<TLbtMapper, TLbt> implements TL
             throw new ServiceException("当前banner已是最后一条显示,不可关闭!");
         }
 
-        TLbt update = new TLbt();
+        Banner update = new Banner();
         update.setId(dto.getId());
         update.setStatus(dto.getStatus());
         update.setUpdateTime(DateUtils.getNowDate());
@@ -124,4 +131,29 @@ public class TLbtServiceImpl extends ServiceImpl<TLbtMapper, TLbt> implements TL
         }
         return true;
     }
+
+    @Override
+    public Page<BannerVO> page(Page<Banner> page) {
+
+        LambdaQueryWrapper<Banner> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Banner::getIsDelete, NOT_DELETE);
+        wrapper.eq(Banner::getStatus, STATUS_SHOW);
+        wrapper.orderByDesc(Banner::getSort);
+
+        Page<Banner> bannerPage = this.baseMapper.selectPage(page, wrapper);
+        Page<BannerVO> pageData = new Page<>(
+                bannerPage.getCurrent(),
+                bannerPage.getSize(),
+                bannerPage.getTotal()
+        );
+
+        if (CollectionUtil.isNotEmpty(bannerPage.getRecords())) {
+            List<BannerVO> voList = bannerPage.getRecords().stream()
+                    .map(BannerVO::new)
+                    .collect(Collectors.toList());
+            pageData.setRecords(voList);
+        }
+
+        return pageData;
+    }
 }

+ 1 - 1
nightFragrance-massage/src/main/java/com/ylx/giftCard/domain/vo/GiftCardDetailVO.java

@@ -7,7 +7,7 @@ import lombok.Data;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 
-@ApiModel("购物卡详情DTO")
+@ApiModel("购物卡详情VO")
 @Data
 public class GiftCardDetailVO {
 

+ 1 - 1
nightFragrance-admin/src/main/java/com/ylx/web/controller/lottery/LotteryController.java → nightFragrance-massage/src/main/java/com/ylx/lottery/LotteryController.java

@@ -1,4 +1,4 @@
-package com.ylx.web.controller.lottery;
+package com.ylx.lottery;
 
 import com.ylx.common.core.domain.R;
 import com.ylx.lottery.domain.dto.IsLotteryDTO;

+ 0 - 22
nightFragrance-massage/src/main/java/com/ylx/massage/service/TLbtService.java

@@ -1,22 +0,0 @@
-package com.ylx.massage.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ylx.massage.domain.TLbt;
-import com.ylx.massage.domain.dto.TLbtStatusDTO;
-
-/**
- * <p>
- * 轮播图 服务类
- * </p>
- *
- * @author YJR
- * @since 2023-11-24
- */
-public interface TLbtService extends IService<TLbt> {
-
-    Boolean addOrUpdate(TLbt lbt);
-
-    Boolean del(TLbt tLbt);
-
-    Boolean updateStatus(TLbtStatusDTO dto);
-}

+ 19 - 8
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/MaTechnicianServiceImpl.java

@@ -131,24 +131,36 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void apply(MaTechnicianAppAddVo req) {
-        // 初始化加密工具
-        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
         String phone = req.getTePhone();
         //商户入住前置条件校验
         getMaTechnician(req, phone);
         MaTechnician maTechnician = new MaTechnician();
         BeanUtils.copyProperties(req, maTechnician);
-        //技师类型默认为真实商户
-        maTechnician.setTechType(0);
-        maTechnician.setCreateBy("admin");
-        maTechnician.setAuditStatus(AUDIT_WAIT_ENTER);
-        maTechnician.setTePassword(encoder.encode(PASSWORD));
         LambdaQueryWrapper<MaTechnician> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(MaTechnician::getCOpenid, req.getCOpenid());
         MaTechnician maTechnician1 = maTechnicianMapper.selectOne(queryWrapper);
         if (maTechnician1 == null) {
             throw new RuntimeException("商户不存在");
         }
+        //添加城市管理地址
+        insertCity(req, maTechnician1, maTechnician);
+
+    }
+
+    /**
+     * 添加城市管理地址
+     * @param req
+     * @param maTechnician1
+     * @param maTechnician
+     */
+    private void insertCity(MaTechnicianAppAddVo req, MaTechnician maTechnician1, MaTechnician maTechnician) {
+        // 初始化加密工具
+        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
+        //技师类型默认为真实商户
+        maTechnician.setTechType(0);
+        maTechnician.setCreateBy("admin");
+        maTechnician.setAuditStatus(AUDIT_WAIT_ENTER);
+        maTechnician.setTePassword(encoder.encode(PASSWORD));
         LambdaUpdateWrapper<MaTechnician> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.eq(MaTechnician::getId, maTechnician1.getId());
         maTechnicianMapper.update(maTechnician, updateWrapper);
@@ -165,7 +177,6 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
         cityOperationApplication.setCreateBy(maTechnician1.getId().toString());
         cityOperationApplication.setUpdateBy(maTechnician1.getId().toString());
         cityOperationApplicationMapper.insert(cityOperationApplication);
-
     }
 
     /**

+ 1 - 5
nightFragrance-massage/src/main/java/com/ylx/order/controller/OrderController.java

@@ -21,12 +21,12 @@ import java.util.Map;
 @RequestMapping("/order")
 @Api(tags = {"订单模块"})
 @Slf4j
+@PreAuthorize("@customerAuth.isCustomer()")
 public class OrderController {
 
     @Resource
     private TOrderService orderService;
 
-    @PreAuthorize("@customerAuth.isCustomer()")
     @ApiOperation("客户端用户提交订单")
     @PostMapping("/submit")
     public R<Map<String, Object>> submitOrder(@Validated @RequestBody OrderSubmitDTO dto) {
@@ -34,7 +34,6 @@ public class OrderController {
         return R.ok(data);
     }
 
-    @PreAuthorize("@customerAuth.isCustomer()")
     @ApiOperation("根据日期范围等条件查询订单")
     @PostMapping("/queryByDate")
     public R<Page<OrderDateQueryVo>> queryOrderByDate(@Validated @RequestBody OrderDateQueryDTO dto) {
@@ -42,7 +41,6 @@ public class OrderController {
         return R.ok(page);
     }
 
-    @PreAuthorize("@customerAuth.isCustomer()")
     @ApiOperation("逻辑删除订单(移入回收站)")
     @PostMapping("/delete")
     public R<?> deleteOrder(@Validated @RequestBody OrderDeleteDTO dto) {
@@ -58,7 +56,6 @@ public class OrderController {
         return R.ok(orderService.getOrderDetailById(orderId));
     }
 
-    @PreAuthorize("@customerAuth.isCustomer()")
     @ApiOperation("用户取消订单")
     @PostMapping("/cancel")
     public R<?> cancelOrder(@RequestBody @Validated OrderCancleDTO dto) {
@@ -67,7 +64,6 @@ public class OrderController {
         return result > 0 ? R.ok("订单已取消") : R.fail("订单取消失败");
     }
 
-    @PreAuthorize("@customerAuth.isCustomer()")
     @ApiOperation("客户端是否可以预约当前时段")
     @PostMapping("/booking/check")
     public R<Boolean> bookingCheck(@RequestBody @Validated BookingCheckDTO dto) {

+ 6 - 0
nightFragrance-massage/src/main/java/com/ylx/order/domain/TOrder.java

@@ -189,4 +189,10 @@ public class TOrder extends BaseEntity {
 
     @ApiModelProperty("预约结束时间")
     private LocalDateTime appointmentEndTime;
+
+    @ApiModelProperty("平台收益")
+    private BigDecimal platformIncome;
+
+    @ApiModelProperty("商户收益")
+    private BigDecimal merchantIncome;
 }

+ 37 - 3
nightFragrance-massage/src/main/java/com/ylx/order/service/impl/TOrderServiceImpl.java

@@ -304,18 +304,21 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         TOrder order = buildOrder(dto, project, maTechnician, address, merchantAddressList,
                 basePrice, trafficFee, couponDiscount, finalAmount, userId);
 
-        // 8. 保存订单
+        // 8. 计算商户、平台分佣金额
+        this.calculateOrderIncome(order, finalAmount, project.getMerchantShareRatio());
+
+        // 9. 保存订单
         boolean saveResult = this.save(order);
         if (!saveResult) {
             throw new ServiceException("添加订单失败");
         }
 
-        // 9. 更新优惠券关联的真实订单ID (因为刚才核销时订单还没生成,这里补上)
+        // 10. 更新优惠券关联的真实订单ID (因为刚才核销时订单还没生成,这里补上)
         if (ObjectUtil.isNotNull(dto.getCouponId())) {
             this.couponService.useCoupon(dto.getCouponId(), openId, order.getId(), 1);
         }
 
-        // 10. 处理余额支付逻辑
+        // 11. 处理余额支付逻辑
         if (ObjectUtil.equals(PaymentMethodEnum.BALANCE.getCode(), dto.getPaymentMethod())) {
             handleBalancePayment(userId, finalAmount, order);
             map.put("orderId", order.getId());
@@ -925,4 +928,35 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         return duration * factor;
     }
 
+    /**
+     * 计算订单分佣金额
+     * 核心财务原则:先算出其中一方收益,另一方用总金额相减,避免精度丢失导致 1 分钱误差
+     *
+     * @param order           订单对象
+     * @param finalAmount     最终实付金额
+     * @param merchantShareRatio 商户分佣比例(%)
+     */
+    private void calculateOrderIncome(TOrder order, BigDecimal finalAmount, BigDecimal merchantShareRatio) {
+        if (ObjectUtil.isNull(finalAmount) || finalAmount.compareTo(BigDecimal.ZERO) <= 0) {
+            order.setPlatformIncome(BigDecimal.ZERO);
+            order.setMerchantIncome(BigDecimal.ZERO);
+            return;
+        }
+
+        // 防止分佣比例为空
+        BigDecimal ratio = Optional.ofNullable(merchantShareRatio).orElse(BigDecimal.ZERO);
+        BigDecimal hundred = new BigDecimal("100");
+
+        // 1. 计算商户收益 = 实付金额 * 商户比例 / 100,保留两位小数,四舍五入
+        BigDecimal merchantIncome = finalAmount.multiply(ratio)
+                .divide(hundred, 2, RoundingMode.HALF_UP);
+
+        // 2. 计算平台收益 = 实付金额 - 商户收益
+        BigDecimal platformIncome = finalAmount.subtract(merchantIncome);
+
+        // 3. 赋值给订单对象
+        order.setMerchantIncome(merchantIncome);
+        order.setPlatformIncome(platformIncome);
+    }
+
 }

+ 1 - 1
nightFragrance-admin/src/main/java/com/ylx/web/controller/point/PointActivityController.java → nightFragrance-massage/src/main/java/com/ylx/point/PointActivityController.java

@@ -1,4 +1,4 @@
-package com.ylx.web.controller.point;
+package com.ylx.point;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ylx.common.annotation.Log;

+ 1 - 1
nightFragrance-admin/src/main/java/com/ylx/web/controller/point/UserPointController.java → nightFragrance-massage/src/main/java/com/ylx/point/UserPointController.java

@@ -1,4 +1,4 @@
-package com.ylx.web.controller.point;
+package com.ylx.point;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ylx.common.core.controller.BaseController;

+ 48 - 0
nightFragrance-massage/src/main/java/com/ylx/project/controller/ClientProjectController.java

@@ -0,0 +1,48 @@
+package com.ylx.project.controller;
+
+import com.ylx.common.core.domain.R;
+import com.ylx.project.domain.bookMerchant.dto.BookMerchantDTO;
+import com.ylx.project.domain.bookMerchant.vo.BookProjectDetailVO;
+import com.ylx.project.domain.vo.ProjectBaseVo;
+import com.ylx.project.domain.vo.ProjectDetailVo;
+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;
+import java.util.List;
+
+@RestController
+@RequestMapping("/client/project")
+@Api(tags = {"客户端项目相关"})
+@Slf4j
+@PreAuthorize("@customerAuth.isCustomer()")
+public class ClientProjectController {
+
+    @Resource
+    private ProjectService projectService;
+
+    @ApiOperation("客户端根据服务标签获取服务项目集合数据")
+    @GetMapping("/categoryId/{categoryId}")
+    public R<List<ProjectBaseVo>> getProjectTabList(@PathVariable("categoryId") Integer categoryId) {
+        List<ProjectBaseVo> list = this.projectService.getProjectTabListByCategoryId(categoryId);
+        return R.ok(list);
+    }
+
+    @ApiOperation("客户端获取去预约项目详情")
+    @PostMapping("/bookDetail")
+    public R<BookProjectDetailVO> getBookingProjectDetail(@Validated @RequestBody BookMerchantDTO dto) {
+        BookProjectDetailVO vo = this.projectService.getBookingProjectDetail(dto);
+        return R.ok(vo);
+    }
+
+    @ApiOperation("客户端根据ID获取项目详情信息")
+    @GetMapping("/detail/{id}")
+    public R<ProjectDetailVo> getDetailById(@PathVariable("id") Long id) {
+        return R.ok(this.projectService.getDetailsInfo(id));
+    }
+}

+ 0 - 20
nightFragrance-massage/src/main/java/com/ylx/project/controller/ProjectController.java

@@ -6,12 +6,9 @@ import com.ylx.common.core.domain.R;
 import com.ylx.common.enums.BusinessType;
 import com.ylx.common.exception.ServiceException;
 import com.ylx.project.domain.Project;
-import com.ylx.project.domain.bookMerchant.dto.BookMerchantDTO;
-import com.ylx.project.domain.bookMerchant.vo.BookProjectDetailVO;
 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.ProjectBaseVo;
 import com.ylx.project.domain.vo.ProjectDetailVo;
 import com.ylx.project.domain.vo.ProjectPageVo;
 import com.ylx.project.service.ProjectService;
@@ -23,7 +20,6 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import java.util.List;
 
 @RestController
 @RequestMapping("/project")
@@ -132,20 +128,4 @@ public class ProjectController {
         }
     }
 
-    @PreAuthorize("@customerAuth.isCustomer()")
-    @ApiOperation("客户端根据服务标签获取服务项目集合数据")
-    @GetMapping("/categoryId/{categoryId}")
-    public R<List<ProjectBaseVo>> getProjectTabList(@PathVariable("categoryId") Integer categoryId) {
-        List<ProjectBaseVo> list = this.projectService.getProjectTabListByCategoryId(categoryId);
-        return R.ok(list);
-    }
-
-    @PreAuthorize("@customerAuth.isCustomer()")
-    @ApiOperation("客户端获取去预约项目详情")
-    @PostMapping("/bookDetail")
-    public R<BookProjectDetailVO> getBookingProjectDetail(@Validated @RequestBody BookMerchantDTO dto) {
-        BookProjectDetailVO vo = projectService.getBookingProjectDetail(dto);
-        return R.ok(vo);
-    }
-
 }

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

@@ -9,7 +9,6 @@ import com.ylx.massage.domain.vo.ProductOptionVO;
 import com.ylx.massage.domain.vo.ProductServiceOptionVO;
 import com.ylx.project.domain.Project;
 import com.ylx.project.domain.bookMerchant.dto.BookMerchantDTO;
-import com.ylx.project.domain.bookMerchant.vo.BookMerchantVO;
 import com.ylx.project.domain.bookMerchant.vo.BookProjectDetailVO;
 import com.ylx.project.domain.dto.ProjectAddDTO;
 import com.ylx.project.domain.dto.ProjectSearchDTO;

+ 35 - 0
nightFragrance-massage/src/main/java/com/ylx/servicecategory/controller/ClientServiceCategoryController.java

@@ -0,0 +1,35 @@
+package com.ylx.servicecategory.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ylx.common.core.domain.R;
+import com.ylx.servicecategory.domain.ServiceCategory;
+import com.ylx.servicecategory.domain.vo.ClientServiceCategoryVO;
+import com.ylx.servicecategory.service.ServiceCategoryService;
+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.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@Slf4j
+@RestController
+@Api(tags = {"服务类目管理"})
+@RequestMapping("/client/service/category")
+@PreAuthorize("@customerAuth.isCustomer()")
+
+public class ClientServiceCategoryController {
+
+    @Resource
+    private ServiceCategoryService serviceCategoryService;
+
+    @PostMapping("page")
+    @ApiOperation("客户端首页分页查询服务类目数据")
+    public R<Page<ClientServiceCategoryVO>> page(Page<ServiceCategory> page) {
+        Page<ClientServiceCategoryVO> pageData = this.serviceCategoryService.page(page);
+        return R.ok(pageData);
+    }
+}

+ 31 - 0
nightFragrance-massage/src/main/java/com/ylx/servicecategory/domain/vo/ClientServiceCategoryVO.java

@@ -0,0 +1,31 @@
+package com.ylx.servicecategory.domain.vo;
+
+import com.ylx.servicecategory.domain.ServiceCategory;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("客户端服务类目VO")
+@Data
+public class ClientServiceCategoryVO {
+
+    @ApiModelProperty("主键")
+    private Integer id;
+
+    @ApiModelProperty("服务标签(1:按摩 2:陪玩)")
+    private Integer serviceTag;
+
+    @ApiModelProperty("服务类目名称")
+    private String name;
+
+    @ApiModelProperty("服务类目图标")
+    private String icon;
+
+    public ClientServiceCategoryVO(ServiceCategory entity) {
+        this.id = entity.getId();
+        this.serviceTag = entity.getServiceTag();
+        this.name = entity.getName();
+        this.icon = entity.getIcon();
+    }
+
+}

+ 3 - 0
nightFragrance-massage/src/main/java/com/ylx/servicecategory/service/ServiceCategoryService.java

@@ -3,6 +3,7 @@ package com.ylx.servicecategory.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ylx.servicecategory.domain.ServiceCategory;
+import com.ylx.servicecategory.domain.vo.ClientServiceCategoryVO;
 
 import java.util.List;
 
@@ -58,4 +59,6 @@ public interface ServiceCategoryService extends IService<ServiceCategory> {
      * @return 是否删除成功
      */
     Boolean deleteServiceCategory(Long id);
+
+    Page<ClientServiceCategoryVO> page(Page<ServiceCategory> page);
 }

+ 31 - 0
nightFragrance-massage/src/main/java/com/ylx/servicecategory/service/impl/ServiceCategoryServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ylx.servicecategory.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -8,6 +9,7 @@ import com.ylx.common.utils.StringUtils;
 import com.ylx.project.domain.Project;
 import com.ylx.project.mapper.ProjectMapper;
 import com.ylx.servicecategory.domain.ServiceCategory;
+import com.ylx.servicecategory.domain.vo.ClientServiceCategoryVO;
 import com.ylx.servicecategory.mapper.ServiceCategoryMapper;
 import com.ylx.servicecategory.service.ServiceCategoryService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,6 +17,7 @@ import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 服务类目服务实现类
@@ -24,6 +27,9 @@ public class ServiceCategoryServiceImpl extends ServiceImpl<ServiceCategoryMappe
 
     @Autowired
     private ProjectMapper projectMapper;
+    private static final int ONLINE = 1;
+    private static final int NOT_DELETE = 0;
+    private static final int IS_DISPLAY = 1;
 
 
     /**
@@ -161,6 +167,31 @@ public class ServiceCategoryServiceImpl extends ServiceImpl<ServiceCategoryMappe
         return true;
     }
 
+    @Override
+    public Page<ClientServiceCategoryVO> page(Page<ServiceCategory> page) {
+        LambdaQueryWrapper<ServiceCategory> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ServiceCategory::getIsDelete, NOT_DELETE)
+                .eq(ServiceCategory::getIsOnline, ONLINE)
+                .eq(ServiceCategory::getIsHomeDisplay, IS_DISPLAY)
+                .orderByDesc(ServiceCategory::getSort);
+
+        Page<ServiceCategory> serviceCategoryrPage = this.baseMapper.selectPage(page, wrapper);
+        Page<ClientServiceCategoryVO> pageData = new Page<>(
+                serviceCategoryrPage.getCurrent(),
+                serviceCategoryrPage.getSize(),
+                serviceCategoryrPage.getTotal()
+        );
+
+        if (CollectionUtil.isNotEmpty(serviceCategoryrPage.getRecords())) {
+            List<ClientServiceCategoryVO> voList = serviceCategoryrPage.getRecords().stream()
+                    .map(ClientServiceCategoryVO::new)
+                    .collect(Collectors.toList());
+            pageData.setRecords(voList);
+        }
+
+        return pageData;
+    }
+
     private void checkAddParam(ServiceCategory serviceCategory) {
         checkRequiredParam(serviceCategory);
     }

+ 1 - 1
nightFragrance-admin/src/main/java/com/ylx/web/controller/usercenter/UnifiedUserCenterController.java → nightFragrance-massage/src/main/java/com/ylx/usercenter/UnifiedUserCenterController.java

@@ -1,4 +1,4 @@
-package com.ylx.web.controller.usercenter;
+package com.ylx.usercenter;
 
 import com.ylx.common.core.controller.BaseController;
 import com.ylx.common.core.domain.R;

+ 2 - 2
nightFragrance-massage/src/main/resources/mapper/massage/TLbtMapper.xml → nightFragrance-massage/src/main/resources/mapper/banner/BannerMapper.xml

@@ -1,9 +1,9 @@
 <?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.massage.mapper.TLbtMapper">
+<mapper namespace="com.ylx.banner.mapper.BannerMapper">
 
     <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.ylx.massage.domain.TLbt">
+    <resultMap id="BaseResultMap" type="com.ylx.banner.domain.Banner">
         <id column="id" property="id" />
         <result column="title" property="title" />
         <result column="img_url" property="imgUrl" />

+ 2 - 0
nightFragrance-massage/src/main/resources/mapper/order/AdminOrderMapper.xml

@@ -314,6 +314,8 @@
             o.virtual_latitude AS virtualLatitude,
             o.virtual_longitude AS virtualLongitude,
             o.start_photo AS startPhoto,
+            o.platform_income AS platformIncome,
+            o.merchant_income AS merchantIncome,
             ass.id AS afterSalesServiceId,
             ass.status AS afterSalesServiceStatus
         FROM t_order o