Răsfoiți Sursa

常见问题后台

zoujiajian 2 ani în urmă
părinte
comite
e703b8dda2

+ 23 - 0
netflix-dao/src/main/java/com/cyksj/mapper/GoodsDonQaRelateMapper.java

@@ -0,0 +1,23 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.GoodsDon;
+import com.cyksj.model.entity.GoodsDonQaRelate;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: GoodsDonQaRelateMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/5/24 16:13
+ */
+public interface GoodsDonQaRelateMapper extends BaseMapper<GoodsDonQaRelate> {
+
+	@Select("select g.id,g.title from (select goods_id from goods_don_qa_relate where question_id = #{questionId}) gqr inner join goods_don g on g.id = gqr.goods_id")
+	List<GoodsDon> getQaGoodsByQaId(Long questionId);
+
+	void batchInsert(@Param("id") Long id, @Param("list") List<Long> goodsIds);
+}

+ 11 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDonQa.java

@@ -1,8 +1,13 @@
 package com.cyksj.model.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ejlchina.searcher.bean.DbIgnore;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * 项目名: yhlxj2
  * 文件名: GoodsDonQa
@@ -20,14 +25,20 @@ public class GoodsDonQa extends BaseEntity{
 
 	private String problem;
 
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String content;
 
 	/**
 	 * 跳转链接
 	 */
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String url;
 
 	private Boolean status;
 
 	private Boolean deleted;
+
+	@DbIgnore
+	@TableField(exist = false)
+	private List<GoodsDon> goodsDons;
 }

+ 43 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonQaView.java

@@ -0,0 +1,43 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: GoodsDonQaView
+ * 创建者: JavaZou
+ * 创建时间:2024/5/24 16:04
+ */
+@Getter
+@Setter
+@SearchBean(tables = "goods_don_qa gq left join goods_don_qa_relate gqr on gqr.question_id = gq.id" +
+		" left join goods_don g on g.id = gqr.goods_id",
+		where = "gq.deleted is true",
+		groupBy = "gq.*")
+public class GoodsDonQaView {
+	@DbField("gq.id")
+	private Long id;
+
+	@DbField("gq.type")
+	private Integer type;
+
+	@DbField("gq.problem")
+	private String problem;
+
+	@DbField("groups_concat(g.title)")
+	private String title;
+
+	@DbField("gq.status")
+	private Boolean status;
+
+	@DbField("gq.created_time")
+	private Date createdTime;
+
+	@DbField("gq.update_time")
+	private Date updateTime;
+}

+ 14 - 0
netflix-dao/src/main/resources/mapper/GoodsDonQaRelateMapper.xml

