Przeglądaj źródła

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

郭子栋 1 tydzień temu
rodzic
commit
57972df8ec
17 zmienionych plików z 495 dodań i 190 usunięć
  1. 1 1
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/ApiUserPointController.java
  2. 11 19
      nightFragrance-admin/src/main/java/com/ylx/web/controller/system/SysDictDataController.java
  3. 13 23
      nightFragrance-admin/src/main/java/com/ylx/web/controller/system/SysDictTypeController.java
  4. 109 96
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/MaTechnician.java
  5. 37 4
      nightFragrance-massage/src/main/java/com/ylx/project/controller/ProjectController.java
  6. 6 11
      nightFragrance-massage/src/main/java/com/ylx/project/domain/Project.java
  7. 2 2
      nightFragrance-massage/src/main/java/com/ylx/project/domain/dto/ProjectAddDTO.java
  8. 13 1
      nightFragrance-massage/src/main/java/com/ylx/project/domain/dto/ProjectSearchDTO.java
  9. 136 0
      nightFragrance-massage/src/main/java/com/ylx/project/domain/vo/ProjectDetailVo.java
  10. 51 0
      nightFragrance-massage/src/main/java/com/ylx/project/domain/vo/ProjectPageVo.java
  11. 3 0
      nightFragrance-massage/src/main/java/com/ylx/project/mapper/ProjectMapper.java
  12. 3 0
      nightFragrance-massage/src/main/java/com/ylx/project/service/ProjectService.java
  13. 25 8
      nightFragrance-massage/src/main/java/com/ylx/project/service/impl/ProjectServiceImpl.java
  14. 8 2
      nightFragrance-massage/src/main/java/com/ylx/servicecategory/domain/ServiceCategory.java
  15. 15 1
      nightFragrance-massage/src/main/java/com/ylx/servicecategory/service/impl/ServiceCategoryServiceImpl.java
  16. 50 1
      nightFragrance-massage/src/main/resources/mapper/project/ProjectMapper.xml
  17. 12 21
      nightFragrance-system/src/main/java/com/ylx/system/service/impl/SysDictDataServiceImpl.java

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

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

+ 11 - 19
nightFragrance-admin/src/main/java/com/ylx/web/controller/system/SysDictDataController.java

@@ -3,6 +3,7 @@ package com.ylx.web.controller.system;
 import java.util.ArrayList;
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
@@ -26,14 +27,13 @@ import com.ylx.system.service.ISysDictDataService;
 import com.ylx.system.service.ISysDictTypeService;
 
 /**
- * 数据字典信息
+ * 字典数据
  *
  * @author ylx
  */
 @RestController
 @RequestMapping("/system/dict/data")
