From 9fa99a28e39b2b3dbea1b49ae329376fee6ecec5 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Wed, 18 Sep 2024 10:07:43 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=BA=97=E9=93=BA=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=20=E9=80=9A=E8=BF=87=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shop/TbShopExtendController.java | 6 ++++ .../cashier/mybatis/entity/TbShopExtend.java | 15 ++++++++++ .../mybatis/service/TbShopExtendService.java | 2 ++ .../service/impl/TbShopExtendServiceImpl.java | 28 +++++++++++++++++++ 4 files changed, 51 insertions(+) diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopExtendController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopExtendController.java index 529e9b40..a0617ddb 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopExtendController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopExtendController.java @@ -36,6 +36,12 @@ public class TbShopExtendController { return new ResponseEntity<>(tbShopExtendService.queryAll(criteria), HttpStatus.OK); } + @PostMapping("byType") + @ApiOperation("通过类型查询详情") + public TbShopExtend selectOneByType(@RequestBody TbShopExtend tbShopExtend) { + return tbShopExtendService.selectOneByType(tbShopExtend); + } + @GetMapping("{id}") @ApiOperation("通过Id查询详情") public TbShopExtend selectOne(@PathVariable Serializable id) { diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/entity/TbShopExtend.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/entity/TbShopExtend.java index b133e369..365b94f5 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/entity/TbShopExtend.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/entity/TbShopExtend.java @@ -2,6 +2,7 @@ package cn.ysk.cashier.mybatis.entity; import java.util.Date; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.extension.activerecord.Model; import org.apache.commons.lang3.StringUtils; @@ -20,6 +21,8 @@ public class TbShopExtend extends Model { private Integer shopId; //img:图片;text:文本; private String name; + @TableField(exist = false) + private String title; private String type; //自定义key private String autokey; @@ -105,6 +108,14 @@ public class TbShopExtend extends Model { this.detail = detail; } + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + /** * index_bg:店铺首页背景图 * my_bg: 我的页面背景图 @@ -119,21 +130,25 @@ public class TbShopExtend extends Model { this.name = "店铺首页背景图"; this.detail="建议尺寸: 375*600 "; this.value = "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/indexs/shuangbackground.png"; + this.title = "首页"; break; case "my_bg": this.name = "我的页面背景图"; this.detail="建议尺寸: 375*200"; this.value = "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/my/myTopBack.png"; + this.title = "个人中心"; break; case "member_bg": this.name = "会员卡页面背景图"; this.detail="建议尺寸: 315*152"; this.value = "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/menber/member_bg.png"; + this.title = "会员卡"; break; case "shopinfo_bg": this.name = "商品列表顶部背景图"; this.detail="建议尺寸: 375*120"; this.value = "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/shopDetails/topBanner.png"; + this.title = "商品列表"; break; } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbShopExtendService.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbShopExtendService.java index 1eba9acb..cbf9c4ea 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbShopExtendService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbShopExtendService.java @@ -18,5 +18,7 @@ public interface TbShopExtendService extends IService { void saveInfo(TbShopExtend tbShopExtend); + TbShopExtend selectOneByType(TbShopExtend tbShopExtend); + } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopExtendServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopExtendServiceImpl.java index e68301dd..12ba7d1f 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopExtendServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopExtendServiceImpl.java @@ -56,6 +56,34 @@ public class TbShopExtendServiceImpl extends ServiceImpl wrapper = new QueryWrapper<>(); + wrapper.eq("shop_id", tbShopExtend.getShopId()); + wrapper.like("autokey",tbShopExtend.getAutokey()); + TbShopExtend shopExtend = tbShopExtendmapper.selectOne(wrapper); + if (shopExtend == null) { + shopExtend = new TbShopExtend(); + shopExtend.initAutoKey(tbShopExtend.getAutokey(),tbShopExtend.getShopId()); + }else { + switch (tbShopExtend.getAutokey()) { + case "index_bg": + shopExtend.setTitle("首页"); + break; + case "my_bg": + shopExtend.setTitle("个人中心"); + break; + case "member_bg": + shopExtend.setTitle("会员卡"); + break; + case "shopinfo_bg": + shopExtend.setTitle("商品列表"); + break; + } + } + return shopExtend; + } + public Page checkAndInitialize(Page ipage, Integer shopId) { List newRecords = new ArrayList<>(); List requiredAutokeys = Arrays.asList("index_bg", "my_bg", "member_bg", "shopinfo_bg"); From e4b25899e516f8651e73a0b554bd80a08c710ceb Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Wed, 18 Sep 2024 17:32:55 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=BA=97=E9=93=BA=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=20=E9=80=9A=E8=BF=87=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=20title=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/TbShopExtendServiceImpl.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopExtendServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopExtendServiceImpl.java index 12ba7d1f..cf85c458 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopExtendServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopExtendServiceImpl.java @@ -100,6 +100,22 @@ public class TbShopExtendServiceImpl extends ServiceImpl shopExtends = ipage.getRecords(); + for (TbShopExtend shopExtend : shopExtends) { + switch (shopExtend.getAutokey()) { + case "index_bg": + shopExtend.setTitle("首页"); + break; + case "my_bg": + shopExtend.setTitle("个人中心"); + break; + case "member_bg": + shopExtend.setTitle("会员卡"); + break; + case "shopinfo_bg": + shopExtend.setTitle("商品列表"); + break; + } + } Set existingAutokeys = shopExtends.stream() .map(TbShopExtend::getAutokey) .collect(Collectors.toSet()); From e4a89912059fcf5a8553e41346ffd852d19ef4f1 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Thu, 19 Sep 2024 10:37:59 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=95=86=E5=93=81=E5=88=97=E8=A1=A8=20V2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/ysk/cashier/utils/JSONUtil.java | 21 +++++ .../src/main/java/cn/ysk/cashier/AppRun.java | 2 + .../ysk/cashier/config/MybatisPlusConfig.java | 1 - .../ysk/cashier/cons/domain/ViewConSku.java | 6 +- .../product/TbProductController.java | 26 ++++--- .../dto/product/TbProductQueryCriteria.java | 3 +- .../dto/product/TbProductQueryV2Criteria.java | 72 +++++++++++++++++ .../productimpl/TbProductServiceImpl.java | 41 ++++++++-- .../service/product/TbProductService.java | 4 + .../cn/ysk/cashier/vo/TbProductNewVo.java | 78 +++++++++++++++++++ 10 files changed, 236 insertions(+), 18 deletions(-) create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/dto/product/TbProductQueryV2Criteria.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/vo/TbProductNewVo.java diff --git a/eladmin-common/src/main/java/cn/ysk/cashier/utils/JSONUtil.java b/eladmin-common/src/main/java/cn/ysk/cashier/utils/JSONUtil.java index 0e7796bf..23a32691 100644 --- a/eladmin-common/src/main/java/cn/ysk/cashier/utils/JSONUtil.java +++ b/eladmin-common/src/main/java/cn/ysk/cashier/utils/JSONUtil.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializeConfig; import com.alibaba.fastjson.serializer.SerializerFeature; +import com.fasterxml.jackson.databind.ObjectMapper; import java.util.ArrayList; import java.util.List; @@ -87,6 +88,26 @@ public class JSONUtil { } } + /** + * @param list 某集合 + * @param clazz 要转成的实体 + * 需要在目标实体增加注解 忽略未知属性 @JsonIgnoreProperties(ignoreUnknown = true) + * @return + * @param + */ + public static List parseListTNewList(List list, Class clazz) { + ObjectMapper objectMapper = new ObjectMapper(); // 创建JSON转换器 + try { + // 将List转换为JSON字符串 + String json = objectMapper.writeValueAsString(list); + // 将JSON字符串转换为List + return objectMapper.readValue(json, objectMapper.getTypeFactory().constructCollectionType(List.class, clazz)); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + public static void main(String[] args) { String sss = "{\"bizData\":{\"amount\":1,\"currency\":\"cny\",\"ifCode\":\"sxfpay\",\"mchOrderNo\":\"CZ1715744291232\",\"mercNo\":\"B240510702030\",\"note\":\"等待用户付款\",\"payOrderId\":\"O1790587460614225921\",\"payType\":\"WECHAT\",\"settlementType\":\"D1\",\"state\":\"TRADE_AWAIT\",\"storeId\":\"S2405103298\",\"subject\":\"测试支付\",\"tradeFee\":0},\"code\":\"000000\",\"msg\":\"请求成功\",\"sign\":\"40710a3c293eeac3c7f4a1b0696a2bf6\",\"signType\":\"MD5\",\"timestamp\":\"20240515113813\"}"; // TypeReference> typeRef = new TypeReference>(){}; diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/AppRun.java b/eladmin-system/src/main/java/cn/ysk/cashier/AppRun.java index b777144e..66432d21 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/AppRun.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/AppRun.java @@ -4,6 +4,7 @@ package cn.ysk.cashier; import io.swagger.annotations.Api; import cn.ysk.cashier.annotation.rest.AnonymousGetMapping; import cn.ysk.cashier.utils.SpringContextHolder; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.ApplicationPidFileWriter; @@ -24,6 +25,7 @@ import org.springframework.web.bind.annotation.RestController; @Api(hidden = true) @EnableTransactionManagement @SpringBootApplication +@MapperScan("cn.ysk.cashier.mybatis.mapper") @EnableJpaAuditing(auditorAwareRef = "auditorAware") public class AppRun { diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/config/MybatisPlusConfig.java b/eladmin-system/src/main/java/cn/ysk/cashier/config/MybatisPlusConfig.java index f998c8ef..d69b3488 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/config/MybatisPlusConfig.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/config/MybatisPlusConfig.java @@ -12,7 +12,6 @@ import java.util.Collections; @Configuration -@MapperScan("cn.ysk.cashier.mybatis.mapper") @EnableTransactionManagement public class MybatisPlusConfig { diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/ViewConSku.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/ViewConSku.java index 11ba8f04..09381bd4 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/ViewConSku.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/ViewConSku.java @@ -44,8 +44,12 @@ public class ViewConSku implements Serializable { @ApiModelProperty(value = "耗材id") private Integer conInfoId; - @Column(name = "`product_sku_id`",nullable = false) + @Column(name = "`product_id`",nullable = false) @NotNull + @ApiModelProperty(value = "商品id") + private Integer productId; + + @Column(name = "`product_sku_id`",nullable = false) @ApiModelProperty(value = "商品规格id") private Integer productSkuId; diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/TbProductController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/TbProductController.java index 7bff4e5b..85e89df6 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/TbProductController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/TbProductController.java @@ -2,6 +2,7 @@ package cn.ysk.cashier.controller.product; import cn.ysk.cashier.annotation.AnonymousAccess; import cn.ysk.cashier.annotation.Log; +import cn.ysk.cashier.dto.product.TbProductQueryV2Criteria; import cn.ysk.cashier.dto.product.TbProductSortCriteria; import cn.ysk.cashier.vo.TbProductVo; import cn.ysk.cashier.service.product.TbProductService; @@ -33,7 +34,11 @@ public class TbProductController { return new ResponseEntity<>(tbProductService.queryAll(criteria, false),HttpStatus.OK); } - + @GetMapping("/list/v2") + @ApiOperation("查询商品列表 新") + public ResponseEntity queryTbProductV2(TbProductQueryV2Criteria criteria){ + return new ResponseEntity<>(tbProductService.queryAllV2(criteria),HttpStatus.OK); + } @GetMapping("/list") @ApiOperation("查询/productForAdmin") @@ -41,26 +46,29 @@ public class TbProductController { return new ResponseEntity<>(tbProductService.queryAll(criteria, true),HttpStatus.OK); } - @GetMapping("/isHot") - public ResponseEntity updateIsHot(@RequestParam Integer isHot, @RequestParam Integer id){ - tbProductService.updateIsHot(id,isHot); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - @GetMapping("/{product}") - @ApiOperation("查询/product") + @ApiOperation("查询商品详情") public Object queryTbProductInfo(@PathVariable("product") Integer product)throws Exception{ return tbProductService.findByProductId(product); } @GetMapping ("/productList") - @ApiOperation("查询/product") + @ApiOperation("根据集合查询商品") public Object queryTbProductInfo(@RequestParam List productList){ return tbProductService.findByProductList(productList); } + + @GetMapping("/isHot") + @ApiOperation("设为招牌菜") + public ResponseEntity updateIsHot(@RequestParam Integer isHot, @RequestParam Integer id){ + tbProductService.updateIsHot(id,isHot); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/upProSort") @ApiOperation("修改商品排序") public ResponseEntity upProSort(@RequestBody TbProductSortCriteria param){ diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/TbProductQueryCriteria.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/TbProductQueryCriteria.java index 7c655893..239b8de9 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/TbProductQueryCriteria.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/TbProductQueryCriteria.java @@ -15,11 +15,10 @@ */ package cn.ysk.cashier.dto.product; +import cn.ysk.cashier.annotation.Query; import lombok.Data; import java.math.BigDecimal; -import cn.ysk.cashier.annotation.Query; - import static cn.ysk.cashier.annotation.Query.Type.INNER_LIKE; /** diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/TbProductQueryV2Criteria.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/TbProductQueryV2Criteria.java new file mode 100644 index 00000000..d29a96e6 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/TbProductQueryV2Criteria.java @@ -0,0 +1,72 @@ +/* +* Copyright 2019-2020 Zheng Jie +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package cn.ysk.cashier.dto.product; + +import cn.ysk.cashier.annotation.Query; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.List; + +import static cn.ysk.cashier.annotation.Query.Type.IN; +import static cn.ysk.cashier.annotation.Query.Type.INNER_LIKE; + +/** +* @website https://eladmin.vip +* @author lyf +* @date 2023-12-11 +**/ +@Data +public class TbProductQueryV2Criteria { + + /** 精确 */ + @Query + private String shopId; + + /** 精确 */ + @Query(type = INNER_LIKE) + private String name; + + @Query + private String categoryId; + + /** 精确 */ + @Query + private Integer status =1; + + /** 精确 */ + @Query + private Integer isDel = 0; + + @Query + private String type; + + @Query(type = IN) + private List typeEnum = Arrays.asList("normal","sku"); + + private Integer page; + + private Integer size; + + public void setType(String type) { + if(StringUtils.isNotBlank(type)){ + this.typeEnum=Arrays.asList(type); + this.type = null; + } + } +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java index 10509237..e65ed825 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java @@ -3,9 +3,12 @@ package cn.ysk.cashier.service.impl.productimpl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.util.StrUtil; +import cn.ysk.cashier.cons.domain.ViewConSku; +import cn.ysk.cashier.cons.repository.ViewConSkuRepository; import cn.ysk.cashier.dto.TbPlatformDictDto; import cn.ysk.cashier.dto.product.TbProductDto; import cn.ysk.cashier.dto.product.TbProductQueryCriteria; +import cn.ysk.cashier.dto.product.TbProductQueryV2Criteria; import cn.ysk.cashier.dto.product.TbProductSortCriteria; import cn.ysk.cashier.dto.shop.TbCouponCategoryDto; import cn.ysk.cashier.exception.BadRequestException; @@ -25,6 +28,7 @@ import cn.ysk.cashier.service.TbPlatformDictService; import cn.ysk.cashier.service.product.TbProductService; import cn.ysk.cashier.service.shop.TbCouponCategoryService; import cn.ysk.cashier.utils.*; +import cn.ysk.cashier.vo.TbProductNewVo; import cn.ysk.cashier.vo.TbProductVo; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -34,10 +38,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; +import org.springframework.data.domain.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -48,7 +49,6 @@ import java.math.BigDecimal; import java.time.Instant; import java.util.*; import java.util.concurrent.CompletableFuture; -import java.util.function.DoubleSupplier; import java.util.stream.Collectors; /** @@ -78,6 +78,7 @@ public class TbProductServiceImpl implements TbProductService { private final TbProducSkutMapper producSkutMapper; private final cn.ysk.cashier.mybatis.mapper.TbProductMapper productMapper; private final TbProductSkuResultRepository productSkuResultRepository; + private final ViewConSkuRepository viewConSkuRepository; private final RedisUtils redisUtils; @@ -235,6 +236,36 @@ public class TbProductServiceImpl implements TbProductService { return PageUtil.toPage(tbProductVoList, page.getTotalElements()); } + @Override + public Map queryAllV2(TbProductQueryV2Criteria criteria) { + Sort sort = Sort.by(Sort.Direction.ASC, "sort"); + Pageable pageable = PageRequest.of(criteria.getPage(), criteria.getSize(), sort); + //查询商品数据 + Page page = tbProductRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable); + List products = new ArrayList<>(); + for (TbProduct product : page.getContent()) { + TbProductNewVo productNewVo = new TbProductNewVo(); + BeanUtils.copyProperties(product, productNewVo); + productNewVo.setLowPrice("¥"+product.getLowPrice().toString()); + List tbProductSkus = tbProductSkuRepository.searchSku(product.getId().toString()); + if (tbProductSkus.size() > 1) { + BigDecimal maxPrice = tbProductSkus.stream().map(TbProductSku::getSalePrice).max(BigDecimal::compareTo).get(); + productNewVo.setLowPrice(productNewVo.getLowPrice() + "~¥" + maxPrice); + } + //规格填充 + List tbProductSkuVos = JSONUtil.parseListTNewList(tbProductSkus, TbProductNewVo.TbProductSkuVos.class); + productNewVo.setSkuList(tbProductSkuVos); + ViewConSku viewConSku=new ViewConSku(); + viewConSku.setShopId(Integer.valueOf(product.getShopId())); + viewConSku.setProductId(product.getId()); + Example query = Example.of(viewConSku); + List skuCons = viewConSkuRepository.findAll(query); + productNewVo.setConInfos(skuCons); + products.add(productNewVo); + } + return PageUtil.toPage(products, page.getTotalElements()); + } + @Override public TbProductVo findByProductId(Integer id) throws Exception { diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/product/TbProductService.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/product/TbProductService.java index 158eddef..5b749782 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/product/TbProductService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/product/TbProductService.java @@ -1,5 +1,6 @@ package cn.ysk.cashier.service.product; +import cn.ysk.cashier.dto.product.TbProductQueryV2Criteria; import cn.ysk.cashier.dto.product.TbProductSortCriteria; import cn.ysk.cashier.pojo.product.TbProduct; import cn.ysk.cashier.vo.TbProductVo; @@ -29,6 +30,9 @@ public interface TbProductService { Map queryAll(TbProductQueryCriteria criteria, boolean isAdmin); + Map queryAllV2(TbProductQueryV2Criteria criteria); + + /** * 查询所有数据不分页 * diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbProductNewVo.java b/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbProductNewVo.java new file mode 100644 index 00000000..1da629ed --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbProductNewVo.java @@ -0,0 +1,78 @@ +package cn.ysk.cashier.vo; + +import cn.ysk.cashier.cons.domain.ViewConSku; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Timestamp; +import java.util.List; + +/** + * @author ww + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class TbProductNewVo { + + private Integer id; + //店铺id + private String shopId; + //图片 + private String coverImg; + //商品名称 + private String name; + //售价 + private String lowPrice; + //类型 单规格/多规格 + private String typeEnum; + //库存 + private Double stockNumber; + //是否在收银端上架 0否1是 + private Integer isShowCash; + //是否在小程序上架 0否1是 + private Integer isShowMall; + //是否售罄 0否1是 + private Integer isPauseSale; + //是否热销 + private Integer isHot; + + private List conInfos; + + private List skuList; + //排序 + private Integer sort; + + public void setTypeEnum(String typeEnum) { + switch (typeEnum) { + case "normal": + this.typeEnum = "单规格"; + break; + case "sku": + this.typeEnum = "多规格"; + break; + case "weight": + this.typeEnum = "称重商品"; + break; + case "currentPrice": + this.typeEnum = "时价商品"; + break; + case "group": + this.typeEnum = "套餐商品/团购卷"; + break; + default: + this.typeEnum = typeEnum; + break; + } + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class TbProductSkuVos { + private Integer id; + private BigDecimal salePrice = new BigDecimal("0.00"); + private String specSnap=""; + private Integer isPauseSale = 0; + } +} From df3e3604f204c0bfefbe6bbfcda26d24409e5d24 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Thu, 19 Sep 2024 16:06:30 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=95=86=E5=93=81=E8=AF=A6=E6=83=85=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=85=B3=E4=BA=8E=E8=80=97=E6=9D=90=E7=9A=84?= =?UTF-8?q?=20=E4=BF=A1=E6=81=AF=20/api/tbProskuCon/V2=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=95=86=E5=93=81=E8=80=97=E6=9D=90=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/TbProskuConRepository.java | 3 + .../cons/rest/TbProskuConController.java | 16 +++++ .../cons/service/TbProskuConService.java | 1 + .../service/impl/TbProskuConServiceImpl.java | 58 +++++++++++++++++++ .../productimpl/TbProductServiceImpl.java | 10 +++- .../java/cn/ysk/cashier/vo/TbProductVo.java | 3 + 6 files changed, 90 insertions(+), 1 deletion(-) diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbProskuConRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbProskuConRepository.java index 7da88d41..f9d89f75 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbProskuConRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbProskuConRepository.java @@ -5,6 +5,8 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; +import java.util.List; + /** * @website https://eladmin.vip * @author admin @@ -23,5 +25,6 @@ public interface TbProskuConRepository extends JpaRepository searchAllByProductId(Integer productId); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbProskuConController.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbProskuConController.java index 3ae77a02..fa91bc64 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbProskuConController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbProskuConController.java @@ -56,6 +56,22 @@ public class TbProskuConController { } } + @PostMapping("V2") + @Log("新增商品耗材绑定关系") + @ApiOperation("新增商品耗材绑定关系") + public ResponseEntity upV2(@Validated @RequestBody List resources) throws Exception { + try { + tbProskuConService.upV2(resources); + return new ResponseEntity<>(HttpStatus.CREATED); + } catch (BadRequestException be) { + throw new Exception(be.getMessage()); + }catch (Exception e){ + e.printStackTrace(); + throw new Exception("相同商品耗材信息不允许添加"); + } + } + + @PutMapping @Log("修改商品规格耗材信息") @ApiOperation("修改商品规格耗材信息") diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbProskuConService.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbProskuConService.java index f95aaec0..61287cfe 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbProskuConService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbProskuConService.java @@ -44,6 +44,7 @@ public interface TbProskuConService { * @return TbProskuConDto */ TbProskuConDto create(List resources) throws Exception; + void upV2(List resources) throws Exception; /** * 编辑 diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbProskuConServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbProskuConServiceImpl.java index 78559efe..46b0c563 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbProskuConServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbProskuConServiceImpl.java @@ -19,14 +19,17 @@ import cn.ysk.cashier.cons.service.dto.TbProskuConDto; import cn.ysk.cashier.cons.service.dto.TbProskuConQueryCriteria; import cn.ysk.cashier.cons.service.mapstruct.TbProskuConMapper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.util.CollectionUtils; import java.sql.Timestamp; import java.util.*; import java.io.IOException; +import java.util.stream.Collectors; import javax.servlet.http.HttpServletResponse; /** @@ -154,6 +157,61 @@ public class TbProskuConServiceImpl implements TbProskuConService { return new TbProskuConDto(); } + + @Override + @Transactional(rollbackFor = Exception.class) + public void upV2(List resources) { + List newCons=new ArrayList<>(); + Map> conMap = resources.stream() + .collect(Collectors.groupingBy(TbProskuCon::getProductId)); + for (Integer proId : conMap.keySet()) { + TbProduct product= tbProductRepository.getById(proId); + if(Objects.isNull(product)){ + throw new BadRequestException("对应的商品信息不存在"); + } + List cons = conMap.get(proId); + List collect = cons.stream().map(TbProskuCon::getId).collect(Collectors.toList()); + //现有的 + List tbProskuCons = tbProskuConRepository.searchAllByProductId(proId); + List delIds = new ArrayList<>(); + for (TbProskuCon tbProskuCon : tbProskuCons) { + if (!collect.contains(tbProskuCon.getId())) { + delIds.add(tbProskuCon.getId()); + } + } + if (!CollectionUtils.isEmpty(delIds)) { + tbProskuConRepository.deleteAllById(delIds); + } + //判断 + for (TbProskuCon resource : cons) { + TbConsInfo tbConsInfo = tbConsInfoRepository.findById(resource.getConInfoId()).orElseGet(TbConsInfo::new); + if (ObjectUtil.isNull(tbConsInfo) || ObjectUtil.isNull(tbConsInfo.getId())) { + throw new BadRequestException("对应的耗材信息不存在"); + } + TbProductSku sku = new TbProductSku(); + if (resource.getProductSkuId() != 0) { + sku = tbProductSkuRepository.findById(resource.getProductSkuId()).orElseGet(TbProductSku::new); + if (ObjectUtil.isNull(sku) || ObjectUtil.isNull(sku.getId())) { + throw new BadRequestException("规格信息不存在"); + } + } + int count = tbProskuConRepository.countByConInfoIdAndProductSkuIdAndShopId(resource.getConInfoId(), resource.getProductSkuId(), resource.getShopId(), resource.getProductId()); + if (count <= 0) { + newCons.add(resource); + } else { + if (resource.getProductSkuId() != 0) { + throw new BadRequestException(StringUtils.isNotBlank(sku.getSpecSnap()) ? sku.getSpecSnap() : "".concat(" 对应的耗材").concat(tbConsInfo.getConName()).concat("关系已存在")); + } else { + throw new BadRequestException(" 对应的耗材".concat(tbConsInfo.getConName()).concat("关系已存在")); + } + } + } + if(!CollectionUtils.isEmpty(newCons)){ + tbProskuConRepository.saveAll(newCons); + } + } + } + @Override @Transactional(rollbackFor = Exception.class) public void update(TbProskuCon resources) throws Exception { diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java index e65ed825..d67d7bac 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java @@ -285,7 +285,7 @@ public class TbProductServiceImpl implements TbProductService { Threads.call(tbProductSkus, tbProductSpec); //组装 TbProductVo tbProductVo = new TbProductVo(); - tbProductVo.setStockNumber(tbProduct.getStockNumber() == null ? 0.00 : tbProduct.getStockNumber()); +// tbProductVo.setStockNumber(tbProduct.getStockNumber() == null ? 0.00 : tbProduct.getStockNumber()); tbProductVo.setCategoryId(StringUtils.isNotBlank(tbProduct.getCategoryId())?Integer.valueOf(tbProduct.getCategoryId()):null); //单位 // if (tbProduct.getUnitId() == null) { @@ -318,6 +318,14 @@ public class TbProductServiceImpl implements TbProductService { } else { tbProductVo.setSkuList(tbProductSkus.get()); } + + ViewConSku viewConSku=new ViewConSku(); + viewConSku.setShopId(Integer.valueOf(tbProduct.getShopId())); + viewConSku.setProductId(tbProduct.getId()); + Example query = Example.of(viewConSku); + List skuCons = viewConSkuRepository.findAll(query); + tbProductVo.setConInfos(skuCons); + if ("sku".equals(tbProductVo.getTypeEnum())) { Optional skuResult = tbProductSkuResultRepository.findById(tbProductVo.getId()); tbProductVo.setSkuSnap(skuResult.get().getTagSnap()); diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbProductVo.java b/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbProductVo.java index 80c4de0a..034b542b 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbProductVo.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbProductVo.java @@ -1,5 +1,6 @@ package cn.ysk.cashier.vo; +import cn.ysk.cashier.cons.domain.ViewConSku; import cn.ysk.cashier.dto.TbPlatformDictDto; import cn.ysk.cashier.dto.shop.TbCouponCategoryDto; import cn.ysk.cashier.pojo.shop.TbPurchaseNotice; @@ -221,6 +222,8 @@ public class TbProductVo { private BigDecimal maxPrice; + private List conInfos; + private TbPurchaseNotice notices=new TbPurchaseNotice(); private List groupCategoryId = new ArrayList<>(); private List tags = new ArrayList<>();