zoujiajian пре 3 година
родитељ
комит
d5f020250f

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/help/HelpQuestionClassificationMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.manage.help;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.HelpQuestionClassification;
+
+/*
+ *项目名: netflix
+ *文件名: HelpQuestionClassification
+ *创建者: JavaZou
+ *创建时间:2022/12/7 10:20
+ */
+public interface HelpQuestionClassificationMapper extends BaseMapper<HelpQuestionClassification> {
+}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/help/HelpQuestionMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.manage.help;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.HelpQuestion;
+
+/*
+ *项目名: netflix
+ *文件名: HelpQuestion
+ *创建者: JavaZou
+ *创建时间:2022/12/7 10:21
+ */
+public interface HelpQuestionMapper extends BaseMapper<HelpQuestion> {
+}

+ 26 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/HelpQuestion.java

@@ -0,0 +1,26 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: HelpQuestion
+ *创建者: JavaZou
+ *创建时间:2022/12/7 10:12
+ */
+@Getter
+@Setter
+public class HelpQuestion extends BaseEntity{
+	private Long classificationId;
+
+	private String name;
+
+	private String content;
+
+	private Integer sort;
+
+	private Boolean status;
+
+	private Boolean deleted;
+}

+ 26 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/HelpQuestionClassification.java

@@ -0,0 +1,26 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: HelpQuestionClassification
+ *创建者: JavaZou
+ *创建时间:2022/12/7 10:11
+ */
+@Getter
+@Setter
+public class HelpQuestionClassification extends BaseEntity{
+	private Long goodsId;
+
+	private String name;
+
+	private String logo;
+
+	private Integer sort;
+
+	private Boolean status;
+
+	private Boolean deleted;
+}

+ 39 - 0
netflix-dao/src/main/java/com/cyksj/model/views/HelpQuestionClassificationView.java

@@ -0,0 +1,39 @@
+package com.cyksj.model.views;
+
+import com.cyksj.model.entity.HelpQuestion;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/*
+ *项目名: netflix
+ *文件名: HelpQuestionClassificationView
+ *创建者: JavaZou
+ *创建时间:2022/12/7 11:06
+ */
+@Getter
+@Setter
+@SearchBean(tables = "help_question_classification hc left join goods_don gd on gd.id = hc.goods_id" +
+		" left join help_question hq on hq.classification_id = hc.id",
+where = "hc.status is true and hc.deleted is true and hq.deleted is true and hq.status is true and hq.id is not null")
+public class HelpQuestionClassificationView {
+
+	@DbField("hc.id")
+	private Long id;
+
+	@DbField("hc.name")
+	private String name;
+
+	@DbField("if(gd.id is null,hc.logo,gd.logo)")
+	private String logo;
+
+	@DbField("hc.sort")
+	private Integer sort;
+
+	@DbIgnore
+	private List<HelpQuestion> questions;
+}

+ 20 - 0
netflix-service/src/main/java/com/cyksj/service/sys/SysHelpService.java

@@ -0,0 +1,20 @@
+package com.cyksj.service.sys;
+
+import com.cyksj.model.entity.HelpQuestion;
+import com.cyksj.model.entity.HelpQuestionClassification;
+
+/*
+ *项目名: netflix
+ *文件名: SysHelpService
+ *创建者: JavaZou
+ *创建时间:2022/12/7 10:20
+ */
+public interface SysHelpService {
+	void postQuestionClassification(HelpQuestionClassification helpQuestionClassification);
+
+	void editQuestionClassification(HelpQuestionClassification helpQuestionClassification);
+
+	void saveHelpQuestion(HelpQuestion helpQuestion);
+
+	void editHelpQuestion(HelpQuestion helpQuestion);
+}

+ 98 - 0
netflix-service/src/main/java/com/cyksj/service/sys/impl/SysHelpServiceImpl.java

