Browse Source

调整

mssql
Yen 3 years ago
parent
commit
3ea1d3404d
  1. 8
      src/main/java/com/qs/serve/modules/bms/controller/BmsChannelPointController.java
  2. 12
      src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java
  3. 112
      src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectController.java
  4. 11
      src/main/java/com/qs/serve/modules/bms/entity/BmsChannel.java
  5. 43
      src/main/java/com/qs/serve/modules/bms/entity/BmsChannelPoint.java
  6. 6
      src/main/java/com/qs/serve/modules/bms/entity/BmsRegion.java
  7. 81
      src/main/java/com/qs/serve/modules/bms/entity/BmsSubject.java
  8. 2
      src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java
  9. 65
      src/main/java/com/qs/serve/modules/bms/entity/bo/BmsChannelPointBo.java
  10. 38
      src/main/java/com/qs/serve/modules/bms/entity/vo/BmsSubjectTreeVo.java
  11. 14
      src/main/java/com/qs/serve/modules/bms/mapper/BmsSubjectMapper.java
  12. 4
      src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java
  13. 14
      src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java
  14. 37
      src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java
  15. 22
      src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java
  16. 1
      src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java
  17. 2
      src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuBo.java
  18. 37
      src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java
  19. 83
      src/main/java/com/qs/serve/modules/sys/controller/SysDictController.java
  20. 103
      src/main/java/com/qs/serve/modules/sys/controller/SysDictDataController.java
  21. 12
      src/main/java/com/qs/serve/modules/sys/controller/api/SysDictApi.java
  22. 27
      src/main/java/com/qs/serve/modules/sys/entity/SysDict.java
  23. 85
      src/main/java/com/qs/serve/modules/sys/entity/SysDictData.java
  24. 14
      src/main/java/com/qs/serve/modules/sys/mapper/SysDictDataMapper.java
  25. 14
      src/main/java/com/qs/serve/modules/sys/service/SysDictDataService.java
  26. 22
      src/main/java/com/qs/serve/modules/sys/service/impl/SysDictDataServiceImpl.java

8
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);
}

12
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();
}

112
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<List<BmsSubjectTreeVo>> getPage(BmsSubject param){
LambdaQueryWrapper<BmsSubject> subjectWrapper = new LambdaQueryWrapper<>(param);
List<BmsSubject> list = bmsSubjectService.list(subjectWrapper);
List<BmsSubjectTreeVo> 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<BmsSubject> 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);
}
}

11
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;

43
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;

6
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;

81
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;
}

2
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<String> regionIds;
/** 多选:行政区域ID */
@TableField(exist = false)

65
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;
}

38
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;
}

14
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<BmsSubject> {
}

4
src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java

@ -22,9 +22,7 @@ public interface BmsRegionService extends IService<BmsRegion> {
void flushLevel(BmsRegion param);
void flushAllLevel();
void updateLevel(String id,Integer level);
void flushAllLevel(boolean batchUpdate);
}

14
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<BmsSubject> {
}

37
src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java

@ -104,31 +104,44 @@ public class BmsRegionServiceImpl extends ServiceImpl<BmsRegionMapper,BmsRegion>
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<BmsRegionTreeVo> 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<BmsRegionMapper,BmsRegion>
}
}
@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);
}
}

22
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<BmsSubjectMapper,BmsSubject> implements BmsSubjectService {
}

1
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<List<GoodsCategory>> getList(GoodsCategory param){
PageUtil.startPage();
LambdaQueryWrapper<GoodsCategory> categoryWrapper = new LambdaQueryWrapper<>(param);
List<GoodsCategory> list = goodsCategoryService.list(categoryWrapper);
return R.ok(list);

2
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;
/** 销量 */

37
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<GoodsSkuMapper,GoodsSku> 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<GoodsSkuMapper,GoodsSku> 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<GoodsSkuMapper,GoodsSku> im
if(specIds.size()!=GoodsConst.SPEC_COUNT){
Assert.throwEx("规格数量缺失");
}
//校验规格值
List<GoodsSkuSpecValueVo> skuSpecValueVos = goodsSkuSpecValueService.listSpecValueBySpuId(goodSkuVo.getSpuId());
if(CollectionUtil.isNotEmpty(skuSpecValueVos)){
Map<Long,List<GoodsSkuSpecValueVo>> skuValListMap = skuSpecValueVos.stream().collect(Collectors.groupingBy(GoodsSkuSpecValueVo::getSkuId));
for (Long skuIdKey : skuValListMap.keySet()) {
List<GoodsSkuSpecValueVo> 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);
}
}

83
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<PageVo<SysDict>> getPage(SysDict param){
PageUtil.startPage();
LambdaQueryWrapper<SysDict> dictWrapper = new LambdaQueryWrapper<>();
dictWrapper.eq(SysDict::getGroupKey,group);
LambdaQueryWrapper<SysDict> dictWrapper = new LambdaQueryWrapper<>(param);
List<SysDict> 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<SysDict> 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);
}
}

103
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<PageVo<SysDictData>> getPage(SysDictData param){
PageUtil.startPage();
LambdaQueryWrapper<SysDictData> dictDataWrapper = new LambdaQueryWrapper<>(param);
List<SysDictData> 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<SysDictData> 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);
}
}

12
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<SysDict> dictWrapper = new LambdaQueryWrapper<>();
dictWrapper.eq(SysDict::getGroupKey,group);
dictWrapper.orderByDesc(SysDict::getSort);
List<SysDict> list = sysDictService.list(dictWrapper);
LambdaQueryWrapper<SysDictData> dictWrapper = new LambdaQueryWrapper<>();
dictWrapper.eq(SysDictData::getGroupKey,group);
dictWrapper.orderByDesc(SysDictData::getSort);
List<SysDictData> list = sysDictDataService.list(dictWrapper);
return R.ok(list);
}

27
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字")

85
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;
}

14
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<SysDictData> {
}

14
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<SysDictData> {
}

22
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<SysDictDataMapper,SysDictData> implements SysDictDataService {
}
Loading…
Cancel
Save