-public class SysDictDataController extends BaseController
-{
+public class SysDictDataController extends BaseController {
     @Autowired
     private ISysDictDataService dictDataService;
 
@@ -42,8 +42,7 @@ public class SysDictDataController extends BaseController
 
     @PreAuthorize("@ss.hasPermi('system:dict:list')")
     @GetMapping("/list")
-    public TableDataInfo list(SysDictData dictData)
-    {
+    public TableDataInfo list(SysDictData dictData) {
         startPage();
         List<SysDictData> list = dictDataService.selectDictDataList(dictData);
         return getDataTable(list);
@@ -52,8 +51,7 @@ public class SysDictDataController extends BaseController
     @Log(title = "字典数据", businessType = BusinessType.EXPORT)
     @PreAuthorize("@ss.hasPermi('system:dict:export')")
     @PostMapping("/export")
-    public void export(HttpServletResponse response, SysDictData dictData)
-    {
+    public void export(HttpServletResponse response, SysDictData dictData) {
         List<SysDictData> list = dictDataService.selectDictDataList(dictData);
         ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class);
         util.exportExcel(response, list, "字典数据");
@@ -64,8 +62,7 @@ public class SysDictDataController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:dict:query')")
     @GetMapping(value = "/{dictCode}")
-    public AjaxResult getInfo(@PathVariable Long dictCode)
-    {
+    public AjaxResult getInfo(@PathVariable Long dictCode) {
         return success(dictDataService.selectDictDataById(dictCode));
     }
 
@@ -73,11 +70,9 @@ public class SysDictDataController extends BaseController
      * 根据字典类型查询字典数据信息
      */
     @GetMapping(value = "/type/{dictType}")
-    public AjaxResult dictType(@PathVariable String dictType)
-    {
+    public AjaxResult dictType(@PathVariable String dictType) {
         List<SysDictData> data = dictTypeService.selectDictDataByType(dictType);
-        if (StringUtils.isNull(data))
-        {
+        if (StringUtils.isNull(data)) {
             data = new ArrayList<SysDictData>();
         }
         return success(data);
@@ -89,8 +84,7 @@ public class SysDictDataController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:dict:add')")
     @Log(title = "字典数据", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@Validated @RequestBody SysDictData dict)
-    {
+    public AjaxResult add(@Validated @RequestBody SysDictData dict) {
         dict.setCreateBy(getUsername());
         return toAjax(dictDataService.insertDictData(dict));
     }
@@ -101,8 +95,7 @@ public class SysDictDataController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:dict:edit')")
     @Log(title = "字典数据", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@Validated @RequestBody SysDictData dict)
-    {
+    public AjaxResult edit(@Validated @RequestBody SysDictData dict) {
         dict.setUpdateBy(getUsername());
         return toAjax(dictDataService.updateDictData(dict));
     }
@@ -113,8 +106,7 @@ public class SysDictDataController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:dict:remove')")
     @Log(title = "字典类型", businessType = BusinessType.DELETE)
     @DeleteMapping("/{dictCodes}")
-    public AjaxResult remove(@PathVariable Long[] dictCodes)
-    {
+    public AjaxResult remove(@PathVariable Long[] dictCodes) {
         dictDataService.deleteDictDataByIds(dictCodes);
         return success();
     }

+ 13 - 23
nightFragrance-admin/src/main/java/com/ylx/web/controller/system/SysDictTypeController.java

@@ -2,6 +2,7 @@ package com.ylx.web.controller.system;
 
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
@@ -23,21 +24,19 @@ import com.ylx.common.utils.poi.ExcelUtil;
 import com.ylx.system.service.ISysDictTypeService;
 
 /**
- * 数据字典信息
+ * 字典类型
  *
  * @author ylx
  */
 @RestController
 @RequestMapping("/system/dict/type")
-public class SysDictTypeController extends BaseController
-{
+public class SysDictTypeController extends BaseController {
     @Autowired
     private ISysDictTypeService dictTypeService;
 
     @PreAuthorize("@ss.hasPermi('system:dict:list')")
     @GetMapping("/list")
-    public TableDataInfo list(SysDictType dictType)
-    {
+    public TableDataInfo list(SysDictType dictType) {
         startPage();
         List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
         return getDataTable(list);
@@ -46,8 +45,7 @@ public class SysDictTypeController extends BaseController
     @Log(title = "字典类型", businessType = BusinessType.EXPORT)
     @PreAuthorize("@ss.hasPermi('system:dict:export')")
     @PostMapping("/export")
-    public void export(HttpServletResponse response, SysDictType dictType)
-    {
+    public void export(HttpServletResponse response, SysDictType dictType) {
         List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
         ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class);
         util.exportExcel(response, list, "字典类型");
@@ -58,8 +56,7 @@ public class SysDictTypeController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:dict:query')")
     @GetMapping(value = "/{dictId}")
-    public AjaxResult getInfo(@PathVariable Long dictId)
-    {
+    public AjaxResult getInfo(@PathVariable Long dictId) {
         return success(dictTypeService.selectDictTypeById(dictId));
     }
 
@@ -69,10 +66,8 @@ public class SysDictTypeController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:dict:add')")
     @Log(title = "字典类型", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@Validated @RequestBody SysDictType dict)
-    {
-        if (!dictTypeService.checkDictTypeUnique(dict))
-        {
+    public AjaxResult add(@Validated @RequestBody SysDictType dict) {
+        if (!dictTypeService.checkDictTypeUnique(dict)) {
             return error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
         }
         dict.setCreateBy(getUsername());
@@ -85,10 +80,8 @@ public class SysDictTypeController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:dict:edit')")
     @Log(title = "字典类型", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@Validated @RequestBody SysDictType dict)
-    {
-        if (!dictTypeService.checkDictTypeUnique(dict))
-        {
+    public AjaxResult edit(@Validated @RequestBody SysDictType dict) {
+        if (!dictTypeService.checkDictTypeUnique(dict)) {
             return error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
         }
         dict.setUpdateBy(getUsername());
@@ -101,8 +94,7 @@ public class SysDictTypeController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:dict:remove')")
     @Log(title = "字典类型", businessType = BusinessType.DELETE)
     @DeleteMapping("/{dictIds}")
-    public AjaxResult remove(@PathVariable Long[] dictIds)
-    {
+    public AjaxResult remove(@PathVariable Long[] dictIds) {
         dictTypeService.deleteDictTypeByIds(dictIds);
         return success();
     }
@@ -113,8 +105,7 @@ public class SysDictTypeController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:dict:remove')")
     @Log(title = "字典类型", businessType = BusinessType.CLEAN)
     @DeleteMapping("/refreshCache")
-    public AjaxResult refreshCache()
-    {
+    public AjaxResult refreshCache() {
         dictTypeService.resetDictCache();
         return success();
     }
@@ -123,8 +114,7 @@ public class SysDictTypeController extends BaseController
      * 获取字典选择框列表
      */
     @GetMapping("/optionselect")
-    public AjaxResult optionselect()
-    {
+    public AjaxResult optionselect() {
         List<SysDictType> dictTypes = dictTypeService.selectDictTypeAll();
         return success(dictTypes);
     }

+ 109 - 96
nightFragrance-massage/src/main/java/com/ylx/massage/domain/MaTechnician.java

@@ -11,225 +11,238 @@ import com.ylx.common.core.domain.BaseEntity;
  * @author ylx
  * @date 2024-03-22
  */
-public class MaTechnician extends BaseEntity
-{
+public class MaTechnician extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
-    /** id */
+    /**
+     * id
+     */
     private Long id;
 
-    /** 姓名 */
+    /**
+     * 姓名
+     */
     @Excel(name = "姓名")
     private String teName;
 
-    /** 性别(0女1男) */
+    /**
+     * 性别(0女1男)
+     */
     @Excel(name = "性别(0女1男)")
     private Long teSex;
 
-    /** 电话 */
+    /**
+     * 电话
+     */
     @Excel(name = "电话")
     private String tePhone;
 
-    /** 地址 */
+    /**
+     * 地址
+     */
     @Excel(name = "地址")
     private String teAddress;
 
-    /** 年龄 */
+    /**
+     * 年龄
+     */
     @Excel(name = "年龄")
     private Long teAge;
 
-    /** 头像 */
+    /**
+     * 头像
+     */
     @Excel(name = "头像")
     private String teAvatar;
 
-    /** 生活照 */
+    /**
+     * 生活照
+     */
     @Excel(name = "生活照")
     private String lifePhotos;
 
-    /** 简介 */
+    /**
+     * 简介
+     */
     @Excel(name = "简介")
     private String teBrief;
 
-    /** 服务状态(0服务中,1可服务) */
+    /**
+     * 服务状态(0服务中,1可服务)
+     */
     @Excel(name = "服务状态(0服务中,1可服务)")
     private Long serviceState;
 
-    /** 是否在岗(0否1是) */
+    /**
+     * 是否在岗(0否1是)
+     */
     @Excel(name = "是否在岗(0否1是)")
     private Long postState;
 
-    /** 是否启用(0否1是) */
+    /**
+     * 是否启用(0否1是)
+     */
     @Excel(name = "是否启用(0否1是)")
     private Long teIsEnable;
 
-    /** 创建人 */
+    /**
+     * 创建人
+     */
     @Excel(name = "创建人")
     private Long createUser;
 
-    /** 修改人 */
+    /**
+     * 修改人
+     */
     @Excel(name = "修改人")
     private Long updateUser;
 
-    /** 是否删除(0否1是) */
+    /**
+     * 是否删除(0否1是)
+     */
     @Excel(name = "是否删除(0否1是)")
     private Long isDelete;
 
-    public void setId(Long id)
-    {
+    public void setId(Long id) {
         this.id = id;
     }
 
-    public Long getId()
-    {
+    public Long getId() {
         return id;
     }
-    public void setTeName(String teName)
-    {
+
+    public void setTeName(String teName) {
         this.teName = teName;
     }
 
-    public String getTeName()
-    {
+    public String getTeName() {
         return teName;
     }
-    public void setTeSex(Long teSex)
-    {
+
+    public void setTeSex(Long teSex) {
         this.teSex = teSex;
     }
 
-    public Long getTeSex()
-    {
+    public Long getTeSex() {
         return teSex;
     }
-    public void setTePhone(String tePhone)
-    {
+
+    public void setTePhone(String tePhone) {
         this.tePhone = tePhone;
     }
 
-    public String getTePhone()
-    {
+    public String getTePhone() {
         return tePhone;
     }
-    public void setTeAddress(String teAddress)
-    {
+
+    public void setTeAddress(String teAddress) {
         this.teAddress = teAddress;
     }
 
-    public String getTeAddress()
-    {
+    public String getTeAddress() {
         return teAddress;
     }
-    public void setTeAge(Long teAge)
-    {
+
+    public void setTeAge(Long teAge) {
         this.teAge = teAge;
     }
 
-    public Long getTeAge()
-    {
+    public Long getTeAge() {
         return teAge;
     }
-    public void setTeAvatar(String teAvatar)
-    {
+
+    public void setTeAvatar(String teAvatar) {
         this.teAvatar = teAvatar;
     }
 
-    public String getTeAvatar()
-    {
+    public String getTeAvatar() {
         return teAvatar;
     }
-    public void setLifePhotos(String lifePhotos)
-    {
+
+    public void setLifePhotos(String lifePhotos) {
         this.lifePhotos = lifePhotos;
     }
 
-    public String getLifePhotos()
-    {
+    public String getLifePhotos() {
         return lifePhotos;
     }
-    public void setTeBrief(String teBrief)
-    {
+
+    public void setTeBrief(String teBrief) {
         this.teBrief = teBrief;
     }
 
-    public String getTeBrief()
-    {
+    public String getTeBrief() {
         return teBrief;
     }
-    public void setServiceState(Long serviceState)
-    {
+
+    public void setServiceState(Long serviceState) {
         this.serviceState = serviceState;
     }
 
-    public Long getServiceState()
-    {
+    public Long getServiceState() {
         return serviceState;
     }
-    public void setPostState(Long postState)
-    {
+
+    public void setPostState(Long postState) {
         this.postState = postState;
     }
 
-    public Long getPostState()
-    {
+    public Long getPostState() {
         return postState;
     }
-    public void setTeIsEnable(Long teIsEnable)
-    {
+
+    public void setTeIsEnable(Long teIsEnable) {
         this.teIsEnable = teIsEnable;
     }
 
-    public Long getTeIsEnable()
-    {
+    public Long getTeIsEnable() {
         return teIsEnable;
     }
-    public void setCreateUser(Long createUser)
-    {
+
+    public void setCreateUser(Long createUser) {
         this.createUser = createUser;
     }
 
-    public Long getCreateUser()
-    {
+    public Long getCreateUser() {
         return createUser;
     }
-    public void setUpdateUser(Long updateUser)
-    {
+
+    public void setUpdateUser(Long updateUser) {
         this.updateUser = updateUser;
     }
 
-    public Long getUpdateUser()
-    {
+    public Long getUpdateUser() {
         return updateUser;
     }
-    public void setIsDelete(Long isDelete)
-    {
+
+    public void setIsDelete(Long isDelete) {
         this.isDelete = isDelete;
     }
 
-    public Long getIsDelete()
-    {
+    public Long getIsDelete() {
         return isDelete;
     }
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("teName", getTeName())
-            .append("teSex", getTeSex())
-            .append("tePhone", getTePhone())
-            .append("teAddress", getTeAddress())
-            .append("teAge", getTeAge())
-            .append("teAvatar", getTeAvatar())
-            .append("lifePhotos", getLifePhotos())
-            .append("teBrief", getTeBrief())
-            .append("serviceState", getServiceState())
-            .append("postState", getPostState())
-            .append("teIsEnable", getTeIsEnable())
-            .append("createUser", getCreateUser())
-            .append("updateUser", getUpdateUser())
-            .append("createTime", getCreateTime())
-            .append("updateTime", getUpdateTime())
-            .append("isDelete", getIsDelete())
-            .toString();
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("teName", getTeName())
+                .append("teSex", getTeSex())
+                .append("tePhone", getTePhone())
+                .append("teAddress", getTeAddress())
+                .append("teAge", getTeAge())
+                .append("teAvatar", getTeAvatar())
+                .append("lifePhotos", getLifePhotos())
+                .append("teBrief", getTeBrief())
+                .append("serviceState", getServiceState())
+                .append("postState", getPostState())
+                .append("teIsEnable", getTeIsEnable())
+                .append("createUser", getCreateUser())
+                .append("updateUser", getUpdateUser())
+                .append("createTime", getCreateTime())
+                .append("updateTime", getUpdateTime())
+                .append("isDelete", getIsDelete())
+                .toString();
     }
 }

+ 37 - 4
nightFragrance-massage/src/main/java/com/ylx/project/controller/ProjectController.java

@@ -4,10 +4,12 @@ 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.common.exception.ServiceException;
 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.ProjectDetailVo;
 import com.ylx.project.domain.vo.ProjectPageVo;
 import com.ylx.project.service.ProjectService;
 import io.swagger.annotations.Api;
@@ -39,8 +41,13 @@ public class ProjectController {
     @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);
+        try {
+            Page<ProjectPageVo> pageData = this.projectService.list(page, dto);
+            return R.ok(pageData);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("分页查询项目异常", e);
+        }
     }
 
     /**
@@ -69,8 +76,34 @@ public class ProjectController {
     @Log(title = "新增项目", businessType = BusinessType.INSERT)
     @PostMapping
     public R<?> add(@Validated @RequestBody ProjectAddDTO dto) {
-        this.projectService.add(dto);
-        return R.ok();
+        try {
+            this.projectService.add(dto);
+            return R.ok();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("新增项目失败", e);
+        }
+    }
+
+    /**
+     * 根据主键ID查询项目详情信息。
+     *
+     * @param id 项目ID
+     * @return 项目详情信息
+     */
+    @PreAuthorize("@ss.hasPermi('project:list')")
+    @ApiOperation("根据主键ID查询项目详情")
+    @GetMapping("/{id}")
+    public R<ProjectDetailVo> getDetailsInfo(@PathVariable("id") Long id) {
+        try {
+            ProjectDetailVo vo = this.projectService.getDetailsInfo(id);
+            return R.ok(vo);
+        } catch (ServiceException e) {
+            throw e;
+        } catch (Exception e) {
+            log.error("根据主键ID查询项目详情异常", e);
+            throw new RuntimeException("根据主键ID查询项目详情异常", e);
+        }
     }
 
 }

+ 6 - 11
nightFragrance-massage/src/main/java/com/ylx/project/domain/Project.java

@@ -21,17 +21,18 @@ public class Project extends BaseEntity {
     @ApiModelProperty("id")
     private Long id;
 
+    /**
+     * 服务类目ID
+     */
+    @ApiModelProperty("服务类目ID")
+    private Integer type;
+
     /**
      * 标题。
      */
     @ApiModelProperty("标题")
     private String title;
 
-    /**
-     * 项目分类。
-     */
-    @ApiModelProperty("项目分类")
-    private Integer type;
 
     /**
      * 封面图。
@@ -93,12 +94,6 @@ public class Project extends BaseEntity {
     @ApiModelProperty("价格是否自定义:0=否,1=是")
     private Integer isPriceCustom;
 
-    /**
-     * 标时是否自定义:0=否,1=是。
-     */
-    @ApiModelProperty("标时是否自定义:0=否,1=是")
-    private Integer isTimeCustom;
-
     /**
      * 项目亮点,关联亮点字典表的ID集合。
      */

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

@@ -63,9 +63,9 @@ public class ProjectAddDTO implements Serializable {
     @NotNull(message = "价格是否自定义不能为空")
     private Integer isPriceCustom;
 
-    @ApiModelProperty("标时是否自定义:0=否,1=是")
+    /*@ApiModelProperty("标时是否自定义:0=否,1=是")
     @NotNull(message = "标时是否自定义不能为空")
-    private Integer isTimeCustom;
+    private Integer isTimeCustom;*/
 
     @ApiModelProperty("项目亮点:关联亮点字典表的ID集合")
     @NotBlank(message = "项目亮点ID集合不能为空")

+ 13 - 1
nightFragrance-massage/src/main/java/com/ylx/project/domain/dto/ProjectSearchDTO.java

@@ -11,9 +11,21 @@ import java.io.Serializable;
 public class ProjectSearchDTO implements Serializable {
     private static final long serialVersionUID = -5571734478026852868L;
 
-    @ApiModelProperty("服务名称")
+    /**
+     * 项目标题
+     */
+    @ApiModelProperty("项目标题")
     private String title;
 
+    /**
+     * 状态: 0=上架, 1=下架
+     */
     @ApiModelProperty("状态: 0=上架, 1=下架")
     private Integer status;
+
+    /**
+     * 类目ID
+     */
+    @ApiModelProperty("类目ID")
+    private Integer type;
 }

+ 136 - 0
nightFragrance-massage/src/main/java/com/ylx/project/domain/vo/ProjectDetailVo.java

@@ -0,0 +1,136 @@
+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 ProjectDetailVo implements Serializable {
+    /**
+     * 序列化版本号。
+     */
+    private static final long serialVersionUID = -5476449557413382937L;
+
+    /**
+     * 主键ID。
+     */
+    @ApiModelProperty("id")
+    private Long id;
+
+    /**
+     * 项目标题。
+     */
+    @ApiModelProperty("标题")
+    private String title;
+
+    /**
+     * 项目分类ID。
+     */
+    @ApiModelProperty("项目分类ID")
+    private Integer type;
+
+    /**
+     * 项目分类名称。
+     */
+    @ApiModelProperty("项目分类名称")
+    private String typeName;
+
+    /**
+     * 项目封面图。
+     */
+    @ApiModelProperty("封面图")
+    private String cover;
+
+    /**
+     * 最低价。
+     */
+    @ApiModelProperty("最低价")
+    private BigDecimal priceMin;
+
+    /**
+     * 最高价。
+     */
+    @ApiModelProperty("最高价")
+    private BigDecimal priceMax;
+
+    /**
+     * 标注价格,即项目现价。
+     */
+    @ApiModelProperty("标注价格(现价)")
+    private BigDecimal price;
+
+
+    /**
+     * 标准服务时长。
+     */
+    @ApiModelProperty("标时")
+    private Integer standardDuration;
+
+    /**
+     * 计量单位,来源于字典数据。
+     */
+    @ApiModelProperty("计量单位(字典数据)")
+    private Integer unitType;
+
+    /**
+     * 商户分佣比例。
+     */
+    @ApiModelProperty("商户分佣比例")
+    private BigDecimal merchantShareRatio;
+
+    /**
+     * 是否推荐:0=否,1=是。
+     */
+    @ApiModelProperty("是否推荐:0=否,1=是")
+    private Integer isRecommended;
+
+    /**
+     * 价格是否自定义:0=否,1=是。
+     */
+    @ApiModelProperty("价格是否自定义:0=否,1=是")
+    private Integer isPriceCustom;
+
+    /**
+     * 是否上架:0=上架,1=下架。
+     */
+    @ApiModelProperty("是否上架: 0=上架, 1=下架")
+    private Integer status;
+
+    /**
+     * 项目亮点,关联亮点字典表的ID集合。
+     */
+    @ApiModelProperty("项目亮点:关联亮点字典表的ID集合")
+    private String highlightIds;
+
+    /**
+     * 项目适用人群。
+     */
+    @ApiModelProperty("适用人群")
+    private String targetAudience;
+
+    /**
+     * 项目详情,富文本内容。
+     */
+    @ApiModelProperty("项目详情 富文本")
+    private String detail;
+
+    /**
+     * 创建时间。
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+
+    /**
+     * 更新时间。
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("更新时间")
+    private Date updateTime;
+}

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

@@ -12,53 +12,104 @@ import java.util.Date;
 @Data
 @ApiModel("项目分页vo")
 public class ProjectPageVo implements Serializable {
+    /**
+     * 序列化版本号。
+     */
     private static final long serialVersionUID = -1987716391112070223L;
 
+    /**
+     * 主键ID。
+     */
     @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;
 
+    /**
+     * 状态:0=上架,1=下架。
+     */
     @ApiModelProperty("状态: 0=上架, 1=下架")
     private Integer status;
 
+    /**
+     * 是否推荐:0=否,1=是。
+     */
     @ApiModelProperty("是否推荐:0=否,1=是")
     private Integer isRecommended;
 
+    /**
+     * 价格是否自定义:0=否,1=是。
+     */
     @ApiModelProperty("价格是否自定义:0=否,1=是")
     private Integer isPriceCustom;
 
+    /**
+     * 标时是否自定义:0=否,1=是。
+     */
     @ApiModelProperty("标时是否自定义:0=否,1=是")
     private Integer isTimeCustom;
 
+    /**
+     * 项目亮点,关联亮点字典表的ID集合。
+     */
     @ApiModelProperty("项目亮点:关联亮点字典表的ID集合")
     private String highlightIds;
 
+    /**
+     * 项目适用人群。
+     */
     @ApiModelProperty("适用人群")
     private String targetAudience;
 
+    /**
+     * 创建时间。
+     */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 

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

@@ -7,6 +7,7 @@ import com.ylx.massage.domain.dto.ServiceOptionDTO;
 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.vo.ProjectDetailVo;
 import org.apache.ibatis.annotations.Param;
 
 public interface ProjectMapper extends BaseMapper<Project> {
@@ -15,4 +16,6 @@ public interface ProjectMapper extends BaseMapper<Project> {
 
 
     Page<ProductServiceOptionVO> selectServiceOptionsPage(Page page, @Param("dto") ServiceOptionDTO dto);
+
+    ProjectDetailVo selectProjectDetailById(@Param("id") Long id);
 }

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

@@ -11,6 +11,7 @@ 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.ProjectDetailVo;
 import com.ylx.project.domain.vo.ProjectPageVo;
 
 public interface ProjectService extends IService<Project> {
@@ -21,6 +22,8 @@ public interface ProjectService extends IService<Project> {
 
     void add(ProjectAddDTO dto);
 
+    ProjectDetailVo getDetailsInfo(Long id);
+
     IPage<ProductOptionVO> selectOptionUnionPage(Page page, OptionDTO dto);
 
     Page<ProductServiceOptionVO> selectServiceOptionsPage(Page page, ServiceOptionDTO dto);

+ 25 - 8
nightFragrance-massage/src/main/java/com/ylx/project/service/impl/ProjectServiceImpl.java

@@ -21,10 +21,12 @@ 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.ProjectDetailVo;
 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.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -37,19 +39,24 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
     @Override
     public Page<ProjectPageVo> list(Page<Project> page, ProjectSearchDTO dto) {
-
         LambdaQueryWrapper<Project> queryWrapper = new LambdaQueryWrapper<>();
-        if (ObjectUtil.isNotNull(dto.getTitle())) {
+        // 项目标题
+        if (StringUtils.isNotBlank(dto.getTitle())) {
             queryWrapper.like(Project::getTitle, dto.getTitle());
         }
+        // 状态
         if (ObjectUtil.isNotEmpty(dto.getStatus())) {
             queryWrapper.eq(Project::getStatus, dto.getStatus());
         }
-        queryWrapper.orderByDesc(Project::getCreateTime)
-                .orderByDesc(Project::getSortOrder);
+        // 类目ID
+        if (ObjectUtil.isNotEmpty(dto.getType())) {
+            queryWrapper.eq(Project::getType, dto.getType());
+        }
+        queryWrapper.orderByDesc(Project::getCreateTime).orderByDesc(Project::getSortOrder);
         Page<ProjectPageVo> pageData = new Page<>();
-        pageData.setSize(page.getSize());
         pageData.setCurrent(page.getCurrent());
+        pageData.setSize(page.getSize());
+
 
         Page<Project> projectPage = this.baseMapper.selectPage(page, queryWrapper);
         if (ObjectUtil.isNotNull(projectPage) && CollectionUtil.isNotEmpty(projectPage.getRecords())) {
@@ -66,11 +73,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     @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("参数有误,活动不存在");
+            throw new IllegalArgumentException("参数有误,项目不存在");
         }
 
         BeanUtil.copyProperties(dto, entity);
@@ -81,7 +87,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         if (!updateResult) {
             throw new ServiceException("更新项目失败");
         }
-
     }
 
     @Override
@@ -100,6 +105,18 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         }
     }
 
+    @Override
+    public ProjectDetailVo getDetailsInfo(Long id) {
+        if (ObjectUtil.isNull(id)) {
+            throw new ServiceException("项目ID不能为空");
+        }
+        ProjectDetailVo detailVo = this.baseMapper.selectProjectDetailById(id);
+        if (ObjectUtil.isNull(detailVo)) {
+            throw new ServiceException("项目不存在");
+        }
+        return detailVo;
+    }
+
     @Override
     public IPage<ProductOptionVO> selectOptionUnionPage(Page page, OptionDTO dto) {
         return baseMapper.selectOptionUnionPage(page, dto);

+ 8 - 2
nightFragrance-massage/src/main/java/com/ylx/servicecategory/domain/ServiceCategory.java

@@ -21,6 +21,12 @@ public class ServiceCategory {
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
+    /**
+     * 服务标签(1:按摩 2:陪玩)
+     */
+    @TableField("service_tag")
+    private Integer serviceTag;
+
     /**
      * 服务类目名称
      */
@@ -66,7 +72,7 @@ public class ServiceCategory {
     /**
      * 是否删除 0-否 1-是
      */
-    @TableField("is_deleted")
+    @TableField("is_delete")
     @TableLogic
-    private Integer isDeleted;
+    private Integer isDelete;
 }

+ 15 - 1
nightFragrance-massage/src/main/java/com/ylx/servicecategory/service/impl/ServiceCategoryServiceImpl.java

@@ -5,9 +5,12 @@ 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.StringUtils;
+import com.ylx.project.domain.Project;
+import com.ylx.project.mapper.ProjectMapper;
 import com.ylx.servicecategory.domain.ServiceCategory;
 import com.ylx.servicecategory.mapper.ServiceCategoryMapper;
 import com.ylx.servicecategory.service.ServiceCategoryService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
@@ -19,6 +22,10 @@ import java.util.List;
 @Service
 public class ServiceCategoryServiceImpl extends ServiceImpl<ServiceCategoryMapper, ServiceCategory> implements ServiceCategoryService {
 
+    @Autowired
+    private ProjectMapper projectMapper;
+
+
     /**
      * H5查询首页服务类目
      *
@@ -93,7 +100,7 @@ public class ServiceCategoryServiceImpl extends ServiceImpl<ServiceCategoryMappe
         serviceCategory.setId(null);
         serviceCategory.setCreateTime(now);
         serviceCategory.setUpdateTime(now);
-        serviceCategory.setIsDeleted(0);
+        serviceCategory.setIsDelete(0);
 
         int insertResult = this.baseMapper.insertServiceCategory(serviceCategory);
         if (insertResult <= 0) {
@@ -139,6 +146,13 @@ public class ServiceCategoryServiceImpl extends ServiceImpl<ServiceCategoryMappe
         if (dbServiceCategory == null) {
             throw new ServiceException("服务类目不存在");
         }
+        //检查当前服务类目下是否有项目
+        LambdaQueryWrapper<Project> projectQueryWrapper = new LambdaQueryWrapper<>();
+        projectQueryWrapper.eq(Project::getType, id);
+        List<Project> projectList = projectMapper.selectList(projectQueryWrapper);
+        if (!projectList.isEmpty()) {
+            throw new ServiceException("服务类目下有项目,不能删除");
+        }
 
         int deleteResult = this.baseMapper.deleteServiceCategoryById(id);
         if (deleteResult <= 0) {

+ 50 - 1
nightFragrance-massage/src/main/resources/mapper/project/ProjectMapper.xml

@@ -50,6 +50,55 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result column="merchantId" property="merchantId"/>
     </resultMap>
 
+    <resultMap id="ProjectDetailVoMap" type="com.ylx.project.domain.vo.ProjectDetailVo">
+        <id column="id" property="id"/>
+        <result column="title" property="title"/>
+        <result column="type" property="type"/>
+        <result column="type_name" property="typeName"/>
+        <result column="cover" property="cover"/>
+        <result column="price" property="price"/>
+        <result column="price_min" property="priceMin"/>
+        <result column="price_max" property="priceMax"/>
+        <result column="merchant_share_ratio" property="merchantShareRatio"/>
+        <result column="standard_duration" property="standardDuration"/>
+        <result column="unit_type" property="unitType"/>
+        <result column="status" property="status"/>
+        <result column="is_recommended" property="isRecommended"/>
+        <result column="is_price_custom" property="isPriceCustom"/>
+        <result column="highlight_ids" property="highlightIds"/>
+        <result column="target_audience" property="targetAudience"/>
+        <result column="detail" property="detail"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+
+    <select id="selectProjectDetailById" resultMap="ProjectDetailVoMap">
+        SELECT
+            p.id,
+            p.title AS title,
+            p.type,
+            sc.name AS type_name,
+            p.cover AS cover,
+            p.price AS price,
+            p.price_min,
+            p.price_max,
+            p.standard_duration,
+            p.unit_type,
+            p.merchant_share_ratio,
+            p.status,
+            p.is_recommended,
+            p.is_price_custom,
+            p.highlight_ids,
+            p.target_audience,
+            p.detail,
+            p.create_time,
+            p.update_time
+        FROM project p
+        LEFT JOIN service_category sc ON sc.id = p.type AND sc.is_delete = 0
+        WHERE p.id = #{id}
+          AND p.is_delete = 0
+    </select>
+
     <select id="selectServiceOptionsPage" resultMap="ServiceOptionsVOMap">
         SELECT
         p.id AS id,
@@ -120,4 +169,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
 
-</mapper>
+</mapper>

+ 12 - 21
nightFragrance-system/src/main/java/com/ylx/system/service/impl/SysDictDataServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ylx.system.service.impl;
 
 import java.util.List;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ylx.common.core.domain.entity.SysDictData;
@@ -14,8 +15,7 @@ import com.ylx.system.service.ISysDictDataService;
  * @author ylx
  */
 @Service
-public class SysDictDataServiceImpl implements ISysDictDataService
-{
+public class SysDictDataServiceImpl implements ISysDictDataService {
     @Autowired
     private SysDictDataMapper dictDataMapper;
 
@@ -26,21 +26,19 @@ public class SysDictDataServiceImpl implements ISysDictDataService
      * @return 字典数据集合信息
      */
     @Override
-    public List<SysDictData> selectDictDataList(SysDictData dictData)
-    {
+    public List<SysDictData> selectDictDataList(SysDictData dictData) {
         return dictDataMapper.selectDictDataList(dictData);
     }
 
     /**
      * 根据字典类型和字典键值查询字典数据信息
      *
-     * @param dictType 字典类型
+     * @param dictType  字典类型
      * @param dictValue 字典键值
      * @return 字典标签
      */
     @Override
-    public String selectDictLabel(String dictType, String dictValue)
-    {
+    public String selectDictLabel(String dictType, String dictValue) {
         return dictDataMapper.selectDictLabel(dictType, dictValue);
     }
 
@@ -51,8 +49,7 @@ public class SysDictDataServiceImpl implements ISysDictDataService
      * @return 字典数据
      */
     @Override
-    public SysDictData selectDictDataById(Long dictCode)
-    {
+    public SysDictData selectDictDataById(Long dictCode) {
         return dictDataMapper.selectDictDataById(dictCode);
     }
 
@@ -62,10 +59,8 @@ public class SysDictDataServiceImpl implements ISysDictDataService
      * @param dictCodes 需要删除的字典数据ID
      */
     @Override
-    public void deleteDictDataByIds(Long[] dictCodes)
-    {
-        for (Long dictCode : dictCodes)
-        {
+    public void deleteDictDataByIds(Long[] dictCodes) {
+        for (Long dictCode : dictCodes) {
             SysDictData data = selectDictDataById(dictCode);
             dictDataMapper.deleteDictDataById(dictCode);
             List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
@@ -80,11 +75,9 @@ public class SysDictDataServiceImpl implements ISysDictDataService
      * @return 结果
      */
     @Override
-    public int insertDictData(SysDictData data)
-    {
+    public int insertDictData(SysDictData data) {
         int row = dictDataMapper.insertDictData(data);
-        if (row > 0)
-        {
+        if (row > 0) {
             List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
             DictUtils.setDictCache(data.getDictType(), dictDatas);
         }
@@ -98,11 +91,9 @@ public class SysDictDataServiceImpl implements ISysDictDataService
      * @return 结果
      */
     @Override
-    public int updateDictData(SysDictData data)
-    {
+    public int updateDictData(SysDictData data) {
         int row = dictDataMapper.updateDictData(data);
-        if (row > 0)
-        {
+        if (row > 0) {
             List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
             DictUtils.setDictCache(data.getDictType(), dictDatas);
         }