@@ -0,0 +1,98 @@
+package com.cyksj.service.sys.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.mapper.GoodsDonMapper;
+import com.cyksj.mapper.manage.help.HelpQuestionClassificationMapper;
+import com.cyksj.mapper.manage.help.HelpQuestionMapper;
+import com.cyksj.model.entity.GoodsDon;
+import com.cyksj.model.entity.HelpQuestion;
+import com.cyksj.model.entity.HelpQuestionClassification;
+import com.cyksj.service.sys.SysHelpService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/*
+ *项目名: netflix
+ *文件名: SysHelpServiceImpl
+ *创建者: JavaZou
+ *创建时间:2022/12/7 10:20
+ */
+@Service
+@RequiredArgsConstructor
+public class SysHelpServiceImpl implements SysHelpService {
+	private final GoodsDonMapper goodsDonMapper;
+
+	private final HelpQuestionClassificationMapper classificationMapper;
+
+	private final HelpQuestionMapper helpQuestionMapper;
+
+	@Override
+	public void postQuestionClassification(HelpQuestionClassification helpQuestionClassification) {
+		if (StrUtil.isEmpty(helpQuestionClassification.getName())) {
+			throw BusinessRuntimeException.getInstance("分类名称不能为空");
+		}
+		if (helpQuestionClassification.getGoodsId() != null) {
+			GoodsDon goodsDon = goodsDonMapper.selectById(helpQuestionClassification.getGoodsId());
+			if (goodsDon == null || !goodsDon.getDeleted()) {
+				throw BusinessRuntimeException.getInstance("所选平台不存在");
+			}
+			if (!goodsDon.getStatus()) {
+				throw BusinessRuntimeException.getInstance("所选平台未上架");
+			}
+			HelpQuestionClassification exits = classificationMapper.selectOne(Wrappers.lambdaQuery(HelpQuestionClassification.class)
+					.eq(HelpQuestionClassification::getGoodsId, helpQuestionClassification.getGoodsId())
+					.eq(HelpQuestionClassification::getDeleted, true)
+					.select(HelpQuestionClassification::getId)
+					.last("limit 1"));
+			if (exits != null) {
+				throw BusinessRuntimeException.getInstance("已关联的该平台问题分类");
+			}
+		}
+		if (helpQuestionClassification.getGoodsId() == null && StrUtil.isEmpty(helpQuestionClassification.getLogo())) {
+			throw BusinessRuntimeException.getInstance("未关联平台,请上传对应问题分类logo");
+		}
+		classificationMapper.insert(helpQuestionClassification);
+	}
+
+	@Override
+	public void editQuestionClassification(HelpQuestionClassification helpQuestionClassification) {
+		if (helpQuestionClassification.getId() == null) {
+			throw BusinessRuntimeException.getInstance("id error");
+		}
+		HelpQuestionClassification exits = classificationMapper.selectById(helpQuestionClassification.getId());
+		if (exits == null || !exits.getDeleted()) {
+			throw BusinessRuntimeException.getInstance("分类已被删除");
+		}
+		classificationMapper.updateById(helpQuestionClassification);
+	}
+
+	@Override
+	public void saveHelpQuestion(HelpQuestion helpQuestion) {
+		if (ObjectUtil.hasEmpty(helpQuestion.getClassificationId(), helpQuestion.getName(), helpQuestion.getContent())) {
+			throw BusinessRuntimeException.getInstance("请补充必填项");
+		}
+		HelpQuestionClassification classification = classificationMapper.selectById(helpQuestion.getClassificationId());
+		if (classification == null || !classification.getDeleted()) {
+			throw BusinessRuntimeException.getInstance("分类不存在");
+		}
+		helpQuestionMapper.insert(helpQuestion);
+	}
+
+	@Override
+	public void editHelpQuestion(HelpQuestion helpQuestion) {
+		if (helpQuestion.getId() == null) {
+			throw BusinessRuntimeException.getInstance("id error");
+		}
+		HelpQuestion exits = helpQuestionMapper.selectById(helpQuestion.getId());
+		if (exits == null || !exits.getDeleted()) {
+			throw BusinessRuntimeException.getInstance("问题已被删除");
+		}
+		if (helpQuestion.getClassificationId() != null && !exits.getClassificationId().equals(helpQuestion.getClassificationId())) {
+			throw BusinessRuntimeException.getInstance("问题所属分类无法修改");
+		}
+		helpQuestionMapper.updateById(helpQuestion);
+	}
+}

+ 50 - 0
netflix-web/src/main/java/com/cyksj/web/controller/help/HelpController.java

