diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdListVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdListVO.java index e636c7a..8076553 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdListVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdListVO.java @@ -2,6 +2,7 @@ package com.tashow.cloud.productapi.api.product.vo.prod; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; import com.tashow.cloud.productapi.api.product.dto.*; import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse.ProdEmergencyInfoVO; import com.tashow.cloud.productapi.api.product.vo.prodserviceareas.ProdServiceAreasInfoVO; @@ -9,6 +10,7 @@ import com.tashow.cloud.productapi.general.StringListTypeHandler; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.util.Date; import java.util.List; @Schema(description = "商品服务配置 VO") @@ -25,50 +27,36 @@ public class ProdListVO { */ private String prodName; /** - * 商品简称 + * 分类名称 */ - private String abbreviation; + private String categoryName; /** * 店铺id */ private Long shopId; - /** - * 是否置灰0否1是 + * 店铺id */ - private Integer isProhibit; - - /** - * 审核备注 - */ - private String processNotes; - /** - * 详细描述 - */ - private String content; - /** - * 商品编号 - */ - private String prodNumber; - /** - * 商品主图 - */ - private String pic; - /** - * 商品轮播图片,以,分割 - */ - private String imgs; - /** - * 商品轮播图片,以,分割 - */ - private String whiteImg; - - /** - * 默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核 - */ - private Integer status; + private String shopName; + @Schema(description = "") + /** + * 服务区域地址名称集合 + */ + private List areaNameList; + + + /** + * 还剩多少天 + */ + private Long remainingDays; + + /** + * 删除时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date deleteTime; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java index ab29443..7c108cc 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java @@ -6,10 +6,7 @@ import com.tashow.cloud.product.mapper.ProdMapper; import com.tashow.cloud.productapi.api.product.dto.ProdDO; import com.tashow.cloud.product.service.ProdService; import com.tashow.cloud.productapi.api.product.dto.SkuDO; -import com.tashow.cloud.productapi.api.product.vo.prod.ProdPageReqVO; -import com.tashow.cloud.productapi.api.product.vo.prod.ProdRecycleBinVO; -import com.tashow.cloud.productapi.api.product.vo.prod.ProdSaveReqVO; -import com.tashow.cloud.productapi.api.product.vo.prod.ProdServiceVO; +import com.tashow.cloud.productapi.api.product.vo.prod.*; import com.tashow.cloud.productapi.api.product.vo.sku.SkuPageReqVO; import com.tashow.cloud.productapi.api.product.vo.sku.SkuRecycleBinVO; import com.tashow.cloud.productapi.enums.BaseEnum; @@ -145,8 +142,20 @@ public class ProdController { @PermitAll @GetMapping("/getProdRecycleBinPageList") @Operation(summary = "获得商品回收站分页列表") - public CommonResult> getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO) { - PageResult pageResult = prodService.getProdRecycleBinPageList(prodRecycleBinVO); + public CommonResult> getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO) { + PageResult pageResult = prodService.getProdRecycleBinPageList(prodRecycleBinVO); return success(pageResult); } + + + @PostMapping("/restoreProdList") + @Operation(summary = "恢复商品") + @Parameter(name = "ids", description = "商品id集合", required = true) + @PermitAll + public CommonResult restoreProdList(@RequestParam("ids") List ids) { + prodService.restoreProdList(ids); + return success(true); + } + + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java index f71b525..101f470 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java @@ -107,7 +107,7 @@ public class SkuController { @Operation(summary = "批量删除SKU") @Parameter(name = "ids", description = "编号", required = true) @PermitAll - public CommonResult deleteSkuList(@RequestParam("id") List ids) { + public CommonResult deleteSkuList(@RequestParam("ids") List ids) { /*for(Long id:ids){ SkuDO sku = new SkuDO(); sku.setSkuId(id); @@ -120,9 +120,9 @@ public class SkuController { } - @DeleteMapping("/updateSkuShelf") + @PostMapping("/updateSkuShelf") @Operation(summary = "修改单品上下架") - @Parameter(name = "ids", description = "编号", required = true) + @Parameter(name = "id", description = "编号", required = true) @Parameter(name = "isShelf", description = "是否上下架(0下架 1上架)", required = true) @PermitAll public CommonResult updateSkuShelf(@RequestParam("id") Long id,@RequestParam("isShelf") Integer isShelf) { @@ -130,12 +130,12 @@ public class SkuController { return success(true); } - @DeleteMapping("/updateSkuShelfList") + @PostMapping("/updateSkuShelfList") @Operation(summary = "批量上下架") @Parameter(name = "ids", description = "编号", required = true) @Parameter(name = "isShelf", description = "是否上下架(0下架 1上架)", required = true) @PermitAll - public CommonResult updateSkuShelfList(@RequestParam("id") List ids,@RequestParam("isShelf") Integer isShelf) { + public CommonResult updateSkuShelfList(@RequestParam("ids") List ids,@RequestParam("isShelf") Integer isShelf) { for(Long id:ids){ SkuDO sku = new SkuDO(); sku.setSkuId(id); @@ -164,6 +164,18 @@ public class SkuController { return success(pageResult); } + + @PostMapping("/restoreSkuList") + @Operation(summary = "恢复SKU") + @Parameter(name = "ids", description = "skuids", required = true) + @PermitAll + public CommonResult restoreSkuList(@RequestParam("ids") List ids) { + skuService.restoreSkuList(ids); + return success(true); + } + + + @PermitAll @GetMapping("/getSkuPageList") @Operation(summary = "获得SKU分页列表") @@ -173,6 +185,7 @@ public class SkuController { } + /* @PermitAll @GetMapping("/getSkuRecycleBinPageList") @Operation(summary = "获得SKU回收站分页列表") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java index 9ec8cf9..87dc157 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java @@ -8,6 +8,7 @@ import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; import com.tashow.cloud.productapi.api.product.dto.*; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdListVO; import com.tashow.cloud.productapi.api.product.vo.prod.ProdPageReqVO; import com.tashow.cloud.productapi.api.product.vo.prod.ProdServiceVO; import com.tashow.cloud.productapi.api.product.vo.sku.SkuRecycleBinVO; @@ -47,7 +48,9 @@ public interface ProdMapper extends BaseMapperX { , @Param("weightSwitch") Integer weightSwitch ); - IPage getProdRecycleBinPageList(Page page,@Param("createTime") String[] createTime + IPage getProdRecycleBinPageList(Page page, @Param("createTime") String[] createTime , @Param("prodName") String prodName); + + void batchRestoreProd(@Param("ids") List ids); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java index 9695049..3c06500 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java @@ -29,4 +29,9 @@ public interface ProdPropValueMapper extends BaseMapperX { List selectSalesValuesByState(@Param("prodId") Long prodId); void batchMarkDeleted(@Param("ids") List ids); + + int deleteProdPropValueById( @Param("id")Long id); + + List selectRestoreProp(@Param("prodId") Long prodId); + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java index f30230b..f999bfd 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java @@ -27,4 +27,8 @@ public interface SkuMapper extends BaseMapperX { List selectPropertiesByProdIdAndNotDeleted( @Param("prodId")Long prodId); List selectPropertiesByProdIdShelf( @Param("prodId")Long prodId); + + int deleteBySkuId( @Param("skuId")Long skuId); + + void batchSkuDeleted(@Param("ids") List ids); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java index d5c6470..fe13e70 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java @@ -3,10 +3,7 @@ package com.tashow.cloud.product.service; import java.util.*; import com.tashow.cloud.productapi.api.product.dto.ProdDO; -import com.tashow.cloud.productapi.api.product.vo.prod.ProdPageReqVO; -import com.tashow.cloud.productapi.api.product.vo.prod.ProdRecycleBinVO; -import com.tashow.cloud.productapi.api.product.vo.prod.ProdSaveReqVO; -import com.tashow.cloud.productapi.api.product.vo.prod.ProdServiceVO; +import com.tashow.cloud.productapi.api.product.vo.prod.*; import com.tashow.cloud.productapi.api.product.vo.sku.SkuRecycleBinVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; @@ -84,5 +81,12 @@ public interface ProdService { */ PageResult getProdPage(ProdPageReqVO pageReqVO); - PageResult getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO); + PageResult getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO); + + /** + * 恢复商品 + * + * @param ids + */ + void restoreProdList(List ids); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java index bb11c78..05ff1bc 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java @@ -88,6 +88,13 @@ public interface SkuService { */ void deleteSkus(List ids); + /** + * 恢复SKU + * + * @param ids + */ + void restoreSkuList(List ids); + /** * 删除单品SKU diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java index 44d62e2..a724c9f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java @@ -54,7 +54,7 @@ public class ProdPropValueServiceImpl extends ServiceImpl areaNameList =prodServiceVO.getProdServiceAreasInfo().getAreaNameList(); - for(String areaName : areaNameList){ - //查询区域信息 - ProdServiceAreasDO prodServiceAreas = prodServiceAreasMapper.selectOne(new LambdaQueryWrapper() - .eq(ProdServiceAreasDO::getAreaName, areaName) - ); - if(prodServiceAreas == null){ - //插入关联表 - prodServiceAreaRelevanceMapper.insert(new ProdServiceAreaRelevanceDO() - .setProdId(prodServiceVO.getProdId()) - .setAreaId(prodServiceAreas.getId()) + ProdServiceOverAreaRulesDO overAreaRules= prodServiceOverAreaRulesMapper.selectOne(new LambdaQueryWrapper() + .eq(ProdServiceOverAreaRulesDO::getProdId, prodServiceVO.getProdId())); + if(overAreaRules==null){ + prod.setRegionSwitch(BaseEnum.YES_ONE.getKey()); + //保存区域设置信息 + ProdServiceOverAreaRulesDO prodServiceOverAreaRules = BeanUtils.toBean(prodServiceVO.getProdServiceAreasInfo(), ProdServiceOverAreaRulesDO.class); + prodServiceOverAreaRules.setProdId(prod.getProdId()); + prodServiceOverAreaRulesMapper.insert(prodServiceOverAreaRules); + //保存区域 + List areaNameList =prodServiceVO.getProdServiceAreasInfo().getAreaNameList(); + for(String areaName : areaNameList){ + //查询区域信息 + ProdServiceAreasDO prodServiceAreas = prodServiceAreasMapper.selectOne(new LambdaQueryWrapper() + .eq(ProdServiceAreasDO::getAreaName, areaName) ); + if(prodServiceAreas != null){ + //插入关联表 + prodServiceAreaRelevanceMapper.insert(new ProdServiceAreaRelevanceDO() + .setProdId(prod.getProdId()) + .setAreaId(prodServiceAreas.getId()) + ); + } + } + }else { + //保存区域设置信息 + ProdServiceOverAreaRulesDO prodServiceOverAreaRules = BeanUtils.toBean(prodServiceVO.getProdServiceAreasInfo(), ProdServiceOverAreaRulesDO.class); + prodServiceOverAreaRules.setProdId(prodServiceVO.getProdId()); + prodServiceOverAreaRulesMapper.updateById(prodServiceOverAreaRules); + //先批量删除区域关联表 + prodServiceAreaRelevanceMapper.deleteRelevance(prodServiceVO.getProdId()); + //保存区域 + List areaNameList =prodServiceVO.getProdServiceAreasInfo().getAreaNameList(); + for(String areaName : areaNameList){ + //查询区域信息 + ProdServiceAreasDO prodServiceAreas = prodServiceAreasMapper.selectOne(new LambdaQueryWrapper() + .eq(ProdServiceAreasDO::getAreaName, areaName) + ); + if(prodServiceAreas == null){ + //插入关联表 + prodServiceAreaRelevanceMapper.insert(new ProdServiceAreaRelevanceDO() + .setProdId(prodServiceVO.getProdId()) + .setAreaId(prodServiceAreas.getId()) + ); + } } } + } //预约设置设置 if(Objects.equals(prodServiceVO.getReservationSwitch(),BaseEnum.YES_ONE.getKey())){ - prodReservationConfigMapper.updateById(prodServiceVO.prodReservationConfig); + ProdReservationConfigDO reservationConfig= prodReservationConfigMapper.selectOne(new LambdaQueryWrapper() + .eq(ProdReservationConfigDO::getProdId, prodServiceVO.getProdId())); + if(reservationConfig==null){ + prod.setReservationSwitch(BaseEnum.YES_ONE.getKey()); + ProdReservationConfigDO prodReservationConfigDO = prodServiceVO.getProdReservationConfig(); + prodReservationConfigDO.setProdId(prod.getProdId()); + prodReservationConfigMapper.insert(prodReservationConfigDO); + }else { + prodReservationConfigMapper.updateById(prodServiceVO.getProdReservationConfig()); + } } //紧急响应设置 if(Objects.equals(prodServiceVO.getEmergencySwitch(),BaseEnum.YES_ONE.getKey())){ - ProdEmergencyResponseDO prodEmergencyResponse = BeanUtils.toBean(prodServiceVO.prodEmergencyInfoVO, ProdEmergencyResponseDO.class); - if(prodEmergencyResponse!=null){ - prodEmergencyResponseMapper.updateById(prodEmergencyResponse); - prodEmergencyResponseIntervalsMapper.deleteIntervals(prodEmergencyResponse.getId()); + ProdEmergencyResponseDO rmergencyResponse= prodEmergencyResponseMapper.selectOne(new LambdaQueryWrapper() + .eq(ProdEmergencyResponseDO::getProdId, prodServiceVO.getProdId())); + if(rmergencyResponse==null){ + prod.setEmergencySwitch(BaseEnum.YES_ONE.getKey()); + // 插入 + ProdEmergencyResponseDO prodEmergencyResponse = BeanUtils.toBean(prodServiceVO.prodEmergencyInfoVO, ProdEmergencyResponseDO.class); + prodEmergencyResponse.setProdId(prod.getProdId()); + prodEmergencyResponseMapper.insert(prodEmergencyResponse); for (ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals : prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponseIntervalsList()){ prodEmergencyResponseIntervals.setConfigId(prodEmergencyResponse.getId()); prodEmergencyResponseIntervalsMapper.insert(prodEmergencyResponseIntervals); } + }else { + ProdEmergencyResponseDO prodEmergencyResponse = BeanUtils.toBean(prodServiceVO.prodEmergencyInfoVO, ProdEmergencyResponseDO.class); + if(prodEmergencyResponse!=null){ + prodEmergencyResponseMapper.updateById(prodEmergencyResponse); + prodEmergencyResponseIntervalsMapper.deleteIntervals(prodEmergencyResponse.getId()); + for (ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals : prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponseIntervalsList()){ + prodEmergencyResponseIntervals.setConfigId(prodEmergencyResponse.getId()); + prodEmergencyResponseIntervalsMapper.insert(prodEmergencyResponseIntervals); + } + } } - } //接单上线设置 if(Objects.equals(prodServiceVO.getOrderLimitSwitch(),BaseEnum.YES_ONE.getKey())){ - productOrderLimitMapper.updateById(prodServiceVO.productOrderLimitVO); + ProductOrderLimitDO orderLimit= productOrderLimitMapper.selectOne(new LambdaQueryWrapper() + .eq(ProductOrderLimitDO::getProdId, prodServiceVO.getProdId())); + if(orderLimit==null){ + prod.setOrderLimitSwitch(BaseEnum.YES_ONE.getKey()); + ProductOrderLimitDO productOrderLimit = prodServiceVO.getProductOrderLimitVO(); + productOrderLimit.setProdId(prod.getProdId()); + productOrderLimitMapper.insert(productOrderLimit); + }else { + productOrderLimitMapper.updateById(prodServiceVO.getProductOrderLimitVO()); + } } //特殊时段设置 if(Objects.equals(prodServiceVO.getAdditionalSwitch(),BaseEnum.YES_ONE.getKey())){ for (ProdAdditionalFeeDatesDO prodAdditionalFeeDates : prodServiceVO.getProdAdditionalFeeDatesList()){ - prodAdditionalFeeDatesMapper.updateById(prodAdditionalFeeDates); + if(prodAdditionalFeeDates.getId()==null){ + prodAdditionalFeeDates.setProdId(prodServiceVO.getProdId()); + prodAdditionalFeeDatesMapper.insert(prodAdditionalFeeDates); + }else { + prodAdditionalFeeDatesMapper.updateById(prodAdditionalFeeDates); + } } } //特殊日期设置 if(Objects.equals(prodServiceVO.getAdditionalFeeSwitch(),BaseEnum.YES_ONE.getKey())){ for (ProdAdditionalFeePeriodsDO prodAdditionalFeePeriods : prodServiceVO.getProdAdditionalFeePeriodsList()){ - prodAdditionalFeePeriodsMapper.updateById(prodAdditionalFeePeriods); + if(prodAdditionalFeePeriods.getId()==null){ + prodAdditionalFeePeriods.setProdId(prodServiceVO.getProdId()); + prodAdditionalFeePeriodsMapper.insert(prodAdditionalFeePeriods); + }else { + prodAdditionalFeePeriodsMapper.updateById(prodAdditionalFeePeriods); + } } } //体重设置 if(Objects.equals(prodServiceVO.getWeightSwitch(),BaseEnum.YES_ONE.getKey())){ - prodWeightRangePricesMapper.updateById(prodServiceVO.prodWeightConfig); + if(prodServiceVO.getProdWeightConfig().getId()==null){ + prod.setWeightSwitch(BaseEnum.YES_ONE.getKey()); + ProdWeightRangePricesDO prodWeightRangePrices = prodServiceVO.getProdWeightConfig(); + prodWeightRangePrices.setProdId(prod.getProdId()); + prodWeightRangePricesMapper.insert(prodWeightRangePrices); + }else { + prodWeightRangePricesMapper.updateById(prodServiceVO.getProdWeightConfig()); + } } prodMapper.updateById(prod); } @@ -302,12 +372,17 @@ public class ProdServiceImpl implements ProdService { } @Override - public PageResult getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO){ - IPage prodPageList = prodMapper.getProdRecycleBinPageList(MyBatisUtils.buildPage(prodRecycleBinVO), prodRecycleBinVO.getDeleteTime(), prodRecycleBinVO.getProdName()); - for(SkuRecycleBinVO prodPage : prodPageList.getRecords()){ + public PageResult getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO){ + IPage prodPageList = prodMapper.getProdRecycleBinPageList(MyBatisUtils.buildPage(prodRecycleBinVO), prodRecycleBinVO.getDeleteTime(), prodRecycleBinVO.getProdName()); + for(ProdListVO prodPage : prodPageList.getRecords()){ prodPage.setRemainingDays(DateUtils.getRemainingDays(prodPage.getDeleteTime())); } return new PageResult<>(prodPageList.getRecords(),prodPageList.getTotal()); } + @Override + public void restoreProdList(List ids) { + prodMapper.batchRestoreProd(ids); + } + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java index 90f954b..03af5c2 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java @@ -23,6 +23,8 @@ import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.stream.Collectors; + import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.util.object.BeanUtils; @@ -76,14 +78,14 @@ public class SkuServiceImpl implements SkuService { @Transactional public void createSkuExtend(SkuExtendVO skuExtendVO) { //接运车辆配置 - if(Objects.equals(skuExtendVO.getTransportCarSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(skuExtendVO.getTransportCarSwitch(), BaseEnum.YES_ONE.getKey())) { SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.TRANSPORT_CAR_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.TRANSPORT_CAR_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); - for(SkuServiceDetailsDO skuServiceDetailsDO:skuExtendVO.getTransportCarList()){ + for (SkuServiceDetailsDO skuServiceDetailsDO : skuExtendVO.getTransportCarList()) { skuServiceDetailsDO.setServiceId(skuServicesFormDO.getId()); skuServiceDetailsMapper.insert(skuServiceDetailsDO); } @@ -93,20 +95,20 @@ public class SkuServiceImpl implements SkuService { skuServicesForm.setType(ServiceTypeEnum.TRANSPORT_CAR_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); - for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getTransportCarMaterialList()){ + for (SkuServiceMaterialDO skuServiceMaterialDO : skuExtendVO.getTransportCarMaterialList()) { skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); skuServiceMaterialMapper.insert(skuServiceMaterialDO); } } //遗体运输目的地配置 - if(Objects.equals(skuExtendVO.getTrafficSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(skuExtendVO.getTrafficSwitch(), BaseEnum.YES_ONE.getKey())) { SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.BODY_TRANSPORT_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.BODY_TRANSPORT_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); - for(SkuServiceTransportDO skuServiceTransportDO:skuExtendVO.getTrafficList()){ + for (SkuServiceTransportDO skuServiceTransportDO : skuExtendVO.getTrafficList()) { skuServiceTransportDO.setServiceId(skuServicesFormDO.getId()); skuServiceTransportMapper.insert(skuServiceTransportDO); } @@ -116,20 +118,20 @@ public class SkuServiceImpl implements SkuService { skuServicesForm.setType(ServiceTypeEnum.BODY_TRANSPORT_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); - for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getTrafficMaterialList()){ + for (SkuServiceMaterialDO skuServiceMaterialDO : skuExtendVO.getTrafficMaterialList()) { skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); skuServiceMaterialMapper.insert(skuServiceMaterialDO); } } //遗体清洁配置 - if(Objects.equals(skuExtendVO.getCleanSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(skuExtendVO.getCleanSwitch(), BaseEnum.YES_ONE.getKey())) { SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.BODY_CLEAN_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.BODY_CLEAN_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); - for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getCleanList()){ + for (SkuServiceDetailsDO skuServiceDetails : skuExtendVO.getCleanList()) { skuServiceDetails.setServiceId(skuServicesFormDO.getId()); skuServiceDetailsMapper.insert(skuServiceDetails); } @@ -139,20 +141,20 @@ public class SkuServiceImpl implements SkuService { skuServicesForm.setType(ServiceTypeEnum.BODY_CLEAN_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); - for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getCleanMaterialList()){ + for (SkuServiceMaterialDO skuServiceMaterialDO : skuExtendVO.getCleanMaterialList()) { skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); skuServiceMaterialMapper.insert(skuServiceMaterialDO); } } //追思告别配置 - if(Objects.equals(skuExtendVO.getReflectionSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(skuExtendVO.getReflectionSwitch(), BaseEnum.YES_ONE.getKey())) { SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.MEMORIAL_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.MEMORIAL_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); - for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getReflectionList()){ + for (SkuServiceDetailsDO skuServiceDetails : skuExtendVO.getReflectionList()) { skuServiceDetails.setServiceId(skuServicesFormDO.getId()); skuServiceDetailsMapper.insert(skuServiceDetails); } @@ -162,21 +164,21 @@ public class SkuServiceImpl implements SkuService { skuServicesForm.setType(ServiceTypeEnum.MEMORIAL_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); - for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getReflectionMaterialList()){ + for (SkuServiceMaterialDO skuServiceMaterialDO : skuExtendVO.getReflectionMaterialList()) { skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); skuServiceMaterialMapper.insert(skuServiceMaterialDO); } } //遗体火化配置 - if(Objects.equals(skuExtendVO.getCremationSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(skuExtendVO.getCremationSwitch(), BaseEnum.YES_ONE.getKey())) { SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.CREMATION_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.CREMATION_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); - for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getCremationList()){ + for (SkuServiceDetailsDO skuServiceDetails : skuExtendVO.getCremationList()) { skuServiceDetails.setServiceId(skuServicesFormDO.getId()); skuServiceDetailsMapper.insert(skuServiceDetails); } @@ -186,21 +188,21 @@ public class SkuServiceImpl implements SkuService { skuServicesForm.setType(ServiceTypeEnum.CREMATION_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); - for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getCremationMaterialList()){ + for (SkuServiceMaterialDO skuServiceMaterialDO : skuExtendVO.getCremationMaterialList()) { skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); skuServiceMaterialMapper.insert(skuServiceMaterialDO); } } //骨灰处理配置 - if(Objects.equals(skuExtendVO.getAshProcessingSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(skuExtendVO.getAshProcessingSwitch(), BaseEnum.YES_ONE.getKey())) { SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.ASH_PROCESSING_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.ASH_PROCESSING_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); - for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getAshProcessingList()){ + for (SkuServiceDetailsDO skuServiceDetails : skuExtendVO.getAshProcessingList()) { skuServiceDetails.setServiceId(skuServicesFormDO.getId()); skuServiceDetailsMapper.insert(skuServiceDetails); } @@ -210,7 +212,7 @@ public class SkuServiceImpl implements SkuService { skuForm.setType(ServiceTypeEnum.ASH_PROCESSING_DELIVERY.getCode()); skuForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuForm); - for(SkuServiceDeliverDO skuServiceDeliverDO:skuExtendVO.getAshProcessingDeliverList()){ + for (SkuServiceDeliverDO skuServiceDeliverDO : skuExtendVO.getAshProcessingDeliverList()) { skuServiceDeliverDO.setServiceId(skuForm.getId()); skuServiceDeliverMapper.insert(skuServiceDeliverDO); } @@ -220,35 +222,35 @@ public class SkuServiceImpl implements SkuService { skuServicesForm.setType(ServiceTypeEnum.ASH_PROCESSING_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); - for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getAshProcessingMaterialList()){ + for (SkuServiceMaterialDO skuServiceMaterialDO : skuExtendVO.getAshProcessingMaterialList()) { skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); skuServiceMaterialMapper.insert(skuServiceMaterialDO); } } //骨灰装殓配置 - if(Objects.equals(skuExtendVO.getBoneashSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(skuExtendVO.getBoneashSwitch(), BaseEnum.YES_ONE.getKey())) { SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.BONE_ASH_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.BONE_ASH_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); - for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getBoneashList()){ + for (SkuServiceDetailsDO skuServiceDetails : skuExtendVO.getBoneashList()) { skuServiceDetails.setServiceId(skuServicesFormDO.getId()); skuServiceDetailsMapper.insert(skuServiceDetails); } } //纪念品配置 - if(Objects.equals(skuExtendVO.getSouvenirSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(skuExtendVO.getSouvenirSwitch(), BaseEnum.YES_ONE.getKey())) { SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.SOUVENIR_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.SOUVENIR_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); - for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getSouvenirList()){ + for (SkuServiceDetailsDO skuServiceDetails : skuExtendVO.getSouvenirList()) { skuServiceDetails.setServiceId(skuServicesFormDO.getId()); skuServiceDetailsMapper.insert(skuServiceDetails); } @@ -258,7 +260,7 @@ public class SkuServiceImpl implements SkuService { skuForm.setType(ServiceTypeEnum.SOUVENIR_DELIVERY.getCode()); skuForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuForm); - for(SkuServiceDeliverDO skuServiceDeliverDO:skuExtendVO.getSouvenirDeliverList()){ + for (SkuServiceDeliverDO skuServiceDeliverDO : skuExtendVO.getSouvenirDeliverList()) { skuServiceDeliverDO.setServiceId(skuForm.getId()); skuServiceDeliverMapper.insert(skuServiceDeliverDO); } @@ -374,6 +376,7 @@ public class SkuServiceImpl implements SkuService { // 4. 返回组装好的对象 return skuExtendVO; } + @Override public void updateSku(SkuSaveReqVO updateReqVO) { // 校验存在 @@ -391,73 +394,77 @@ public class SkuServiceImpl implements SkuService { List skuList = skuPropVO.getSkuList(); List skuListNew = new ArrayList<>(); List skuListUpdate = new ArrayList<>(); - for(SkuDO sku : skuList){ - if(Objects.equals(BaseEnum.YES_ONE.getKey(), sku.getIsExist())){ + for (SkuDO sku : skuList) { + if (Objects.equals(BaseEnum.YES_ONE.getKey(), sku.getIsExist())) { sku.setProdId(skuPropVO.getProdId()); skuListNew.add(sku); - }else { + } else { skuListUpdate.add(sku); } } - if(CollUtil.isNotEmpty(skuListNew)){ + if (CollUtil.isNotEmpty(skuListNew)) { skuMapper.insertBatch(skuListNew); } - if(CollUtil.isNotEmpty(skuListUpdate)){ + if (CollUtil.isNotEmpty(skuListUpdate)) { skuMapper.updateBatch(skuListUpdate); } } - prodExtendMapper.updateByProdId(skuPropVO.getProdId(),skuPropVO.getIsDisable(),skuPropVO.getIsExpire()); + prodExtendMapper.updateByProdId(skuPropVO.getProdId(), skuPropVO.getIsDisable(), skuPropVO.getIsExpire()); //保存规格 prodPropService.updateProdPropAndValues(skuPropVO); } @Override public void deleteProp(Long id) { - ProdPropValueDO prodPropValueDO =prodPropValueService.getById(id); + ProdPropValueDO prodPropValueDO = prodPropValueService.getById(id); prodPropValueService.deleteProdPropValue(id); - List skuDOList = skuMapper.getSkuListByName(prodPropValueDO.getPropValue()); - List skuDOList1 = new ArrayList<>(); - for(SkuDO skuDO : skuDOList){ - if(skuDO.getProperties()!=null){ + List skuDOList = skuMapper.getSkuListByName(prodPropValueDO.getPropValue()); + List skuids = new ArrayList<>(); + for (SkuDO skuDO : skuDOList) { + if (skuDO.getProperties() != null) { String[] split = skuDO.getProperties().split(","); - for (String s : split){ - if(s.equals(prodPropValueDO.getPropValue())){ - skuDOList1.add(skuDO); + for (String s : split) { + if (s.equals(prodPropValueDO.getPropValue())) { + skuids.add(skuDO.getSkuId()); } } } } - skuMapper.deleteByIds(skuDOList1); + if (CollUtil.isNotEmpty(skuids)) { + skuMapper.batchSkuDeleted(skuids); + } } @Override public void disableProp(Long id) { - ProdPropValueDO prodPropValueDO =prodPropValueService.getById(id); + ProdPropValueDO prodPropValueDO = prodPropValueService.getById(id); prodPropValueDO.setState(BaseEnum.YES_ONE.getKey()); prodPropValueService.updateById(prodPropValueDO); - List skuDOList = skuMapper.getSkuListByName(prodPropValueDO.getPropValue()); + List skuDOList = skuMapper.getSkuListByName(prodPropValueDO.getPropValue()); List skuDOList1 = new ArrayList<>(); - for(SkuDO skuDO : skuDOList){ - if(skuDO.getProperties()!=null){ + for (SkuDO skuDO : skuDOList) { + if (skuDO.getProperties() != null) { String[] split = skuDO.getProperties().split(","); - for (String s : split){ - if(s.equals(prodPropValueDO.getPropValue())){ + for (String s : split) { + if (s.equals(prodPropValueDO.getPropValue())) { skuDO.setIsShelf(BaseEnum.NO_ZERO.getKey()); skuDOList1.add(skuDO); } } } } - skuMapper.updateBatch(skuDOList1); + if (CollUtil.isNotEmpty(skuDOList1)) { + skuMapper.updateBatch(skuDOList1); + } } + @Override public SkuPropInfoVO getSKuPropList(Long prodId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(ProdPropDO::getProdId,prodId); + wrapper.eq(ProdPropDO::getProdId, prodId); wrapper.eq(ProdPropDO::getState, BaseEnum.YES_ONE.getKey()) .orderByAsc(ProdPropDO::getSort); - List list = prodPropService.list(wrapper); list.forEach(prop -> { List values = prodPropValueService.list( @@ -465,14 +472,6 @@ public class SkuServiceImpl implements SkuService { .eq(ProdPropValueDO::getPropId, prop.getId()) .orderByAsc(ProdPropValueDO::getSort) ); - /* LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); - wrapper1.eq(ProdPropValueDO::getPropId,prop.getPropId()); - wrapper1.eq(ProdPropValueDO::getState, BaseEnum.YES_ONE.getKey()); - if (merchantComm.getScore() != null) { - wrapper.eq("score", merchantComm.getScore()); - } - wrapper1.orderByDesc(ProdPropValueDO::getSort);*/ - prop.setProdPropValues(values); }); SkuPropInfoVO skuPropInfoVO = new SkuPropInfoVO(); @@ -484,16 +483,146 @@ public class SkuServiceImpl implements SkuService { return skuPropInfoVO; } +/* @Override + public SkuPropInfoVO getSKuPropList(Long prodId, Integer isExpire, Integer state) { + if (prodId == null) { + throw new IllegalArgumentException("prodId 不能为空"); + } + + // 1. 查询商品扩展信息(用于默认值) + ProdExtendDO extendDO = prodExtendService.getOne( + new LambdaQueryWrapper().eq(ProdExtendDO::getProdId, prodId) + ); + if (extendDO == null) { + // 如果没有扩展信息,可返回空 VO 或抛异常,根据业务决定 + return buildEmptySkuPropInfoVO(prodId); + } + + // 2. 设置默认值:isExpire 和 state + Integer finalIsExpire = isExpire != null ? isExpire : extendDO.getIsExpire(); + Integer finalState = state != null ? state : extendDO.getIsDisable(); // 注意:这里你用的是 isDisable 当 state?需确认业务逻辑 + + // 3. 查询有效属性列表 + LambdaQueryWrapper propWrapper = new LambdaQueryWrapper<>(); + propWrapper.eq(ProdPropDO::getProdId, prodId) + .eq(ProdPropDO::getState, BaseEnum.YES_ONE.getKey()) // 只查启用的属性 + .orderByAsc(ProdPropDO::getSort); + + List propList = prodPropService.list(propWrapper); + if (propList.isEmpty()) { + return buildSkuPropInfoVO(prodId, propList, extendDO); + } + + // 4. 提取所有属性 ID,用于批量查询属性值 + List propIds = propList.stream() + .map(ProdPropDO::getId) + .collect(Collectors.toList()); + + // 5. 构建属性值查询条件(批量查询) + LambdaQueryWrapper valueWrapper = new LambdaQueryWrapper<>(); + valueWrapper.in(ProdPropValueDO::getPropId, propIds) + .eq(ProdPropValueDO::getState, BaseEnum.YES_ONE.getKey()); // 启用状态 + + // 根据 isExpire 过滤(注意字段是 getIsExpire) + if (BaseEnum.NO_ZERO.getKey().equals(finalIsExpire)) { + valueWrapper.eq(ProdPropValueDO::getIsExpire, BaseEnum.NO_ZERO.getKey()); + } else { + valueWrapper.eq(ProdPropValueDO::getIsExpire, BaseEnum.YES_ONE.getKey()); + } + + // 根据 state 过滤(注意:这里你用的是 getState 字段) + if (BaseEnum.NO_ZERO.getKey().equals(finalState)) { + valueWrapper.eq(ProdPropValueDO::getState, BaseEnum.NO_ZERO.getKey()); + } else { + valueWrapper.eq(ProdPropValueDO::getState, BaseEnum.YES_ONE.getKey()); + } + + valueWrapper.orderByDesc(ProdPropValueDO::getSort); + + List valueList = prodPropValueService.list(valueWrapper); + + // 6. 按 propId 分组,便于后续关联 + Map> valueMap = valueList.stream() + .collect(Collectors.groupingBy(ProdPropValueDO::getPropId)); + + // 7. 关联属性与属性值 + propList.forEach(prop -> + prop.setProdPropValues(valueMap.getOrDefault(prop.getId(), Collections.emptyList())) + ); + + // 8. 构建并返回 VO + return buildSkuPropInfoVO(prodId, propList, extendDO); + }*/ + + /* @Override + public SkuPropInfoVO getSKuPropList(Long prodId,Integer isExpire,Integer state) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProdPropDO::getProdId,prodId); + wrapper.eq(ProdPropDO::getState, BaseEnum.YES_ONE.getKey()) + .orderByAsc(ProdPropDO::getSort); + ProdExtendDO prodExtendDO = prodExtendService.getOne(new LambdaQueryWrapper().eq(ProdExtendDO::getProdId, prodId)); + if(isExpire==null){ + isExpire = prodExtendDO.getIsExpire(); + } + if(state==null){ + state = prodExtendDO.getIsDisable(); + } + List list = prodPropService.list(wrapper); + list.forEach(prop -> { + LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); + wrapper1.eq(ProdPropValueDO::getPropId,prop.getId()); + wrapper1.eq(ProdPropValueDO::getState, BaseEnum.YES_ONE.getKey()); + if (isExpire!= null&& Objects.equals(BaseEnum.NO_ZERO.getKey(),isExpire) ) { + wrapper1.eq(ProdPropValueDO::getIsExpire, BaseEnum.NO_ZERO.getKey()); + }else { + wrapper1.eq(ProdPropValueDO::getIsExpire, BaseEnum.YES_ONE.getKey()); + } + if (state!= null&& Objects.equals(BaseEnum.NO_ZERO.getKey(),state) ) { + wrapper1.eq(ProdPropValueDO::getState, BaseEnum.NO_ZERO.getKey()); + }else { + wrapper1.eq(ProdPropValueDO::getState, BaseEnum.YES_ONE.getKey()); + } + wrapper1.orderByDesc(ProdPropValueDO::getSort); + List lists = prodPropValueService.list(wrapper1); + prop.setProdPropValues(lists); + }); + SkuPropInfoVO skuPropInfoVO = new SkuPropInfoVO(); + skuPropInfoVO.setProdId(prodId); + skuPropInfoVO.setProdPropSaveReqVO(list); + + skuPropInfoVO.setIsDisable(prodExtendDO.getIsDisable()); + skuPropInfoVO.setIsExpire(prodExtendDO.getIsExpire()); + return skuPropInfoVO; + }*/ + + + // 封装构建 VO 的逻辑,避免重复代码 + private SkuPropInfoVO buildSkuPropInfoVO(Long prodId, List propList, ProdExtendDO extendDO) { + SkuPropInfoVO vo = new SkuPropInfoVO(); + vo.setProdId(prodId); + vo.setProdPropSaveReqVO(propList); + vo.setIsDisable(extendDO.getIsDisable()); + vo.setIsExpire(extendDO.getIsExpire()); + return vo; + } + + // 空情况处理 + private SkuPropInfoVO buildEmptySkuPropInfoVO(Long prodId) { + SkuPropInfoVO vo = new SkuPropInfoVO(); + vo.setProdId(prodId); + vo.setProdPropSaveReqVO(Collections.emptyList()); + vo.setIsDisable(BaseEnum.NO_ZERO.getKey()); // 默认值 + vo.setIsExpire(BaseEnum.NO_ZERO.getKey()); + return vo; + } + + @Override @Transactional(rollbackFor = Exception.class) public void deleteSku(Long id) { // 校验存在 validateSkuExists(id); - SkuDO sku = new SkuDO(); - sku.setSkuId(id); - sku.setDeleteTime(new Date()); - - SkuDO prodSku = skuMapper.selectById( id); + SkuDO prodSku = skuMapper.selectById(id); // Step 1: 获取该商品下所有未删除的 SKU 的 properties List activeProperties = skuMapper.selectPropertiesByProdIdAndNotDeleted(prodSku.getProdId()); @@ -508,7 +637,7 @@ public class SkuServiceImpl implements SkuService { } } // 删除 - skuMapper.deleteById(sku); + skuMapper.deleteBySkuId(id); // Step 3: 查询该商品下所有 rule=1 的属性值(销售属性) List allPropValues = prodPropValueMapper.selectSalesValuesByProdId(prodSku.getProdId()); // Step 4: 遍历每个属性值,检查是否还在被使用 @@ -518,7 +647,7 @@ public class SkuServiceImpl implements SkuService { if (!currentlyUsedValues.contains(value)) { // 可以安全删除该属性值 // 可以安全禁用该属性值 - ProdPropValueDO prodPropValueDO = new ProdPropValueDO(); + ProdPropValueDO prodPropValueDO = new ProdPropValueDO(); prodPropValueDO.setId(pv.getId()); prodPropValueDO.setIsExpire(BaseEnum.YES_ONE.getKey()); prodPropValueDO.setDeleteTime(new Date()); @@ -533,30 +662,22 @@ public class SkuServiceImpl implements SkuService { if (ids == null || ids.isEmpty()) { return; } - // Step 1: 查询这些 SKU 的基本信息(主要是 prod_id) List skuList = skuMapper.selectByIds(ids); if (skuList.isEmpty()) { return; } - Long prodId = skuList.get(0).getProdId(); // 校验是否属于同一个商品(可选) boolean allSameProd = skuList.stream().allMatch(s -> s.getProdId().equals(prodId)); if (!allSameProd) { throw new IllegalArgumentException("批量删除的 SKU 必须属于同一个商品"); } - - // Step 3: 获取该商品下【当前仍然未删除】的 SKU 的 properties List activeProperties = skuMapper.selectPropertiesByProdIdAndNotDeleted(prodId); - - for(Long id:ids){ - SkuDO sku = new SkuDO(); - sku.setSkuId(id); - sku.setDeleteTime(new Date()); + for (Long id : ids) { // 删除 - skuMapper.deleteById(sku); + skuMapper.deleteBySkuId(id); } // Step 4: 提取所有仍在使用的属性值(去重 + trim) Set currentlyUsedValues = new HashSet<>(); @@ -568,7 +689,6 @@ public class SkuServiceImpl implements SkuService { } } } - // Step 5: 查询该商品下所有 rule=1 的销售属性值(未删除的) List allPropValues = prodPropValueMapper.selectSalesValuesByProdId(prodId); @@ -586,12 +706,47 @@ public class SkuServiceImpl implements SkuService { } } + //恢复SKU + @Override + @Transactional(rollbackFor = Exception.class) + public void restoreSkuList(List ids) { + List skuList = skuMapper.selectByIds(ids); + if (skuList.isEmpty()) { + return; + } + Set currentlyUsedValues = new HashSet<>(); + for (SkuDO sku : skuList) { + sku.setDeleted(BaseEnum.NO_ZERO.getKey()); + skuMapper.updateById(sku); + if (sku.getProperties() != null && !sku.getProperties().trim().isEmpty()) { + String[] values = sku.getProperties().split(","); + for (String v : values) { + currentlyUsedValues.add(v.trim()); + } + } + } + //恢复被删除的属性值 + if(!currentlyUsedValues.isEmpty()){ + Long prodId = skuList.get(0).getProdId(); + List allPropValues =prodPropValueMapper.selectRestoreProp(prodId); + if(!allPropValues.isEmpty()){ + for (ProdPropValueDO pv : allPropValues){ + if (currentlyUsedValues.contains(pv.getPropValue())) { + pv.setIsExpire(BaseEnum.NO_ZERO.getKey()); + prodPropValueMapper.updateById(pv); + } + } + } + } + } + + @Override public void updatSkuIsShelf(Long id, Integer isShelf) { // 校验存在 validateSkuExists(id); - SkuDO prodSku = skuMapper.selectById( id); + SkuDO prodSku = skuMapper.selectById(id); // Step 1: 获取该商品下所有未禁用的 SKU 的 properties List activeProperties = skuMapper.selectPropertiesByProdIdShelf(prodSku.getProdId()); SkuDO sku = new SkuDO(); @@ -616,7 +771,7 @@ public class SkuServiceImpl implements SkuService { // 如果当前属性值不在“活跃使用”列表中,说明没有未删除的 SKU 使用它 if (!currentlyUsedValues.contains(value)) { // 可以安全禁用该属性值 - ProdPropValueDO prodPropValueDO = new ProdPropValueDO(); + ProdPropValueDO prodPropValueDO = new ProdPropValueDO(); prodPropValueDO.setId(pv.getId()); prodPropValueDO.setState(BaseEnum.NO_ZERO.getKey()); prodPropValueMapper.updateById(prodPropValueDO); @@ -647,7 +802,7 @@ public class SkuServiceImpl implements SkuService { // Step 3: 获取该商品下【当前仍然未禁用】的 SKU 的 properties List activeProperties = skuMapper.selectPropertiesByProdIdShelf(prodId); - for(Long id:ids){ + for (Long id : ids) { SkuDO sku = new SkuDO(); sku.setSkuId(id); sku.setIsShelf(isShelf); @@ -694,23 +849,24 @@ public class SkuServiceImpl implements SkuService { } @Override - public PageResult getSkuRecycleBinPageList(SkuPageReqVO pageReqVO){ + public PageResult getSkuRecycleBinPageList(SkuPageReqVO pageReqVO) { IPage prodPageList = skuMapper.getSkuRecycleBinPageList(MyBatisUtils.buildPage(pageReqVO), pageReqVO.getProdId(), pageReqVO.getProperties()); - for(SkuRecycleBinVO prodPage : prodPageList.getRecords()){ - prodPage.setRemainingDays(DateUtils.getRemainingDays(prodPage.getDeleteTime())); + for (SkuRecycleBinVO prodPage : prodPageList.getRecords()) { + if (prodPage.getDeleteTime() != null) { + prodPage.setRemainingDays(DateUtils.getRemainingDays(prodPage.getDeleteTime())); + } } - return new PageResult<>(prodPageList.getRecords(),prodPageList.getTotal()); + return new PageResult<>(prodPageList.getRecords(), prodPageList.getTotal()); } @Override - public PageResult getSkuPageList(SkuPageReqVO pageReqVO){ - IPage prodPageList = skuMapper.getSkuPageList(MyBatisUtils.buildPage(pageReqVO), pageReqVO.getProdId(), pageReqVO.getSkuId(),pageReqVO.getProperties()); + public PageResult getSkuPageList(SkuPageReqVO pageReqVO) { + IPage prodPageList = skuMapper.getSkuPageList(MyBatisUtils.buildPage(pageReqVO), pageReqVO.getProdId(), pageReqVO.getSkuId(), pageReqVO.getProperties()); - return new PageResult<>(prodPageList.getRecords(),prodPageList.getTotal()); + return new PageResult<>(prodPageList.getRecords(), prodPageList.getTotal()); } - @Override public PageResult getSkuPage(SkuPageReqVO pageReqVO) { return null; diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml index 1f8290c..1c7c164 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml @@ -520,14 +520,65 @@ - + select tp.prod_id,tp.prod_name,tp.category_name,tp.shop_id,tsd.shop_name,tpsa.area_name + from tz_prod tp + left join tz_shop_detail tsd on tp.shop_id = tsd.shop_id + left join tz_prod_service_area_relevance tpsar on tp.prod_id = tpsar.prod_id + left join tz_prod_service_areas tpsa on tpsar.area_id = tpsa.id + where deleted = 1 - and properties like concat('%', #{prodName}, '%') + and tp.properties like concat('%', #{prodName}, '%') - AND delete_time BETWEEN #{deleteTime[0]} AND #{deleteTime[1]} + AND tp.delete_time BETWEEN #{deleteTime[0]} AND #{deleteTime[1]} + + + UPDATE tz_prod + SET deleted = 0 + WHERE prod_id IN + + #{id} + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml index 269d0aa..0587e77 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml @@ -22,7 +22,7 @@ SELECT pp.id AS propId, pp.prop_name, - ppv.id AS valueId, + ppv.id AS id, ppv.prop_value FROM tz_prod_prop pp JOIN tz_prod_prop_value ppv ON pp.id = ppv.prop_id @@ -35,7 +35,7 @@ SELECT pp.id AS propId, pp.prop_name, - ppv.id AS valueId, + ppv.id AS id, ppv.prop_value FROM tz_prod_prop pp JOIN tz_prod_prop_value ppv ON pp.id = ppv.prop_id @@ -54,7 +54,30 @@ SET is_expire = 1, delete_time = NOW() WHERE id IN - #{ids} + #{id} + + + + UPDATE tz_prod_prop_value + SET + is_expire = 1, delete_time = NOW() + WHERE id = #{id} + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml index 35b464d..4d34704 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml @@ -26,14 +26,14 @@ and sku_id = #{skuId} - and properties like concat('%', #{propertiesName}, '%') + and properties like concat('%', #{properties}, '%') @@ -55,5 +55,22 @@ and is_shelf =0 + + UPDATE tz_sku + SET + deleted = 1, + delete_time = now() + WHERE sku_id = #{skuId} + + + + UPDATE tz_sku + SET deleted = 1, + delete_time = now() + WHERE sku_id IN + + #{id} + + \ No newline at end of file