From a4134b795c62fbb0688c80ec4bf193def3f2b82b Mon Sep 17 00:00:00 2001 From: Yen Date: Fri, 1 Nov 2024 18:04:23 +0800 Subject: [PATCH] =?UTF-8?q?opt:=20=E5=95=86=E5=93=81=E5=8F=8D=E9=A6=88?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qs/serve/common/model/dto/TreeNode.java | 3 +- .../com/qs/serve/common/util/TreeUtil.java | 7 +- .../controller/GoodsFeedbackController.java | 30 +++- .../GoodsFeedbackTypeController.java | 135 ++++++++++++++++++ .../modules/goods/entity/GoodsFeedback.java | 29 +++- .../goods/entity/GoodsFeedbackType.java | 97 +++++++++++++ .../goods/entity/bo/GoodsFeedbackBo.java | 29 +++- .../goods/entity/bo/GoodsFeedbackTypeBo.java | 11 ++ .../entity/vo/GoodsFeedbackTypeTreeVo.java | 20 +++ .../goods/entity/vo/GoodsFeedbackVo.java | 5 + .../goods/mapper/GoodsFeedbackTypeMapper.java | 14 ++ .../service/GoodsFeedbackTypeService.java | 14 ++ .../impl/GoodsFeedbackTypeServiceImpl.java | 22 +++ 13 files changed, 406 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/goods/controller/GoodsFeedbackTypeController.java create mode 100644 src/main/java/com/qs/serve/modules/goods/entity/GoodsFeedbackType.java create mode 100644 src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsFeedbackTypeBo.java create mode 100644 src/main/java/com/qs/serve/modules/goods/entity/vo/GoodsFeedbackTypeTreeVo.java create mode 100644 src/main/java/com/qs/serve/modules/goods/mapper/GoodsFeedbackTypeMapper.java create mode 100644 src/main/java/com/qs/serve/modules/goods/service/GoodsFeedbackTypeService.java create mode 100644 src/main/java/com/qs/serve/modules/goods/service/impl/GoodsFeedbackTypeServiceImpl.java diff --git a/src/main/java/com/qs/serve/common/model/dto/TreeNode.java b/src/main/java/com/qs/serve/common/model/dto/TreeNode.java index 817b8b58..cb4f4cc6 100644 --- a/src/main/java/com/qs/serve/common/model/dto/TreeNode.java +++ b/src/main/java/com/qs/serve/common/model/dto/TreeNode.java @@ -14,7 +14,8 @@ import java.util.List; public class TreeNode { protected String id; protected String parentId; - private Integer sort; + protected Integer nodeLevel; + protected Integer sort; protected List children = new ArrayList<>(); public void addChildren(TreeNode treeNode) { diff --git a/src/main/java/com/qs/serve/common/util/TreeUtil.java b/src/main/java/com/qs/serve/common/util/TreeUtil.java index 99dd8e31..2053ac81 100644 --- a/src/main/java/com/qs/serve/common/util/TreeUtil.java +++ b/src/main/java/com/qs/serve/common/util/TreeUtil.java @@ -47,7 +47,7 @@ public class TreeUtil { List trees = new ArrayList(); for (T treeNode : treeNodes) { if (root.equals(treeNode.getParentId())) { - trees.add(findChildren(treeNode, treeNodes)); + trees.add(findChildren(treeNode, treeNodes,1)); } } return trees; @@ -59,15 +59,16 @@ public class TreeUtil { * @param treeNodes * @return */ - public T findChildren(T treeNode, List treeNodes) { + public T findChildren(T treeNode, List treeNodes,int level) { for (T it : treeNodes) { if (treeNode.getId().equals(it.getParentId())) { if (treeNode.getChildren() == null) { treeNode.setChildren(new ArrayList<>()); } - treeNode.addChildren(findChildren(it, treeNodes)); + treeNode.addChildren(findChildren(it, treeNodes,level+1)); } } + treeNode.setNodeLevel(level); return treeNode; } diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsFeedbackController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsFeedbackController.java index cf8fceca..ad41bfe1 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsFeedbackController.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsFeedbackController.java @@ -5,16 +5,16 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qs.serve.common.model.annotation.SysLog; import com.qs.serve.common.model.dto.PageVo; import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.model.dto.TreeNode; import com.qs.serve.common.model.enums.BizType; import com.qs.serve.common.model.enums.SystemModule; -import com.qs.serve.common.util.AuthContextUtils; -import com.qs.serve.common.util.PageUtil; -import com.qs.serve.common.util.CopierUtil; -import com.qs.serve.common.util.StringUtils; +import com.qs.serve.common.util.*; +import com.qs.serve.modules.goods.entity.GoodsFeedbackType; import com.qs.serve.modules.goods.entity.GoodsSku; import com.qs.serve.modules.goods.entity.GoodsSpu; import com.qs.serve.modules.goods.entity.bo.GoodsFeedbackBo; import com.qs.serve.modules.goods.entity.vo.GoodsFeedbackVo; +import com.qs.serve.modules.goods.service.GoodsFeedbackTypeService; import com.qs.serve.modules.goods.service.GoodsSkuService; import com.qs.serve.modules.goods.service.GoodsSpuService; import com.qs.serve.modules.sys.service.SysPostUserService; @@ -27,8 +27,11 @@ import com.qs.serve.modules.goods.entity.GoodsFeedback; import com.qs.serve.modules.goods.service.GoodsFeedbackService; import javax.validation.Valid; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; /** * 商品 问题反馈 @@ -41,6 +44,7 @@ import java.util.List; @RequestMapping("goods/feedback") public class GoodsFeedbackController { + private GoodsFeedbackTypeService goodsFeedbackTypeService; private GoodsFeedbackService goodsFeedbackService; private SysPostUserService postUserService; private GoodsSkuService goodsSkuService; @@ -121,6 +125,24 @@ public class GoodsFeedbackController { List list = goodsSpuService.listByIds(Arrays.asList(feedbackVo.getSpuIds())); feedbackVo.setGoodSpuList(list); } + List goodsFeedbackTypes = new ArrayList<>(); + String typeId = feedbackVo.getFeedbackTypeId(); + while (true){ + if(typeId.equals(TreeUtil.DEFAULT_PID_STRING)){ + break; + } + GoodsFeedbackType goodsFeedbackType = goodsFeedbackTypeService.getById(typeId); + if(goodsFeedbackType==null){ + break; + } + goodsFeedbackTypes.add(goodsFeedbackType); + typeId = goodsFeedbackType.getPid(); + } + if(CollUtil.isNotEmpty(goodsFeedbackTypes)){ + Collections.reverse(goodsFeedbackTypes); + String string = goodsFeedbackTypes.stream().map(GoodsFeedbackType::getName).collect(Collectors.joining("/")); + feedbackVo.setFeedbackTypeNames(string); + } return R.ok(feedbackVo); } diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsFeedbackTypeController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsFeedbackTypeController.java new file mode 100644 index 00000000..5f417c48 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsFeedbackTypeController.java @@ -0,0 +1,135 @@ +package com.qs.serve.modules.goods.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qs.serve.common.model.annotation.SysLog; +import com.qs.serve.common.model.dto.PageVo; +import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.model.enums.BizType; +import com.qs.serve.common.model.enums.SystemModule; +import com.qs.serve.common.util.PageUtil; +import com.qs.serve.common.util.CopierUtil; +import com.qs.serve.common.util.StringUtils; +import com.qs.serve.common.util.TreeUtil; +import com.qs.serve.modules.biz.consts.GroupDataType; +import com.qs.serve.modules.bms.entity.vo.BmsRegionTreeVo; +import com.qs.serve.modules.goods.entity.bo.GoodsFeedbackTypeBo; +import com.qs.serve.modules.goods.entity.vo.GoodsFeedbackTypeTreeVo; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import com.qs.serve.modules.goods.entity.GoodsFeedbackType; +import com.qs.serve.modules.goods.service.GoodsFeedbackTypeService; + +import javax.validation.Valid; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 商品 问题反馈类型 + * @author YenHex + * @since 2024-11-01 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("goods/feedbackType") +public class GoodsFeedbackTypeController { + + private GoodsFeedbackTypeService goodsFeedbackTypeService; + + /** + * 列表 + * @param param + * @return + */ + @GetMapping("/options") + public R> getOptions(GoodsFeedbackType param){ + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(param); + lqw.eq(GoodsFeedbackType::getHideFlag,0) + .orderByDesc(GoodsFeedbackType::getSort); + List list = goodsFeedbackTypeService.list(lqw); + List treeVoList = list.stream().map(obj->{ + GoodsFeedbackTypeTreeVo treeNode = CopierUtil.copy(obj,new GoodsFeedbackTypeTreeVo()); + treeNode.setId(obj.getId()); + treeNode.setParentId(obj.getPid()); + treeNode.setSort(obj.getSort()); + return treeNode; + }).collect(Collectors.toList()); + return R.ok(TreeUtil.buildByRecursive(treeVoList,TreeUtil.DEFAULT_PID_STRING)); + } + + /** + * 列表 + * @param param + * @return + */ + @GetMapping("/tree") + public R> getList(GoodsFeedbackType param){ + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(param); + lqw.orderByDesc(GoodsFeedbackType::getSort); + List list = goodsFeedbackTypeService.list(lqw); + List treeVoList = list.stream().map(obj->{ + GoodsFeedbackTypeTreeVo treeNode = CopierUtil.copy(obj,new GoodsFeedbackTypeTreeVo()); + treeNode.setId(obj.getId()); + treeNode.setParentId(obj.getPid()); + treeNode.setSort(obj.getSort()); + return treeNode; + }).collect(Collectors.toList()); + return R.ok(TreeUtil.buildByRecursive(treeVoList,TreeUtil.DEFAULT_PID_STRING)); + } + + /** + * ID查询 + * @param id + * @return + */ + @GetMapping("/getById/{id}") + @SysLog(module = SystemModule.GOODS, title = "问题反馈类型", biz = BizType.QUERY) + public R getById(@PathVariable("id") String id){ + GoodsFeedbackType goodsFeedbackType = goodsFeedbackTypeService.getById(id); + return R.ok(goodsFeedbackType); + } + + /** + * 更新 + * @param param + * @return + */ + @PostMapping("/updateById") + @SysLog(module = SystemModule.GOODS, title = "问题反馈类型", biz = BizType.UPDATE) + public R updateById(@RequestBody @Valid GoodsFeedbackTypeBo param){ + GoodsFeedbackType entity = CopierUtil.copy(param,new GoodsFeedbackType()); + boolean result = goodsFeedbackTypeService.updateById(entity); + return R.isTrue(result); + } + + /** + * 新增 + * @param param + * @return + */ + @PostMapping("/save") + @SysLog(module = SystemModule.GOODS, title = "问题反馈类型", biz = BizType.INSERT) + public R save(@RequestBody @Valid GoodsFeedbackTypeBo param){ + GoodsFeedbackType entity = CopierUtil.copy(param,new GoodsFeedbackType()); + boolean result = goodsFeedbackTypeService.save(entity); + return R.isTrue(result); + } + + /** + * 删除 + * @param ids + * @return + */ + @DeleteMapping("/deleteById/{ids}") + @SysLog(module = SystemModule.GOODS, title = "问题反馈类型", biz = BizType.DELETE) + public R deleteById(@PathVariable("ids") String ids){ + List idsLong = StringUtils.splitIdLong(ids); + boolean result = goodsFeedbackTypeService.removeByIds(idsLong); + return R.isTrue(result); + } + +} + diff --git a/src/main/java/com/qs/serve/modules/goods/entity/GoodsFeedback.java b/src/main/java/com/qs/serve/modules/goods/entity/GoodsFeedback.java index 56695fe6..e5a938bb 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/GoodsFeedback.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/GoodsFeedback.java @@ -47,7 +47,7 @@ public class GoodsFeedback implements Serializable { /** 反馈类型 */ @Length(max = 255,message = "反馈类型长度不能超过255字") - private String feedbackType; + private String feedbackTypeId; /** 反馈内容 */ @Length(max = 255,message = "反馈内容长度不能超过255字") @@ -69,6 +69,33 @@ public class GoodsFeedback implements Serializable { @Length(max = 255,message = "备注长度不能超过255字") private String remark; + /** 地图地址 */ + private String address; + + /** 纬度 */ + private String localX; + + /** 经度 */ + private String localY; + + /** 省 */ + private String extProvince; + + /** 城市 */ + private String extCity; + + /** 区 */ + private String extRegionArea; + + /** 乡镇 */ + private String extTownship; + + /** 街道 */ + private String extStreet; + + /** 街道编号 */ + private String extStreetNumber; + /** 创建时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") diff --git a/src/main/java/com/qs/serve/modules/goods/entity/GoodsFeedbackType.java b/src/main/java/com/qs/serve/modules/goods/entity/GoodsFeedbackType.java new file mode 100644 index 00000000..73cd8275 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/entity/GoodsFeedbackType.java @@ -0,0 +1,97 @@ +package com.qs.serve.modules.goods.entity; + +import java.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotBlank; + +/** + * 问题反馈类型 实体类 + * @author YenHex + * @since 2024-11-01 + */ +@Data +@TableName("goods_feedback_type") +public class GoodsFeedbackType implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + @TableId(type = IdType.AUTO) + private String id; + + /** 反馈类目 */ + @Length(max = 255,message = "反馈类目长度不能超过255字") + private String name; + + /** 父级id */ + private String pid; + + /** 隐藏 */ + private Integer hideFlag; + + private Integer sort; + + /** 备注 */ + @Length(max = 255,message = "备注长度不能超过255字") + private String remark; + + /** 创建时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** 最后更新时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.UPDATE) + private LocalDateTime updateTime; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + + /** 创建人 */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** 更新人 */ + @TableField(fill = FieldFill.UPDATE) + private String updateBy; + + + public static GoodsFeedbackType toNewObject(GoodsFeedbackType source){ + GoodsFeedbackType feedbackType = new GoodsFeedbackType(); + feedbackType.setId(source.getId()); + feedbackType.setName(source.getName()); + feedbackType.setPid(source.getPid()); + feedbackType.setRemark(source.getRemark()); + feedbackType.setCreateTime(source.getCreateTime()); + feedbackType.setUpdateTime(source.getUpdateTime()); + feedbackType.setTenantId(source.getTenantId()); + feedbackType.setDelFlag(source.getDelFlag()); + feedbackType.setCreateBy(source.getCreateBy()); + feedbackType.setUpdateBy(source.getUpdateBy()); + return feedbackType; + } + +} + diff --git a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsFeedbackBo.java b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsFeedbackBo.java index 2b8e9eeb..767b3b3a 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsFeedbackBo.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsFeedbackBo.java @@ -25,7 +25,7 @@ public class GoodsFeedbackBo { private String[] imgUrls; /** 反馈类型 */ - private String feedbackType; + private String feedbackTypeId; /** 反馈内容 */ @Length(max = 255,message = "反馈内容长度不能超过255字") @@ -35,4 +35,31 @@ public class GoodsFeedbackBo { @Length(max = 255,message = "备注长度不能超过255字") private String remark; + /** 地图地址 */ + private String address; + + /** 纬度 */ + private String localX; + + /** 经度 */ + private String localY; + + /** 省 */ + private String extProvince; + + /** 城市 */ + private String extCity; + + /** 区 */ + private String extRegionArea; + + /** 乡镇 */ + private String extTownship; + + /** 街道 */ + private String extStreet; + + /** 街道编号 */ + private String extStreetNumber; + } diff --git a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsFeedbackTypeBo.java b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsFeedbackTypeBo.java new file mode 100644 index 00000000..98247a57 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsFeedbackTypeBo.java @@ -0,0 +1,11 @@ +package com.qs.serve.modules.goods.entity.bo; + +import lombok.Data; + +/** + * @author YenHex + * @since 2024/11/1 + */ +@Data +public class GoodsFeedbackTypeBo { +} diff --git a/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodsFeedbackTypeTreeVo.java b/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodsFeedbackTypeTreeVo.java new file mode 100644 index 00000000..60a89c5c --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodsFeedbackTypeTreeVo.java @@ -0,0 +1,20 @@ +package com.qs.serve.modules.goods.entity.vo; + +import com.qs.serve.common.model.dto.TreeNode; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +/** + * @author YenHex + * @since 2024/11/1 + */ +@Data +public class GoodsFeedbackTypeTreeVo extends TreeNode { + + /** 反馈类目 */ + private String name; + + /** 隐藏 */ + private Integer hideFlag; + +} diff --git a/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodsFeedbackVo.java b/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodsFeedbackVo.java index a8c2e32d..81e302cc 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodsFeedbackVo.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodsFeedbackVo.java @@ -18,4 +18,9 @@ public class GoodsFeedbackVo extends GoodsFeedback { List goodSpuList; + /** + * 反馈类型拼接,格式: 缺陷/数量不足 + */ + String feedbackTypeNames; + } diff --git a/src/main/java/com/qs/serve/modules/goods/mapper/GoodsFeedbackTypeMapper.java b/src/main/java/com/qs/serve/modules/goods/mapper/GoodsFeedbackTypeMapper.java new file mode 100644 index 00000000..ba53fa15 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/mapper/GoodsFeedbackTypeMapper.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.goods.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.goods.entity.GoodsFeedbackType; + +/** + * 问题反馈类型 Mapper + * @author YenHex + * @date 2024-11-01 + */ +public interface GoodsFeedbackTypeMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsFeedbackTypeService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsFeedbackTypeService.java new file mode 100644 index 00000000..1650ef34 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/service/GoodsFeedbackTypeService.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.goods.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.goods.entity.GoodsFeedbackType; + +/** + * 问题反馈类型 服务接口 + * @author YenHex + * @date 2024-11-01 + */ +public interface GoodsFeedbackTypeService extends IService { + +} + diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsFeedbackTypeServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsFeedbackTypeServiceImpl.java new file mode 100644 index 00000000..d950fdca --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsFeedbackTypeServiceImpl.java @@ -0,0 +1,22 @@ +package com.qs.serve.modules.goods.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.qs.serve.modules.goods.entity.GoodsFeedbackType; +import com.qs.serve.modules.goods.service.GoodsFeedbackTypeService; +import com.qs.serve.modules.goods.mapper.GoodsFeedbackTypeMapper; + +/** + * 问题反馈类型 服务实现类 + * @author YenHex + * @since 2024-11-01 + */ +@Slf4j +@Service +@AllArgsConstructor +public class GoodsFeedbackTypeServiceImpl extends ServiceImpl implements GoodsFeedbackTypeService { + +} +