diff --git a/src/main/java/com/qs/serve/modules/goods/common/GoodsConst.java b/src/main/java/com/qs/serve/modules/goods/common/GoodsConst.java new file mode 100644 index 00000000..7e36ce92 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/common/GoodsConst.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.goods.common; + +/** + * @author YenHex + * @since 2022/10/26 + */ +public class GoodsConst { + + /** + * 规格数量 + */ + public static final Integer SPEC_COUNT = 3; + +} diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java index d3705431..16fe3f54 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java @@ -8,6 +8,7 @@ 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.modules.goods.entity.GoodsSkuSpecValue; +import com.qs.serve.modules.goods.entity.bo.GoodsSkuBo; import com.qs.serve.modules.goods.entity.vo.GoodSkuVo; import com.qs.serve.modules.goods.service.GoodsSkuSpecValueService; import lombok.AllArgsConstructor; @@ -36,7 +37,7 @@ public class GoodsSkuController { private GoodsSkuSpecValueService goodsSkuSpecValueService; /** - * 翻页查询 + * 翻页 * @param param * @return */ @@ -48,6 +49,18 @@ public class GoodsSkuController { return R.byPageHelperList(list); } + /** + * 列表 + * @param param + * @return + */ + @GetMapping("/page") + @PreAuthorize("hasRole('goods:sku:query')") + public R> getList(GoodsSku param){ + List list = goodsSkuService.selectSkuVo(param); + return R.ok(list); + } + /** * 根据ID查询 * @param id @@ -62,29 +75,16 @@ public class GoodsSkuController { } /** - * 根据ID更新 + * 编辑 * @param param * @return */ - @PostMapping("/updateById") + @PostMapping("/update") @SysLog(module = SystemModule.GOODS, title = "sku", biz = BizType.UPDATE) @PreAuthorize("hasRole('goods:sku:update')") - public R updateById(@RequestBody @Valid GoodsSku param){ - boolean result = goodsSkuService.updateById(param); - return R.isTrue(result); - } - - /** - * 新增sku - * @param param - * @return - */ - @PostMapping("/save") - @SysLog(module = SystemModule.GOODS, title = "sku", biz = BizType.INSERT) - @PreAuthorize("hasRole('goods:sku:insert')") - public R save(@RequestBody @Valid GoodsSku param){ - boolean result = goodsSkuService.save(param); - return R.isTrue(result); + public R update(@RequestBody @Valid GoodsSkuBo param){ + goodsSkuService.editSku(param); + return R.ok(); } /** diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecValueController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecValueController.java index c9b92915..f85aa19b 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecValueController.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecValueController.java @@ -43,6 +43,8 @@ public class GoodsSpecValueController { * @param param * @return */ + @GetMapping("/specList") + @PreAuthorize("hasRole('goods:specValue:query')") public R> getPage(GoodsSpec param){ LambdaQueryWrapper specWrapper = new LambdaQueryWrapper<>(param); List list = goodsSpecService.list(specWrapper); @@ -63,6 +65,20 @@ public class GoodsSpecValueController { return R.byPageHelperList(list); } + /** + * 规格值 列表 + * @apiNote 可传入specId进行过滤 + * @param param + * @return + */ + @GetMapping("/list") + @PreAuthorize("hasRole('goods:specValue:query')") + public R> getList(GoodsSpecValue param){ + LambdaQueryWrapper specValueWrapper = new LambdaQueryWrapper<>(param); + List list = goodsSpecValueService.list(specValueWrapper); + return R.ok(list); + } + /** * 规格值 ID查询 * @param id diff --git a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSkuBo.java b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSkuBo.java new file mode 100644 index 00000000..03b87877 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSkuBo.java @@ -0,0 +1,72 @@ +package com.qs.serve.modules.goods.entity.bo; + +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 java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * sku 实体类 + * @author YenHex + * @since 2022-10-09 + */ +@Data +@TableName("goods_sku") +public class GoodsSkuBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** sku编码 */ + @Length(max = 32,message = "sku编码长度不能超过32字") + private String skuCode; + + /** 商品Id */ + @NotNull(message = "商品Id不能为空") + private Long spuId; + + /** 图片 */ + private String picUrl; + + /** 销售价格 */ + private BigDecimal salesPrice; + + /** 市场价 */ + private BigDecimal marketPrice; + + /** 成本价 */ + private BigDecimal costPrice; + + /** 规格值 */ + private String specInfos; + + /** 重量(kg) */ + @NotNull(message = "重量(kg)不能为空") + private BigDecimal weight; + + /** 体积(m³) */ + @NotNull(message = "体积(m³)不能为空") + private BigDecimal volume; + + /** 最低起批数(0->不限制) */ + private Integer minPurchase; + + /** 版本号 */ + private Integer version; + + /** 备注 */ + private Integer remark; + + /** 规格值Ids(更新操作可为空) */ + private List specValueIds; + +} + diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsSkuService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsSkuService.java index bbe987e9..56e47f03 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/GoodsSkuService.java +++ b/src/main/java/com/qs/serve/modules/goods/service/GoodsSkuService.java @@ -2,6 +2,7 @@ package com.qs.serve.modules.goods.service; import com.baomidou.mybatisplus.extension.service.IService; import com.qs.serve.modules.goods.entity.GoodsSku; +import com.qs.serve.modules.goods.entity.bo.GoodsSkuBo; import com.qs.serve.modules.goods.entity.vo.GoodSkuVo; import org.apache.ibatis.annotations.Param; @@ -20,5 +21,7 @@ public interface GoodsSkuService extends IService { List selectSkuVo(GoodsSku goodsSku); + void editSku(GoodsSkuBo goodSkuVo); + } 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 e5660da1..2022dc99 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 @@ -2,15 +2,26 @@ 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.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.bo.GoodsSkuBo; import com.qs.serve.modules.goods.entity.vo.GoodSkuVo; +import com.qs.serve.modules.goods.service.GoodsSkuSpecValueService; +import com.qs.serve.modules.goods.service.GoodsSpecValueService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import com.qs.serve.modules.goods.entity.GoodsSku; import com.qs.serve.modules.goods.service.GoodsSkuService; import com.qs.serve.modules.goods.mapper.GoodsSkuMapper; +import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * sku 服务实现类 @@ -22,6 +33,9 @@ import java.util.List; @AllArgsConstructor public class GoodsSkuServiceImpl extends ServiceImpl implements GoodsSkuService { + private GoodsSkuSpecValueService goodsSkuSpecValueService; + private GoodsSpecValueService goodsSpecValueService; + @Override public GoodsSku getByCode(String code) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); @@ -40,5 +54,37 @@ public class GoodsSkuServiceImpl extends ServiceImpl im public List selectSkuVo(GoodsSku goodsSku) { return baseMapper.selectSkuVo(goodsSku); } + + @Override + @Transactional(rollbackFor = Exception.class) + public void editSku(GoodsSkuBo goodSkuVo) { + GoodsSku dbGoodSku = this.getByCode(goodSkuVo.getSkuCode()); + GoodsSku goodsSku = CopierUtil.copy(goodSkuVo,new GoodsSku()); + if(dbGoodSku!=null){ + if(goodsSku.getSpuId()!=null&&goodsSku.getSpuId().equals(dbGoodSku.getSpuId())){ + Assert.throwEx("规格编码已被其它商品使用"); + } + goodsSku.setId(dbGoodSku.getId()); + } + this.saveOrUpdate(goodsSku); + if(goodSkuVo.getSpecValueIds()!=null){ + if(goodSkuVo.getSpecValueIds().size()!= GoodsConst.SPEC_COUNT){ + Assert.throwEx("规格值数量缺失"); + } + List goodsSpecValues = goodsSpecValueService.listByIds(goodSkuVo.getSpecValueIds()); + Set specIds = goodsSpecValues.stream().map(GoodsSpecValue::getSpecId).collect(Collectors.toSet()); + if(specIds.size()!=GoodsConst.SPEC_COUNT){ + Assert.throwEx("规格数量缺失"); + } + for (GoodsSpecValue specValue : goodsSpecValues) { + goodsSkuSpecValueService.initSkuSpecValue(goodsSku.getSpuId(),goodsSku.getId(),specValue.getId()); + } + }else { + if(dbGoodSku==null){ + Assert.throwEx("规格值缺失"); + } + } + } + } diff --git a/src/main/java/com/qs/serve/modules/oms/controller/api/OmsOrderApi.java b/src/main/java/com/qs/serve/modules/oms/controller/api/OmsOrderApi.java index 3eb5767d..d98a8c90 100644 --- a/src/main/java/com/qs/serve/modules/oms/controller/api/OmsOrderApi.java +++ b/src/main/java/com/qs/serve/modules/oms/controller/api/OmsOrderApi.java @@ -6,7 +6,9 @@ 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.AuthContextUtils; import com.qs.serve.common.util.PageUtil; +import com.qs.serve.modules.bms.entity.BmsSupplier; import com.qs.serve.modules.oms.entity.OmsOrder; import com.qs.serve.modules.oms.entity.bo.OmsConfirmOrderBo; import com.qs.serve.modules.oms.entity.vo.OmsConfirmOrderResult; @@ -42,7 +44,6 @@ public class OmsOrderApi { return R.ok(omsOrderService.generateConfirmOrder(confirmOrder)); } - /** * 翻页查询 * @param param @@ -50,6 +51,8 @@ public class OmsOrderApi { */ @GetMapping("/page") public R> getPage(OmsOrder param){ + BmsSupplier supplier = AuthContextUtils.getCurrentSupplier(); + param.setSupplierId(Long.parseLong(supplier.getId())); PageUtil.startPage(); LambdaQueryWrapper orderWrapper = new LambdaQueryWrapper<>(param); List list = omsOrderService.list(orderWrapper); @@ -64,8 +67,12 @@ public class OmsOrderApi { @GetMapping("/getById/{id}") @SysLog(module = SystemModule.BASE, title = "订单", biz = BizType.QUERY) public R getById(@PathVariable("id") String id){ + BmsSupplier supplier = AuthContextUtils.getCurrentSupplier(); OmsOrder omsOrder = omsOrderService.getById(id); - return R.ok(omsOrder); + if(omsOrder.getSupplierId().toString().equals(supplier.getId())){ + return R.ok(omsOrder); + } + return R.error(); } /** @@ -76,8 +83,13 @@ public class OmsOrderApi { @DeleteMapping("/deleteById/{id}") @SysLog(module = SystemModule.BASE, title = "订单", biz = BizType.DELETE) public R deleteById(@PathVariable("id") String id){ - boolean result = omsOrderService.removeById(id); - return R.isTrue(result); + BmsSupplier supplier = AuthContextUtils.getCurrentSupplier(); + OmsOrder omsOrder = omsOrderService.getById(id); + if(omsOrder.getSupplierId().toString().equals(supplier.getId())){ + boolean result = omsOrderService.removeById(id); + return R.isTrue(result); + } + return R.error(); } } diff --git a/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java b/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java index b92a32e8..18ce8272 100644 --- a/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java +++ b/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java @@ -27,6 +27,7 @@ import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -319,23 +320,27 @@ public class SysUserController { @Transactional(rollbackFor = Exception.class) public R updateSalesParent(@RequestBody @Valid SysUserParentParam userBo){ final String pid = userBo.getParentId(); - final SysUserSales userSales = sysUserSalesService.getById(pid); - boolean isExist = userBo.getUserIds().stream().filter(StringUtils::hasText).anyMatch(objId->userSales.getPid().equals(objId)); - if(isExist&&userBo.getUserIds().size()>1){ - return R.error("多节点操作出现递归数据"); + List sysUserSalesList = new ArrayList<>(); + if(!userBo.getParentId().equals("0")){ + final SysUserSales userSales = sysUserSalesService.getById(pid); + boolean isExist = userBo.getUserIds().stream().filter(StringUtils::hasText).anyMatch(objId->userSales.getPid().equals(objId)); + if(isExist&&userBo.getUserIds().size()>1){ + return R.error("多节点操作出现递归数据"); + } + if(isExist){ + SysUserSales sysUserSales = new SysUserSales(); + sysUserSales.setUserId(userSales.getPid()); + sysUserSales.setPid(userSales.getUserId()); + sysUserSalesList.add(sysUserSales); + } } - List sysUserSalesList = userBo.getUserIds().stream().filter(StringUtils::hasText).map(uid->{ + List sysUserSalesList2 = userBo.getUserIds().stream().filter(StringUtils::hasText).map(uid->{ SysUserSales sysUserSales = new SysUserSales(); sysUserSales.setUserId(uid); sysUserSales.setPid(pid); return sysUserSales; }).collect(Collectors.toList()); - if(isExist){ - SysUserSales sysUserSales = new SysUserSales(); - sysUserSales.setUserId(userSales.getPid()); - sysUserSales.setPid(userSales.getUserId()); - sysUserSalesList.add(sysUserSales); - } + sysUserSalesList.addAll(sysUserSalesList2); sysUserSalesService.saveOrUpdateBatch(sysUserSalesList); return R.ok(); } 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 a8d8fac4..022faba3 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 @@ -37,7 +37,6 @@ public class SysDictApi { if(StringUtils.hasEmpty(group)){ return R.error("查询参数为空"); } - PageUtil.startPage(); LambdaQueryWrapper dictWrapper = new LambdaQueryWrapper<>(); dictWrapper.eq(SysDict::getGroupKey,group); dictWrapper.orderByDesc(SysDict::getSort);