@@ -0,0 +1,50 @@
+package com.cyksj.web.controller.help;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.manage.help.HelpQuestionMapper;
+import com.cyksj.model.entity.HelpQuestion;
+import com.cyksj.model.views.HelpQuestionClassificationView;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+/*
+ *项目名: netflix
+ *文件名: HelpController
+ *创建者: JavaZou
+ *创建时间:2022/12/7 11:04
+ */
+@RestController
+@RequestMapping("/applet/help")
+@RequiredArgsConstructor
+public class HelpController {
+	private final BeanSearcher beanSearcher;
+
+	private final HelpQuestionMapper helpQuestionMapper;
+
+	/**
+	 * 问题分类列表
+	 */
+	@GetMapping("/get")
+	public Result<SearchResult<HelpQuestionClassificationView>> get(HttpServletRequest request) {
+		SearchResult<HelpQuestionClassificationView> search = beanSearcher.search(HelpQuestionClassificationView.class,
+				MapUtils.flatBuilder(request.getParameterMap())
+						.orderBy(HelpQuestionClassificationView::getSort).desc()
+						.build());
+		search.getDataList().forEach(data -> {
+			data.setQuestions(helpQuestionMapper.selectList(Wrappers.lambdaQuery(HelpQuestion.class)
+					.eq(HelpQuestion::getClassificationId, data.getId())
+					.eq(HelpQuestion::getDeleted, true)
+					.orderByDesc(HelpQuestion::getSort)));
+		});
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+}

+ 133 - 0
netflix-web/src/main/java/com/cyksj/web/controller/sys/SysConfigController.java

@@ -1,11 +1,17 @@
 package com.cyksj.web.controller.sys;
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.manage.help.HelpQuestionClassificationMapper;
+import com.cyksj.mapper.manage.help.HelpQuestionMapper;
+import com.cyksj.model.entity.HelpQuestion;
+import com.cyksj.model.entity.HelpQuestionClassification;
 import com.cyksj.model.entity.SysConfig;
 import com.cyksj.service.sys.SysConfigService;
+import com.cyksj.service.sys.SysHelpService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
@@ -22,6 +28,12 @@ public class SysConfigController {
 
     private final SysConfigService sysConfigService;
 
+    private final SysHelpService sysHelpService;
+
+    private final HelpQuestionClassificationMapper classificationMapper;
+
+    private final HelpQuestionMapper helpQuestionMapper;
+
     @GetMapping("/get")
     public Result<SysConfig> get(String key){
         SysConfig sysConfig = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class).eq(SysConfig::getSysKey, key).last(" limit 1"));
@@ -54,4 +66,125 @@ public class SysConfigController {
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
+    /**
+     * 新增问题分类
+     */
+    @PostMapping("/help/question/classification")
+    public Result<String> saveHelpQuestionClassification(@RequestBody HelpQuestionClassification helpQuestionClassification) {
+        sysHelpService.postQuestionClassification(helpQuestionClassification);
+        return GatewayResponse.SUCCESS.newBuilder().toResult("新增问题分类成功");
+    }
+
+    /**
+     * 删除问题分类
+     */
+    @DeleteMapping("/help/question/classification/{id}")
+    public Result<String> deleteHelpQuestionClassificationById(@PathVariable Long id) {
+        HelpQuestionClassification helpQuestionClassification = classificationMapper.selectById(id);
+        if (helpQuestionClassification != null) {
+            helpQuestionClassification.setDeleted(false);
+            classificationMapper.updateById(helpQuestionClassification);
+        }
+        return GatewayResponse.SUCCESS.newBuilder().toResult("删除问题分类成功");
+    }
+
+    /**
+     * 编辑问题分类
+     */
+    @PutMapping("/help/question/classification")
+    public Result<String> editHelpQuestionClassification(@RequestBody HelpQuestionClassification helpQuestionClassification) {
+        sysHelpService.editQuestionClassification(helpQuestionClassification);
+        return GatewayResponse.SUCCESS.newBuilder().toResult("新增问题分类成功");
+    }
+
+    /**
+     * 问题分类列表
+     */
+    @GetMapping("/help/question/classification")
+    public Result<Page<HelpQuestionClassification>> saveHelpQuestionClassification(@RequestParam(defaultValue = "1") Integer start, @RequestParam(defaultValue = "5") Integer limit) {
+	    Page<HelpQuestionClassification> page = classificationMapper.selectPage(new Page<>(start, limit), Wrappers.lambdaQuery(HelpQuestionClassification.class)
+			    .eq(HelpQuestionClassification::getDeleted, true)
+			    .orderByDesc(HelpQuestionClassification::getSort));
+        return GatewayResponse.SUCCESS.newBuilder().toResult(page);
+    }
+
+    /**
+     * 上下架分类
+     */
+    @PutMapping("/help/question/classification/status/{id}")
+    public Result<String> updateHelpQuestionClassificationStatus(@PathVariable Long id) {
+	    HelpQuestionClassification classification = classificationMapper.selectById(id);
+	    if (classification == null || !classification.getDeleted()) {
+		    throw BusinessRuntimeException.getInstance("分类不存在");
+	    }
+	    classification.setStatus(!classification.getStatus());
+	    classificationMapper.updateById(classification);
+	    return GatewayResponse.SUCCESS.newBuilder().toResult("操作成功");
+    }
+
+	/**
+	 * 新增问题
+	 */
+	@PostMapping("/help/question")
+	public Result<String> saveHelpQuestion(@RequestBody HelpQuestion helpQuestion) {
+		sysHelpService.saveHelpQuestion(helpQuestion);
+		return GatewayResponse.SUCCESS.newBuilder().toResult("新增问题成功");
+	}
+
+    /**
+     * 删除问题
+     */
+    @DeleteMapping("/help/question/{id}")
+    public Result<String> deleteHelpQuestionById(@PathVariable Long id) {
+	    HelpQuestion helpQuestion = helpQuestionMapper.selectById(id);
+	    if (helpQuestion == null || !helpQuestion.getDeleted()) {
+		    throw BusinessRuntimeException.getInstance("问题不存在");
+	    }
+	    helpQuestion.setDeleted(false);
+	    helpQuestionMapper.updateById(helpQuestion);
+	    return GatewayResponse.SUCCESS.newBuilder().toResult("删除问题成功");
+    }
+
+    /**
+     * 修改问题
+     */
+    @PutMapping("/help/question")
+    public Result<String> editHelpQuestion(@RequestBody HelpQuestion helpQuestion) {
+	    sysHelpService.editHelpQuestion(helpQuestion);
+	    return GatewayResponse.SUCCESS.newBuilder().toResult("编辑问题成功");
+    }
+
+    /**
+     * 问题列表
+     */
+    @GetMapping("/help/question")
+    public Result<Page<HelpQuestion>> saveHelpQuestion(Long classificationId, @RequestParam(defaultValue = "1") Integer start, @RequestParam(defaultValue = "5") Integer limit) {
+	    if (classificationId == null) {
+		    throw BusinessRuntimeException.getInstance("问题分类id为空");
+	    }
+	    HelpQuestionClassification helpQuestionClassification = classificationMapper.selectById(classificationId);
+	    if (helpQuestionClassification == null || !helpQuestionClassification.getDeleted()) {
+		    throw BusinessRuntimeException.getInstance("该分类已被删除");
+	    }
+	    Page<HelpQuestion> page = helpQuestionMapper.selectPage(new Page<>(start, limit),
+			    Wrappers.lambdaQuery(HelpQuestion.class)
+					    .eq(HelpQuestion::getClassificationId, classificationId)
+					    .eq(HelpQuestion::getDeleted, true)
+					    .orderByDesc(HelpQuestion::getSort));
+	    return GatewayResponse.SUCCESS.newBuilder().toResult(page);
+    }
+
+    /**
+     * 上下架问题
+     */
+    @PutMapping("/help/question/status/{id}")
+    public Result<String> saveHelpQuestion(@PathVariable Long id) {
+	    HelpQuestion helpQuestion = helpQuestionMapper.selectById(id);
+	    if (helpQuestion == null || !helpQuestion.getDeleted()) {
+		    throw BusinessRuntimeException.getInstance("问题不存在");
+	    }
+	    helpQuestion.setStatus(!helpQuestion.getStatus());
+	    helpQuestionMapper.updateById(helpQuestion);
+	    return GatewayResponse.SUCCESS.newBuilder().toResult("操作成功");
+    }
 }