@@ -0,0 +1,14 @@
+<?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.cyksj.mapper.GoodsDonQaRelateMapper">
+
+
+    <insert id="batchInsert">
+        insert ignore into
+        goods_don_qa_relate(`question_id`,`goods_id`,`created_time`,`update_time`)
+        values
+        <foreach collection="list" item="item" separator=",">
+            (#{id},#{item},now(),now())
+        </foreach>
+    </insert>
+</mapper>

+ 16 - 0
netflix-service/src/main/java/com/cyksj/service/mange/GoodsDonQaService.java

@@ -0,0 +1,16 @@
+package com.cyksj.service.mange;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cyksj.model.entity.GoodsDonQa;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: GoodsDonQaService
+ * 创建者: JavaZou
+ * 创建时间:2024/5/24 15:57
+ */
+public interface GoodsDonQaService extends IService<GoodsDonQa> {
+	void saveOrdUpdateQa(GoodsDonQa goodsDonQa);
+
+	GoodsDonQa getDetailById(Long id);
+}

+ 81 - 0
netflix-service/src/main/java/com/cyksj/service/mange/goods/GoodsDonQaServiceImpl.java

@@ -0,0 +1,81 @@
+package com.cyksj.service.mange.goods;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.mapper.GoodsDonQaMapper;
+import com.cyksj.mapper.GoodsDonQaRelateMapper;
+import com.cyksj.model.entity.GoodsDon;
+import com.cyksj.model.entity.GoodsDonQa;
+import com.cyksj.model.entity.GoodsDonQaRelate;
+import com.cyksj.service.mange.GoodsDonQaService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: GoodsDonQaServiceImpl
+ * 创建者: JavaZou
+ * 创建时间:2024/5/24 15:57
+ */
+@Service
+@RequiredArgsConstructor
+public class GoodsDonQaServiceImpl extends ServiceImpl<GoodsDonQaMapper, GoodsDonQa> implements GoodsDonQaService {
+	private final GoodsDonQaRelateMapper goodsDonQaRelateMapper;
+
+	@Override
+	@Transactional(rollbackFor = Throwable.class)
+	public void saveOrdUpdateQa(GoodsDonQa goodsDonQa) {
+		checkQAParams(goodsDonQa);
+
+		Long id = goodsDonQa.getId();
+		List<Long> goodsIds = goodsDonQa.getGoodsDons().stream().map(GoodsDon::getId).collect(Collectors.toList());
+		if (id != null) {
+			goodsDonQaRelateMapper.delete(Wrappers.lambdaQuery(GoodsDonQaRelate.class).notIn(GoodsDonQaRelate::getGoodsId, goodsIds).eq(GoodsDonQaRelate::getQuestionId, id));
+		} else {
+			this.save(goodsDonQa);
+			id = goodsDonQa.getId();
+		}
+		goodsDonQaRelateMapper.batchInsert(id, goodsIds);
+	}
+
+	private void checkQAParams(GoodsDonQa goodsDonQa) {
+		String problem = goodsDonQa.getProblem();
+		Integer type = goodsDonQa.getType();
+		if (type == null || type < 1 || type > 2) {
+			throw BusinessRuntimeException.getInstance("请选择对应问题类型");
+		}
+		if (StrUtil.isEmpty(problem)) {
+			throw BusinessRuntimeException.getInstance("问题不为空");
+		}
+		String url = goodsDonQa.getUrl();
+		String content = goodsDonQa.getContent();
+		if (ObjectUtil.isAllEmpty(url, content)) {
+			throw BusinessRuntimeException.getInstance("请选择对应回答");
+		}
+		if (StrUtil.isNotBlank(url)) {
+			goodsDonQa.setContent(null);
+		}
+		if (StrUtil.isNotBlank(content)) {
+			goodsDonQa.setUrl(null);
+		}
+		List<GoodsDon> goodsDons = goodsDonQa.getGoodsDons();
+		if (CollUtil.isEmpty(goodsDons)) {
+			throw BusinessRuntimeException.getInstance("请选择对应展示平台");
+		}
+	}
+
+	@Override
+	public GoodsDonQa getDetailById(Long id) {
+		GoodsDonQa byId = this.getById(id);
+		byId.setGoodsDons(goodsDonQaRelateMapper.getQaGoodsByQaId(id));
+		return byId;
+	}
+}

+ 98 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/GoodsDonQuestionController.java

@@ -0,0 +1,98 @@
+package com.cyksj.web.controller.manage.goods;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.model.entity.GoodsDonQa;
+import com.cyksj.model.views.GoodsDonQaView;
+import com.cyksj.service.mange.GoodsDonQaService;
+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.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: GoodsDonQuestionController
+ * 创建者: JavaZou
+ * 创建时间:2024/5/24 15:52
+ */
+@RequestMapping("/manage/goods/question")
+@RestController
+@RequiredArgsConstructor
+public class GoodsDonQuestionController {
+
+	private final GoodsDonQaService goodsDonQaService;
+
+	private final BeanSearcher beanSearcher;
+
+	private final HttpServletRequest request;
+
+
+	@PostMapping("/post")
+	public Result<String> post(@RequestBody GoodsDonQa goodsDonQa) {
+		goodsDonQaService.saveOrdUpdateQa(goodsDonQa);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+
+	@DeleteMapping("/del/{id}")
+	public Result<String> delById(@PathVariable Long id) {
+		GoodsDonQa byId = goodsDonQaService.getById(id);
+		if (byId != null && byId.getDeleted()) {
+			byId.setDeleted(false);
+			goodsDonQaService.updateById(byId);
+		}
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	@PutMapping("/update")
+	public Result<String> update(@RequestBody GoodsDonQa goodsDonQa) {
+		goodsDonQaService.saveOrdUpdateQa(goodsDonQa);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+
+	/**
+	 * 上下架
+	 */
+	@PutMapping("/update/status/{id}")
+	public Result<String> updateStatusById(@PathVariable Long id) {
+		GoodsDonQa byId = goodsDonQaService.getById(id);
+		if (byId != null) {
+			byId.setStatus(!byId.getStatus());
+			goodsDonQaService.updateById(byId);
+		}
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	/**
+	 * 批量上下架
+	 */
+	@PutMapping("/update/status/batch")
+	public Result<String> batchUpdateStatusByIds(List<Long> ids, Boolean status) {
+		goodsDonQaService.update(null, Wrappers.lambdaUpdate(GoodsDonQa.class)
+				.set(GoodsDonQa::getStatus, status)
+				.ne(GoodsDonQa::getStatus, status)
+				.in(GoodsDonQa::getId, ids)
+				.eq(GoodsDonQa::getDeleted, 1));
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+
+	@GetMapping("/get")
+	public Result<SearchResult<GoodsDonQaView>> get() {
+		SearchResult<GoodsDonQaView> search = beanSearcher.search(GoodsDonQaView.class, MapUtils.flatBuilder(request.getParameterMap()).orderBy(GoodsDonQaView::getUpdateTime).desc().build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+
+	@GetMapping("/get/detail/{id}")
+	public Result<GoodsDonQa> getDetailById(@PathVariable Long id) {
+		GoodsDonQa byId = goodsDonQaService.getDetailById(id);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(byId);
+	}
+}