diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsChannelPointController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsChannelPointController.java index d891640b..73300653 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsChannelPointController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsChannelPointController.java @@ -6,8 +6,10 @@ 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.CopierUtil; import com.qs.serve.common.util.PageUtil; import com.qs.serve.modules.bms.entity.BmsChannel; +import com.qs.serve.modules.bms.entity.bo.BmsChannelPointBo; import com.qs.serve.modules.bms.service.BmsChannelService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -84,8 +86,10 @@ public class BmsChannelPointController { @PostMapping("/updateById") @SysLog(module = SystemModule.BASE, title = "渠道站点", biz = BizType.UPDATE) @PreAuthorize("hasRole('bms:channelPoint:update')") - public R updateById(@RequestBody @Valid BmsChannelPoint param){ - boolean result = bmsChannelPointService.updateById(param); + public R updateById(@RequestBody @Valid BmsChannelPointBo param){ + BmsChannelPoint channelPoint = CopierUtil.copy(param,new BmsChannelPoint()); + //todo 祖级树 + boolean result = bmsChannelPointService.updateById(channelPoint); return R.isTrue(result); } diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java index 4daf65c1..b993d47f 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java @@ -180,7 +180,17 @@ public class BmsRegionController { bmsRegionService.updateById(param); } } - bmsRegionService.flushAllLevel(); + bmsRegionService.flushAllLevel(false); + return R.ok(); + } + + /** + * 【dev】测试接口,更新祖级数据 + * @return + */ + @GetMapping("/updateLevelDev") + public R editBatch(){ + bmsRegionService.flushAllLevel(true); return R.ok(); } diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectController.java new file mode 100644 index 00000000..13dd24cc --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectController.java @@ -0,0 +1,112 @@ +package com.qs.serve.modules.bms.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.CopierUtil; +import com.qs.serve.common.util.PageUtil; +import com.qs.serve.common.util.TreeUtil; +import com.qs.serve.modules.bms.entity.vo.BmsRegionTreeVo; +import com.qs.serve.modules.bms.entity.vo.BmsSubjectTreeVo; +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.bms.entity.BmsSubject; +import com.qs.serve.modules.bms.service.BmsSubjectService; + +import javax.validation.Valid; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 基础档案 科目 + * @author YenHex + * @since 2022-11-07 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("bms/subject") +public class BmsSubjectController { + + private BmsSubjectService bmsSubjectService; + + /** + * 翻页 + * @param param + * @return + */ + @GetMapping("/tree") + @PreAuthorize("hasRole('bms:subject:query')") + public R> getPage(BmsSubject param){ + LambdaQueryWrapper subjectWrapper = new LambdaQueryWrapper<>(param); + List list = bmsSubjectService.list(subjectWrapper); + List treeVoList = list.stream().map(subject->{ + BmsSubjectTreeVo treeNode = CopierUtil.copy(subject,new BmsSubjectTreeVo()); + treeNode.setId(subject.getId().toString()); + treeNode.setParentId(subject.getPid().toString()); + treeNode.setSort(0); + 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.BASE, title = "科目", biz = BizType.QUERY) + @PreAuthorize("hasRole('bms:subject:query')") + public R getById(@PathVariable("id") String id){ + BmsSubject bmsSubject = bmsSubjectService.getById(id); + return R.ok(bmsSubject); + } + + /** + * 更新 + * @param param + * @return + */ + @PostMapping("/updateById") + @SysLog(module = SystemModule.BASE, title = "科目", biz = BizType.UPDATE) + @PreAuthorize("hasRole('bms:subject:update')") + public R updateById(@RequestBody @Valid BmsSubject param){ + boolean result = bmsSubjectService.updateById(param); + return R.isTrue(result); + } + + /** + * 新增 + * @param param + * @return + */ + @PostMapping("/save") + @SysLog(module = SystemModule.BASE, title = "科目", biz = BizType.INSERT) + @PreAuthorize("hasRole('bms:subject:insert')") + public R save(@RequestBody @Valid BmsSubject param){ + boolean result = bmsSubjectService.save(param); + return R.isTrue(result); + } + + /** + * 删除 + * @param id + * @return + */ + @DeleteMapping("/deleteById/{id}") + @SysLog(module = SystemModule.BASE, title = "科目", biz = BizType.DELETE) + @PreAuthorize("hasRole('bms:subject:delete')") + public R deleteById(@PathVariable("id") Long id){ + boolean result = bmsSubjectService.removeById(id); + return R.isTrue(result); + } + +} + diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsChannel.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsChannel.java index 16e349e7..90d4164c 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsChannel.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsChannel.java @@ -17,7 +17,7 @@ import javax.validation.constraints.NotBlank; /** * 渠道 实体类 * @author YenHex - * @since 2022-11-03 + * @since 2022-11-07 */ @Data @TableName("bms_channel") @@ -29,11 +29,20 @@ public class BmsChannel implements Serializable { @TableId(type = IdType.AUTO) private Long id; + /** 渠道编码 */ + @NotBlank(message = "渠道编码不能为空") + @Length(max = 50,message = "渠道编码长度不能超过50字") + private String channelCode; + /** 渠道名称 */ @NotBlank(message = "渠道名称不能为空") @Length(max = 30,message = "渠道名称长度不能超过30字") private String channelName; + /** 渠道类型(读取数据字典) */ + @Length(max = 255,message = "渠道类型(读取数据字典)长度不能超过255字") + private String channelType; + /** 备注 */ @Length(max = 255,message = "备注长度不能超过255字") private String remark; diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsChannelPoint.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsChannelPoint.java index 4ad98305..c766acf6 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsChannelPoint.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsChannelPoint.java @@ -17,7 +17,7 @@ import javax.validation.constraints.NotBlank; /** * 渠道站点 实体类 * @author YenHex - * @since 2022-11-03 + * @since 2022-11-07 */ @Data @TableName("bms_channel_point") @@ -33,11 +33,51 @@ public class BmsChannelPoint implements Serializable { @NotNull(message = "渠道名称不能为空") private Long channelId; + /** 站点编码 */ + @NotBlank(message = "站点编码不能为空") + @Length(max = 50,message = "站点编码长度不能超过50字") + private String pointCode; + /** 站点名称 */ @NotBlank(message = "站点名称不能为空") @Length(max = 30,message = "站点名称长度不能超过30字") private String pointName; + /** 店铺面积 */ + @NotBlank(message = "店铺面积不能为空") + @Length(max = 255,message = "店铺面积长度不能超过255字") + private String shopArea; + + /** 收银台数量 */ + @NotNull(message = "收银台数量不能为空") + private Integer countCheckstand; + + /** 站点等级(读取字典值) */ + @Length(max = 255,message = "站点等级(读取字典值)长度不能超过255字") + private String pointLevel; + + /** 详细地址 */ + @Length(max = 255,message = "详细地址长度不能超过255字") + private String address; + + /** 销售区域id */ + @NotNull(message = "销售区域id不能为空") + private Long saleRegionId; + + /** 销售区域 */ + @NotBlank(message = "销售区域不能为空") + @Length(max = 255,message = "销售区域长度不能超过255字") + private String saleRegionPath; + + /** 行政区域id */ + @NotNull(message = "行政区域id不能为空") + private Long bizRegionId; + + /** 行政区域 */ + @NotBlank(message = "行政区域不能为空") + @Length(max = 255,message = "行政区域长度不能超过255字") + private String bizRegionPath; + /** 备注 */ @Length(max = 255,message = "备注长度不能超过255字") private String remark; @@ -72,7 +112,6 @@ public class BmsChannelPoint implements Serializable { @TableField(fill = FieldFill.UPDATE) private String updateBy; - /** 渠道名称 */ @TableField(exist = false) private String channelName; diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsRegion.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsRegion.java index 01ac3feb..93e24dc7 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsRegion.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsRegion.java @@ -47,6 +47,12 @@ public class BmsRegion implements Serializable { /** 层级 */ private Integer level; + /** 祖级id */ + private String pathIds; + + /** 祖级id */ + private String pathNames; + /** 工厂产地ID */ @TableField(typeHandler = SplitStringTypeHandler.class,jdbcType= JdbcType.VARCHAR) private String[] factoryIds; diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsSubject.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsSubject.java new file mode 100644 index 00000000..455ef21b --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsSubject.java @@ -0,0 +1,81 @@ +package com.qs.serve.modules.bms.entity; + +import java.time.LocalDateTime; +import java.io.Serializable; + +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 2022-11-07 + */ +@Data +@TableName("bms_subject") +public class BmsSubject implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 科目名称 */ + @NotBlank(message = "科目名称不能为空") + @Length(max = 50,message = "科目名称长度不能超过50字") + private String subjectName; + + /** 科目编码 */ + @NotBlank(message = "科目编码不能为空") + @Length(max = 50,message = "科目编码长度不能超过50字") + private String subjectCode; + + /** 父级id */ + @NotNull(message = "父级id不能为空") + private Long pid; + + /** 备注 */ + @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; + +} + diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java index e4529135..a6d77b56 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java @@ -133,7 +133,7 @@ public class BmsSupplier implements Serializable { /** 多选:销售区域ID */ @TableField(exist = false) - private String[] regionIds; + private List regionIds; /** 多选:行政区域ID */ @TableField(exist = false) diff --git a/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsChannelPointBo.java b/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsChannelPointBo.java new file mode 100644 index 00000000..d7fd5de4 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsChannelPointBo.java @@ -0,0 +1,65 @@ +package com.qs.serve.modules.bms.entity.bo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @author YenHex + * @since 2022/11/7 + */ +@Data +public class BmsChannelPointBo { + + /** id */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 渠道名称 */ + @NotNull(message = "渠道名称不能为空") + private Long channelId; + + /** 站点编码 */ + @NotBlank(message = "站点编码不能为空") + @Length(max = 50,message = "站点编码长度不能超过50字") + private String pointCode; + + /** 站点名称 */ + @NotBlank(message = "站点名称不能为空") + @Length(max = 30,message = "站点名称长度不能超过30字") + private String pointName; + + /** 店铺面积 */ + @NotBlank(message = "店铺面积不能为空") + @Length(max = 255,message = "店铺面积长度不能超过255字") + private String shopArea; + + /** 收银台数量 */ + @NotNull(message = "收银台数量不能为空") + private Integer countCheckstand; + + /** 站点等级(读取字典值) */ + @Length(max = 255,message = "站点等级(读取字典值)长度不能超过255字") + private String pointLevel; + + /** 详细地址 */ + @Length(max = 255,message = "详细地址长度不能超过255字") + private String address; + + /** 销售区域id */ + @NotNull(message = "销售区域id不能为空") + private Long saleRegionId; + + /** 行政区域id */ + @NotNull(message = "行政区域id不能为空") + private Long bizRegionId; + + /** 备注 */ + @Length(max = 255,message = "备注长度不能超过255字") + private String remark; + +} diff --git a/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsSubjectTreeVo.java b/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsSubjectTreeVo.java new file mode 100644 index 00000000..dc09588b --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsSubjectTreeVo.java @@ -0,0 +1,38 @@ +package com.qs.serve.modules.bms.entity.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.qs.serve.common.model.dto.TreeNode; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @author YenHex + * @since 2022/11/7 + */ +@Data +public class BmsSubjectTreeVo extends TreeNode { + + /** 科目名称 */ + @NotBlank(message = "科目名称不能为空") + @Length(max = 50,message = "科目名称长度不能超过50字") + private String subjectName; + + /** 科目编码 */ + @NotBlank(message = "科目编码不能为空") + @Length(max = 50,message = "科目编码长度不能超过50字") + private String subjectCode; + + /** 父级id */ + @NotNull(message = "父级id不能为空") + private Long pid; + + /** 备注 */ + @Length(max = 255,message = "备注长度不能超过255字") + private String remark; + + +} diff --git a/src/main/java/com/qs/serve/modules/bms/mapper/BmsSubjectMapper.java b/src/main/java/com/qs/serve/modules/bms/mapper/BmsSubjectMapper.java new file mode 100644 index 00000000..04df4762 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bms/mapper/BmsSubjectMapper.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.bms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.bms.entity.BmsSubject; + +/** + * 科目 Mapper + * @author YenHex + * @date 2022-11-07 + */ +public interface BmsSubjectMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java b/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java index b0491736..2c11358a 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java +++ b/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java @@ -22,9 +22,7 @@ public interface BmsRegionService extends IService { void flushLevel(BmsRegion param); - void flushAllLevel(); - - void updateLevel(String id,Integer level); + void flushAllLevel(boolean batchUpdate); } diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java b/src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java new file mode 100644 index 00000000..5b4d062c --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.bms.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.bms.entity.BmsSubject; + +/** + * 科目 服务接口 + * @author YenHex + * @date 2022-11-07 + */ +public interface BmsSubjectService extends IService { + +} + diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java index 978e561b..b7c991af 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java @@ -104,31 +104,44 @@ public class BmsRegionServiceImpl extends ServiceImpl Assert.throwEx("最高支持3层级"); } param.setLevel(parent.getLevel()+1); + param.setPathIds(parent.getPathIds()+"_"+param.getId()); + param.setPathNames(parent.getPathNames()+"_"+param.getName()); }else { - param.setPid(null); - param.setLevel(1); + Assert.throwEx("无相关父级数据"); } + }else { + param.setPid("0"); + param.setLevel(1); + param.setPathIds(param.getId()); + param.setPathNames(param.getName()); } + this.updateById(param); } @Override - public void flushAllLevel() { + public void flushAllLevel(boolean batchUpdate) { List treeVoList = this.getTree(false); for (BmsRegionTreeVo firstTree : treeVoList) { - if(firstTree.getLevel()==null||firstTree.getLevel()!=1){ - this.updateLevel(firstTree.getId(),1); + if(firstTree.getLevel()==null||firstTree.getLevel()!=1||batchUpdate){ + String pathIds = firstTree.getId(); + String pathNames = firstTree.getName(); + this.updateLevel(firstTree.getId(),1,pathIds,pathNames); } if(CollectionUtil.isNotEmpty(firstTree.getChildren())){ for (TreeNode secondTreeNode : firstTree.getChildren()) { BmsRegionTreeVo secondTree = (BmsRegionTreeVo)secondTreeNode; - if(secondTree.getLevel()==null||secondTree.getLevel()!=2){ - this.updateLevel(secondTree.getId(),2); + if(secondTree.getLevel()==null||secondTree.getLevel()!=2||batchUpdate){ + String pathIds = firstTree.getId()+"_"+secondTree.getName(); + String pathNames = firstTree.getName()+"_"+secondTree.getName(); + this.updateLevel(secondTree.getId(),2,pathIds,pathNames); } if(CollectionUtil.isNotEmpty(secondTree.getChildren())){ for (TreeNode thirdTreeNode : secondTree.getChildren()) { BmsRegionTreeVo thirdTree = (BmsRegionTreeVo)thirdTreeNode; - if(thirdTree.getLevel()==null||thirdTree.getLevel()!=3){ - this.updateLevel(thirdTree.getId(),3); + if(thirdTree.getLevel()==null||thirdTree.getLevel()!=3||batchUpdate){ + String pathIds = firstTree.getId()+"_"+secondTree.getName()+"_"+thirdTree.getId(); + String pathNames = firstTree.getName()+"_"+secondTree.getName()+"_"+thirdTree.getName(); + this.updateLevel(thirdTree.getId(),3,pathIds,pathNames); } } } @@ -137,12 +150,14 @@ public class BmsRegionServiceImpl extends ServiceImpl } } - @Override - public void updateLevel(String id, Integer level) { + public void updateLevel(String id, Integer level,String pathIds,String pathName) { BmsRegion param = new BmsRegion(); param.setId(id); param.setLevel(level); + param.setPathIds(pathIds); + param.setPathNames(pathName); this.updateById(param); } + } diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java new file mode 100644 index 00000000..17fdc343 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java @@ -0,0 +1,22 @@ +package com.qs.serve.modules.bms.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.bms.entity.BmsSubject; +import com.qs.serve.modules.bms.service.BmsSubjectService; +import com.qs.serve.modules.bms.mapper.BmsSubjectMapper; + +/** + * 科目 服务实现类 + * @author YenHex + * @since 2022-11-07 + */ +@Slf4j +@Service +@AllArgsConstructor +public class BmsSubjectServiceImpl extends ServiceImpl implements BmsSubjectService { + +} + diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java index 20fb397c..5bd611bc 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java @@ -59,7 +59,6 @@ public class GoodsCategoryController { @GetMapping("/list") @PreAuthorize("hasRole('goods:category:query')") public R> getList(GoodsCategory param){ - PageUtil.startPage(); LambdaQueryWrapper categoryWrapper = new LambdaQueryWrapper<>(param); List list = goodsCategoryService.list(categoryWrapper); return R.ok(list); diff --git a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuBo.java b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuBo.java index 984504e6..f574e582 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuBo.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuBo.java @@ -47,7 +47,7 @@ public class GoodsSpuBo { //private Integer shelf; /** 排序字段 */ - @NotNull(message = "排序字段不能为空") + //@NotNull(message = "排序字段不能为空") private Integer sort; /** 销量 */ diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java index b75d9637..d5db904e 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java @@ -3,12 +3,15 @@ package com.qs.serve.modules.goods.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qs.serve.common.util.Assert; +import com.qs.serve.common.util.CollectionUtil; import com.qs.serve.common.util.CopierUtil; import com.qs.serve.modules.goods.common.GoodsConst; import com.qs.serve.modules.goods.entity.GoodsSkuSpecValue; import com.qs.serve.modules.goods.entity.GoodsSpecValue; +import com.qs.serve.modules.goods.entity.GoodsSpu; import com.qs.serve.modules.goods.entity.bo.GoodsSkuBo; import com.qs.serve.modules.goods.entity.vo.GoodSkuVo; +import com.qs.serve.modules.goods.entity.vo.GoodsSkuSpecValueVo; import com.qs.serve.modules.goods.service.GoodsSkuSpecValueService; import com.qs.serve.modules.goods.service.GoodsSpecValueService; import lombok.AllArgsConstructor; @@ -20,6 +23,7 @@ import com.qs.serve.modules.goods.mapper.GoodsSkuMapper; import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -58,7 +62,13 @@ public class GoodsSkuServiceImpl extends ServiceImpl im @Override @Transactional(rollbackFor = Exception.class) public void editSku(GoodsSkuBo goodSkuVo) { - GoodsSku dbGoodSku = this.getById(goodSkuVo.getSkuId()); + GoodsSku dbGoodSku = null; + if(goodSkuVo.getSkuId()!=null){ + dbGoodSku = this.getById(goodSkuVo.getSkuId()); + if(dbGoodSku==null){ + Assert.throwEx("数据不存在"); + } + } GoodsSku goodsSku = CopierUtil.copy(goodSkuVo,new GoodsSku()); if(dbGoodSku!=null){ if(goodsSku.getSpuId()!=null&&goodsSku.getSpuId().equals(dbGoodSku.getSpuId())){ @@ -66,7 +76,6 @@ public class GoodsSkuServiceImpl extends ServiceImpl im } goodsSku.setId(dbGoodSku.getId()); } - this.saveOrUpdate(goodsSku); if(goodSkuVo.getSpecValueIds()!=null){ if(goodSkuVo.getSpecValueIds().size()!= GoodsConst.SPEC_COUNT){ Assert.throwEx("规格值数量缺失"); @@ -76,13 +85,31 @@ public class GoodsSkuServiceImpl extends ServiceImpl im if(specIds.size()!=GoodsConst.SPEC_COUNT){ Assert.throwEx("规格数量缺失"); } + //校验规格值 + List skuSpecValueVos = goodsSkuSpecValueService.listSpecValueBySpuId(goodSkuVo.getSpuId()); + if(CollectionUtil.isNotEmpty(skuSpecValueVos)){ + Map> skuValListMap = skuSpecValueVos.stream().collect(Collectors.groupingBy(GoodsSkuSpecValueVo::getSkuId)); + for (Long skuIdKey : skuValListMap.keySet()) { + List skuSpecValueVoList = skuValListMap.get(skuIdKey); + boolean noExist = skuSpecValueVoList.stream().anyMatch(specValue->{ + for (GoodsSpecValue goodsSpecValue : goodsSpecValues) { + if(goodsSpecValue.getId().equals(specValue.getSpecValueId())){ + return false; + } + } + return true; + }); + if(!noExist){ + Assert.throwEx("规格值组合已被占用"); + } + } + } + this.saveOrUpdate(goodsSku); for (GoodsSpecValue specValue : goodsSpecValues) { goodsSkuSpecValueService.initSkuSpecValue(goodsSku.getSpuId(),goodsSku.getId(),specValue.getId()); } }else { - if(dbGoodSku==null){ - Assert.throwEx("规格值缺失"); - } + this.updateById(goodsSku); } } diff --git a/src/main/java/com/qs/serve/modules/sys/controller/SysDictController.java b/src/main/java/com/qs/serve/modules/sys/controller/SysDictController.java index 402c7304..2ec559b9 100644 --- a/src/main/java/com/qs/serve/modules/sys/controller/SysDictController.java +++ b/src/main/java/com/qs/serve/modules/sys/controller/SysDictController.java @@ -1,21 +1,27 @@ package com.qs.serve.modules.sys.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.StringUtils; -import com.qs.serve.modules.sys.entity.SysDict; -import com.qs.serve.modules.sys.service.SysDictService; 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.sys.entity.SysDict; +import com.qs.serve.modules.sys.service.SysDictService; + +import javax.validation.Valid; import java.util.List; /** * 系统 字典 * @author YenHex - * @since 2022-05-20 + * @since 2022-11-04 */ @Slf4j @AllArgsConstructor @@ -26,23 +32,72 @@ public class SysDictController { private SysDictService sysDictService; /** - * 列表查询 - * @param group 分组key + * 翻页 + * @param param * @return */ - @GetMapping("/list") - public R getList(String group){ - if(StringUtils.hasEmpty(group)){ - return R.error("查询参数为空"); - } + @GetMapping("/page") + @PreAuthorize("hasRole('sys:dict:query')") + public R> getPage(SysDict param){ PageUtil.startPage(); - LambdaQueryWrapper dictWrapper = new LambdaQueryWrapper<>(); - dictWrapper.eq(SysDict::getGroupKey,group); + LambdaQueryWrapper dictWrapper = new LambdaQueryWrapper<>(param); List list = sysDictService.list(dictWrapper); - return R.ok(list); + return R.byPageHelperList(list); + } + + /** + * ID查询 + * @param id + * @return + */ + @GetMapping("/getById/{id}") + @SysLog(module = SystemModule.SYSTEM, title = "字典", biz = BizType.QUERY) + @PreAuthorize("hasRole('sys:dict:query')") + public R getById(@PathVariable("id") String id){ + SysDict sysDict = sysDictService.getById(id); + return R.ok(sysDict); } + /** + * 更新 + * @param param + * @return + */ + @PostMapping("/updateById") + @SysLog(module = SystemModule.SYSTEM, title = "字典", biz = BizType.UPDATE) + @PreAuthorize("hasRole('sys:dict:update')") + public R updateById(@RequestBody @Valid SysDict param){ + boolean result = sysDictService.updateById(param); + return R.isTrue(result); + } + + /** + * 新增 + * @param param + * @return + */ + @PostMapping("/save") + @SysLog(module = SystemModule.SYSTEM, title = "字典", biz = BizType.INSERT) + @PreAuthorize("hasRole('sys:dict:insert')") + public R save(@RequestBody @Valid SysDict param){ + boolean result = sysDictService.save(param); + return R.isTrue(result); + } + + /** + * 删除 + * @param id + * @return + */ + @DeleteMapping("/deleteById/{id}") + @SysLog(module = SystemModule.SYSTEM, title = "字典", biz = BizType.DELETE) + @PreAuthorize("hasRole('sys:dict:delete')") + public R deleteById(@PathVariable("id") Long id){ + boolean result = sysDictService.removeById(id); + return R.isTrue(result); + } + } diff --git a/src/main/java/com/qs/serve/modules/sys/controller/SysDictDataController.java b/src/main/java/com/qs/serve/modules/sys/controller/SysDictDataController.java new file mode 100644 index 00000000..1593872c --- /dev/null +++ b/src/main/java/com/qs/serve/modules/sys/controller/SysDictDataController.java @@ -0,0 +1,103 @@ +package com.qs.serve.modules.sys.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 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.sys.entity.SysDictData; +import com.qs.serve.modules.sys.service.SysDictDataService; + +import javax.validation.Valid; +import java.util.List; + +/** + * 系统 字典数据 + * @author YenHex + * @since 2022-11-04 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("sys/dictData") +public class SysDictDataController { + + private SysDictDataService sysDictDataService; + + /** + * 翻页 + * @param param + * @return + */ + @GetMapping("/page") + @PreAuthorize("hasRole('sys:dictData:query')") + public R> getPage(SysDictData param){ + PageUtil.startPage(); + LambdaQueryWrapper dictDataWrapper = new LambdaQueryWrapper<>(param); + List list = sysDictDataService.list(dictDataWrapper); + return R.byPageHelperList(list); + } + + /** + * ID查询 + * @param id + * @return + */ + @GetMapping("/getById/{id}") + @SysLog(module = SystemModule.SYSTEM, title = "字典数据", biz = BizType.QUERY) + @PreAuthorize("hasRole('sys:dictData:query')") + public R getById(@PathVariable("id") String id){ + SysDictData sysDictData = sysDictDataService.getById(id); + return R.ok(sysDictData); + } + + + + /** + * 更新 + * @param param + * @return + */ + @PostMapping("/updateById") + @SysLog(module = SystemModule.SYSTEM, title = "字典数据", biz = BizType.UPDATE) + @PreAuthorize("hasRole('sys:dictData:update')") + public R updateById(@RequestBody @Valid SysDictData param){ + boolean result = sysDictDataService.updateById(param); + return R.isTrue(result); + } + + /** + * 新增 + * @param param + * @return + */ + @PostMapping("/save") + @SysLog(module = SystemModule.SYSTEM, title = "字典数据", biz = BizType.INSERT) + @PreAuthorize("hasRole('sys:dictData:insert')") + public R save(@RequestBody @Valid SysDictData param){ + boolean result = sysDictDataService.save(param); + return R.isTrue(result); + } + + /** + * 删除 + * @param id + * @return + */ + @DeleteMapping("/deleteById/{id}") + @SysLog(module = SystemModule.SYSTEM, title = "字典数据", biz = BizType.DELETE) + @PreAuthorize("hasRole('sys:dictData:delete')") + public R deleteById(@PathVariable("id") Long id){ + boolean result = sysDictDataService.removeById(id); + return R.isTrue(result); + } + +} + diff --git a/src/main/java/com/qs/serve/modules/sys/controller/api/SysDictApi.java b/src/main/java/com/qs/serve/modules/sys/controller/api/SysDictApi.java index 022faba3..e32da990 100644 --- a/src/main/java/com/qs/serve/modules/sys/controller/api/SysDictApi.java +++ b/src/main/java/com/qs/serve/modules/sys/controller/api/SysDictApi.java @@ -5,6 +5,8 @@ import com.qs.serve.common.model.dto.R; import com.qs.serve.common.util.PageUtil; import com.qs.serve.common.util.StringUtils; import com.qs.serve.modules.sys.entity.SysDict; +import com.qs.serve.modules.sys.entity.SysDictData; +import com.qs.serve.modules.sys.service.SysDictDataService; import com.qs.serve.modules.sys.service.SysDictService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -25,7 +27,7 @@ import java.util.List; @RequestMapping("api/dict") public class SysDictApi { - private SysDictService sysDictService; + private SysDictDataService sysDictDataService; /** * 列表查询 @@ -37,10 +39,10 @@ public class SysDictApi { if(StringUtils.hasEmpty(group)){ return R.error("查询参数为空"); } - LambdaQueryWrapper dictWrapper = new LambdaQueryWrapper<>(); - dictWrapper.eq(SysDict::getGroupKey,group); - dictWrapper.orderByDesc(SysDict::getSort); - List list = sysDictService.list(dictWrapper); + LambdaQueryWrapper dictWrapper = new LambdaQueryWrapper<>(); + dictWrapper.eq(SysDictData::getGroupKey,group); + dictWrapper.orderByDesc(SysDictData::getSort); + List list = sysDictDataService.list(dictWrapper); return R.ok(list); } diff --git a/src/main/java/com/qs/serve/modules/sys/entity/SysDict.java b/src/main/java/com/qs/serve/modules/sys/entity/SysDict.java index 76ec2cc4..4780f129 100644 --- a/src/main/java/com/qs/serve/modules/sys/entity/SysDict.java +++ b/src/main/java/com/qs/serve/modules/sys/entity/SysDict.java @@ -11,10 +11,13 @@ 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 2022-05-20 + * @since 2022-11-04 */ @Data @TableName("sys_dict") @@ -26,21 +29,15 @@ public class SysDict implements Serializable { @TableId(type = IdType.AUTO) private Long id; - /** */ - @Length(max = 50,message = "长度不能超过50字") - private String groupKey; - - /** */ - @TableField(value = "key_val") - @Length(max = 50,message = "长度不能超过50字") - private String keyVal; - - /** */ - @Length(max = 50,message = "长度不能超过50字") - private String label; + /** 字典key */ + @NotBlank(message = "字典key不能为空") + @Length(max = 50,message = "字典key长度不能超过50字") + private String dictKey; - /** 排序 */ - private Integer sort; + /** 字典组名 */ + @NotBlank(message = "字典组名不能为空") + @Length(max = 50,message = "字典组名长度不能超过50字") + private String dictName; /** 备注 */ @Length(max = 255,message = "备注长度不能超过255字") diff --git a/src/main/java/com/qs/serve/modules/sys/entity/SysDictData.java b/src/main/java/com/qs/serve/modules/sys/entity/SysDictData.java new file mode 100644 index 00000000..2e11a843 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/sys/entity/SysDictData.java @@ -0,0 +1,85 @@ +package com.qs.serve.modules.sys.entity; + +import java.time.LocalDateTime; +import java.io.Serializable; + +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 2022-11-04 + */ +@Data +@TableName("sys_dict_data") +public class SysDictData implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 字典id */ + private Long dictId; + + /** 字典key */ + @Length(max = 50,message = "字典key长度不能超过50字") + private String groupKey; + + /** 数据值 */ + @Length(max = 50,message = "数据值长度不能超过50字") + private String keyVal; + + /** 数据标题 */ + @Length(max = 50,message = "数据标题长度不能超过50字") + private String label; + + /** 排序 */ + 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; + + /** 创建人 */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** 更新时间 */ + @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; + + /** 更新人 */ + @TableField(fill = FieldFill.UPDATE) + private String updateBy; + + /** 租户id */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** 删除标识 */ + @JsonIgnore + @JsonProperty + private Boolean delFlag; + +} + diff --git a/src/main/java/com/qs/serve/modules/sys/mapper/SysDictDataMapper.java b/src/main/java/com/qs/serve/modules/sys/mapper/SysDictDataMapper.java new file mode 100644 index 00000000..8abaa8c1 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/sys/mapper/SysDictDataMapper.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.sys.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.sys.entity.SysDictData; + +/** + * 字典数据 Mapper + * @author YenHex + * @date 2022-11-04 + */ +public interface SysDictDataMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/serve/modules/sys/service/SysDictDataService.java b/src/main/java/com/qs/serve/modules/sys/service/SysDictDataService.java new file mode 100644 index 00000000..68f11ccc --- /dev/null +++ b/src/main/java/com/qs/serve/modules/sys/service/SysDictDataService.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.sys.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.sys.entity.SysDictData; + +/** + * 字典数据 服务接口 + * @author YenHex + * @date 2022-11-04 + */ +public interface SysDictDataService extends IService { + +} + diff --git a/src/main/java/com/qs/serve/modules/sys/service/impl/SysDictDataServiceImpl.java b/src/main/java/com/qs/serve/modules/sys/service/impl/SysDictDataServiceImpl.java new file mode 100644 index 00000000..948c06a3 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/sys/service/impl/SysDictDataServiceImpl.java @@ -0,0 +1,22 @@ +package com.qs.serve.modules.sys.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.sys.entity.SysDictData; +import com.qs.serve.modules.sys.service.SysDictDataService; +import com.qs.serve.modules.sys.mapper.SysDictDataMapper; + +/** + * 字典数据 服务实现类 + * @author YenHex + * @since 2022-11-04 + */ +@Slf4j +@Service +@AllArgsConstructor +public class SysDictDataServiceImpl extends ServiceImpl implements SysDictDataService { + +} +