diff --git a/logs/gateway-server.log.2025-07-25.0.gz b/logs/gateway-server.log.2025-07-25.0.gz deleted file mode 100644 index 9c34c97..0000000 Binary files a/logs/gateway-server.log.2025-07-25.0.gz and /dev/null differ diff --git a/logs/system-server.log.2025-07-25.0.gz b/logs/system-server.log.2025-07-25.0.gz deleted file mode 100644 index 4ce6b9b..0000000 Binary files a/logs/system-server.log.2025-07-25.0.gz and /dev/null differ diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdServiceVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdServiceVO.java index 79f6c5f..e00bca0 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdServiceVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdServiceVO.java @@ -1,6 +1,7 @@ package com.tashow.cloud.productapi.api.product.vo.prod; import com.fasterxml.jackson.annotation.JsonFormat; +import com.tashow.cloud.productapi.api.product.vo.prodadditionalfeedates.ProdAdditionalFeeBlackVO; import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse.ProdEmergencyInfoVO; import com.tashow.cloud.productapi.api.product.vo.prodreservationconfig.ProdReservationInfoVO; import com.tashow.cloud.productapi.api.product.vo.prodserviceareas.ProdServiceAreasInfoVO; @@ -9,8 +10,10 @@ import com.tashow.cloud.productapi.api.product.vo.prodweightrangeprices.ProdWeig import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; @Schema(description = "商品服务配置 VO") @@ -48,6 +51,22 @@ public class ProdServiceVO { @Schema(description = "预约配置") public ProdReservationInfoVO prodReservationConfig; + /* public List getProdReservationBlackList() { + if (prodReservationBlackList == null || prodReservationBlackList.isEmpty()) { + return prodReservationBlackList; + } + return prodReservationBlackList.stream() + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } + + public void setProdReservationBlackList(List prodReservationBlackList) { + this.prodReservationBlackList = prodReservationBlackList; + }*/ + + + + @Schema(description = "是否紧急响应服务0关1开") private Integer emergencySwitch; @Schema(description = "急响应服务配置") @@ -75,29 +94,26 @@ public class ProdServiceVO { @Schema(description = "体重配置") public ProdWeightRangePricesSaveInfoVO prodWeightConfig; - public List getProdAdditionalFeeDatesList() { - if (prodAdditionalFeeDatesList == null) { - return null; // 或者 return Collections.emptyList(); 根据你希望 null 还是 []d + + public ProdReservationInfoVO getProdReservationConfig() { + + if (this.prodReservationConfig == null) { + return null; } - return prodAdditionalFeeDatesList.stream() - .filter(black -> black != null && !black.isEmpty()) - .collect(Collectors.toList()); - } - - public void setProdAdditionalFeeDatesList(List prodAdditionalFeeDatesList) { - this.prodAdditionalFeeDatesList = prodAdditionalFeeDatesList; - } - - public List getProdAdditionalFeePeriodsList() { - if (prodAdditionalFeePeriodsList == null) { - return null; // 或者 return Collections.emptyList(); 根据你希望 null 还是 []d + // 判断是否“逻辑上为空” + if (isProdReservationInfoEmpty(this.prodReservationConfig)) { + return null; } - return prodAdditionalFeePeriodsList.stream() - .filter(black -> black != null && !black.isEmpty()) - .collect(Collectors.toList()); + return this.prodReservationConfig; } - public void setProdAdditionalFeePeriodsList(List prodAdditionalFeePeriodsList) { - this.prodAdditionalFeePeriodsList = prodAdditionalFeePeriodsList; + public void setProdReservationConfig(ProdReservationInfoVO prodReservationConfig) { + this.prodReservationConfig = prodReservationConfig; + } + + private boolean isProdReservationInfoEmpty(ProdReservationInfoVO config) { + if (config == null) return true; + // 判断所有字段是否都为 null 或空 + return config.getId() == null; } } \ No newline at end of file diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java index bd65f5c..bdf4c6d 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java @@ -36,31 +36,4 @@ public class ProdEmergencyInfoVO { @Schema(description = "紧急响应黑名单日期设置") public List prodEmergencyResponseBlackList; - - public List getProdEmergencyResponseIntervalsList() { - if (prodEmergencyResponseIntervalsList == null) { - return null; // 或者 return Collections.emptyList(); 根据你希望 null 还是 [] - } - return prodEmergencyResponseIntervalsList.stream() - .filter(black -> black != null && !black.isEmpty()) - .collect(Collectors.toList()); - } - - public void setProdEmergencyResponseIntervalsList(List prodEmergencyResponseIntervalsList) { - this.prodEmergencyResponseIntervalsList = prodEmergencyResponseIntervalsList; - } - - // getter 中做转换 - public List getProdEmergencyResponseBlackList() { - if (prodEmergencyResponseBlackList == null) { - return null; // 或者 return Collections.emptyList(); 根据你希望 null 还是 [] - } - return prodEmergencyResponseBlackList.stream() - .filter(black -> black != null && !black.isEmpty()) - .collect(Collectors.toList()); - } - - public void setProdEmergencyResponseBlackList(List prodEmergencyResponseBlackList) { - this.prodEmergencyResponseBlackList = prodEmergencyResponseBlackList; - } } \ No newline at end of file diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationInfoVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationInfoVO.java index 1678847..de8fd53 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationInfoVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationInfoVO.java @@ -9,6 +9,7 @@ import com.tashow.cloud.productapi.general.StringListTypeHandler; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -81,18 +82,22 @@ public class ProdReservationInfoVO { @Schema(description = "预约黑名单日期设置") public List prodReservationBlackList; - public List getProdReservationBlackList() { + +/* public List getProdReservationBlackList() { if (prodReservationBlackList == null || prodReservationBlackList.isEmpty()) { return prodReservationBlackList; } return prodReservationBlackList.stream() - .filter(Objects::nonNull) - .filter(black -> !black.isEmpty()) + .filter(black -> black != null && !black.isEmpty()) .collect(Collectors.toList()); } public void setProdReservationBlackList(List prodReservationBlackList) { this.prodReservationBlackList = prodReservationBlackList; - } + }*/ + + + + } \ No newline at end of file diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuSaveReqVO.java index 4f2b605..9c33d7c 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuSaveReqVO.java @@ -15,7 +15,6 @@ public class SkuSaveReqVO { private Long skuId; @Schema(description = "商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18784") - @NotNull(message = "商品ID不能为空") private Long prodId; @Schema(description = "销售属性组合字符串 格式是p1:v1;p2:v2") @@ -86,7 +85,6 @@ public class SkuSaveReqVO { private String prodName; @Schema(description = "版本号", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "版本号不能为空") private Integer version; @Schema(description = "商品重量") @@ -103,6 +101,11 @@ public class SkuSaveReqVO { @Schema(description = "最小购买数量") private Integer moq; + /** + * 是否默认规则0否1是 + */ + private Integer isSpecs; + /** * 扩展服务表单id */ 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 beb7461..e9d005d 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 @@ -3,6 +3,8 @@ package com.tashow.cloud.product.controller.admin; import com.tashow.cloud.common.pojo.CommonResult; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.product.mapper.ProdPropMapper; +import com.tashow.cloud.product.mapper.ProdPropValueMapper; import com.tashow.cloud.productapi.api.product.dto.*; import com.tashow.cloud.product.mapper.SkuMapper; import com.tashow.cloud.product.service.ProdExtendService; @@ -43,6 +45,12 @@ public class SkuController { @Resource private ProdExtendService prodExtendService; + + @Resource + private ProdPropValueMapper prodPropValueMapper; + @Resource + private ProdPropMapper prodPropMapper; + @Resource private SkuMapper skuMapper; @@ -56,20 +64,43 @@ public class SkuController { @PutMapping("/update") @Operation(summary = "更新单品SKU") @PermitAll - public CommonResult updateSku(@Valid @RequestBody SkuSaveReqVO updateReqVO) { + public CommonResult updateSku(@RequestBody SkuSaveReqVO updateReqVO) { skuService.updateSku(updateReqVO); return success(true); } @PutMapping("/updateProp") - @Operation(summary = "更新sku规格") + @Operation(summary = "新增统一保存sku规格") @PermitAll public CommonResult updateProp(@Valid @RequestBody SkuPropVO skuPropVO) { skuService.updateProp(skuPropVO); return success(true); } + @PutMapping("/updatePropValue") + @Operation(summary = "修改属性下面规格值") + @PermitAll + public CommonResult updatePropValue(@RequestParam("id") Long id,@RequestParam("propValue") String propValue) { + ProdPropValueDO propValueDO = new ProdPropValueDO(); + propValueDO.setId(id); + propValueDO.setPropValue(propValue); + prodPropValueMapper.updateById(propValueDO); + return success(true); + } + + @PutMapping("/updateProdProp") + @Operation(summary = "修改属性规格值") + @PermitAll + public CommonResult updateProdProp(@RequestParam("id") Long id,@RequestParam("propName") String propName) { + ProdPropDO prodPropDO = new ProdPropDO(); + prodPropDO.setId( id); + prodPropDO.setPropName(propName); + prodPropMapper.updateById(prodPropDO); + return success(true); + } + + @GetMapping("/getSKuPropList") @Operation(summary = "获取sku规格") @PermitAll @@ -87,7 +118,14 @@ public class SkuController { return success(pageResult); } - + @PostMapping("/restorePropList") + @Operation(summary = "恢复规格") + @Parameter(name = "ids", description = "skuids", required = true) + @PermitAll + public CommonResult restorePropList(@RequestParam("ids") List ids) { + skuService.restorePropList(ids); + return success(true); + } @PutMapping("/deleteProp") @@ -100,10 +138,12 @@ public class SkuController { @PutMapping("/disableProp") - @Operation(summary = "禁用规格值") + @Operation(summary = "禁用或者启用规格值") + @Parameter(name = "id", description = "规格id") + @Parameter(name = "state", description = "状态0禁用1启用") @PermitAll - public CommonResult disableProp(@RequestParam("id") Long id) { - skuService.disableProp(id); + public CommonResult disableProp(@RequestParam("id") Long id,@RequestParam("state") Integer state) { + skuService.disableProp(id,state); return success(true); } @@ -122,19 +162,12 @@ public class SkuController { @Parameter(name = "ids", description = "编号", required = true) @PermitAll public CommonResult deleteSkuList(@RequestParam("ids") List ids) { - /*for(Long id:ids){ - SkuDO sku = new SkuDO(); - sku.setSkuId(id); - sku.setDeleteTime(new Date()); - // 删除 - skuMapper.deleteById(sku); - }*/ skuService.deleteSkus(ids); return success(true); } - @PostMapping("/updateSkuShelf") + @PutMapping("/updateSkuShelf") @Operation(summary = "修改单品上下架") @Parameter(name = "id", description = "编号", required = true) @Parameter(name = "isShelf", description = "是否上下架(0下架 1上架)", required = true) @@ -144,7 +177,7 @@ public class SkuController { return success(true); } - @PostMapping("/updateSkuShelfList") + @PutMapping("/updateSkuShelfList") @Operation(summary = "批量上下架") @Parameter(name = "ids", description = "编号", required = true) @Parameter(name = "isShelf", description = "是否上下架(0下架 1上架)", required = true) @@ -154,7 +187,7 @@ public class SkuController { SkuDO sku = new SkuDO(); sku.setSkuId(id); sku.setIsShelf(isShelf); - skuMapper.updateBatch(sku); + skuMapper.updateById(sku); } skuService.updatSkuIsShelfs(ids,isShelf); return success(true); 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 461543d..9b93360 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 @@ -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.ProdPropValueDO; +import com.tashow.cloud.productapi.api.product.dto.SkuDO; import com.tashow.cloud.productapi.api.product.vo.prodpropvalue.ProPropRecycleBinVO; import com.tashow.cloud.productapi.api.product.vo.sku.SkuRecycleBinVO; import org.apache.ibatis.annotations.Mapper; @@ -40,4 +41,5 @@ public interface ProdPropValueMapper extends BaseMapperX { IPage getSKuPropRecycleBinList(Page page, @Param("prodId") Long prodId,@Param("propValue")String propValue); + List getskuListByPropValueIds(@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/SkuMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java index 4791ae5..e740e79 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 @@ -36,4 +36,8 @@ public interface SkuMapper extends BaseMapperX { List getskuListBySkuIds( @Param("ids")List ids); + + List getskuListByDeleted( @Param("prodId")Long prodId,@Param("ids")List ids); + + void batchSkuRecover(@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/SkuService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java index 24ba4c1..e01e077 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 @@ -70,7 +70,7 @@ public interface SkuService { * * @param id 删除规格值 */ - void disableProp(Long id); + void disableProp(Long id,Integer state); @@ -97,6 +97,12 @@ public interface SkuService { * @param ids */ void restoreSkuList(List ids); + /** + * 恢复规格 + * + * @param ids + */ + void restorePropList(List ids); /** diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java index d9a13f3..4105484 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java @@ -13,6 +13,7 @@ import com.tashow.cloud.product.service.ProdService; import com.tashow.cloud.productapi.api.product.vo.prod.*; import com.tashow.cloud.productapi.api.product.vo.prodadditionalfeedates.ProdAdditionalFeeBlackVO; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse.ProdEmergencyInfoVO; import com.tashow.cloud.productapi.api.product.vo.prodreservationconfig.ProdReservationInfoReqVO; import com.tashow.cloud.productapi.api.product.vo.prodreservationconfig.ProdReservationInfoVO; import com.tashow.cloud.productapi.api.product.vo.sku.SkuPageReqVO; @@ -236,13 +237,13 @@ public class ProdServiceImpl implements ProdService { if (Objects.equals(prodServiceVO.getReservationSwitch(), BaseEnum.YES_ONE.getKey())) { ProdReservationConfigDO reservationConfig = prodReservationConfigMapper.selectOne(new LambdaQueryWrapper() .eq(ProdReservationConfigDO::getProdId, prodServiceVO.getProdId())); + ProdReservationInfoReqVO prodReservationInfoVO = prodServiceVO.getProdReservationConfig(); if (reservationConfig == null) { prod.setReservationSwitch(BaseEnum.YES_ONE.getKey()); - ProdReservationInfoReqVO prodReservationInfoVO = prodServiceVO.getProdReservationConfig(); ProdReservationConfigDO prodReservationConfigDO = BeanUtils.toBean(prodReservationInfoVO, ProdReservationConfigDO.class); prodReservationConfigDO.setProdId(prod.getProdId()); - prodReservationConfigDO.setTimeBook(prodServiceVO.getProdReservationConfig().getTimeBook()); - prodReservationConfigDO.setReservationTimeSlots(prodServiceVO.getProdReservationConfig().getReservationTimeSlots()); + prodReservationConfigDO.setTimeSlot(prodReservationInfoVO.getTimeBook().getTimeSlot()); + prodReservationConfigDO.setReservationTimeSlots(prodReservationInfoVO.getTimeBook().getReservationTimeSlots()); prodReservationConfigMapper.insert(prodReservationConfigDO); if (prodServiceVO.getProdReservationConfig().getProdReservationBlackList() != null) { for (ProdAdditionalFeeBlackVO prodAdditionalFeeBlackVO : prodServiceVO.getProdReservationConfig().getProdReservationBlackList()) { @@ -254,8 +255,8 @@ public class ProdServiceImpl implements ProdService { } } else { ProdReservationConfigDO prodReservationConfigDO = BeanUtils.toBean(prodServiceVO.getProdReservationConfig(), ProdReservationConfigDO.class); - prodReservationConfigDO.setTimeBook(prodServiceVO.getProdReservationConfig().getTimeBook()); - prodReservationConfigDO.setReservationTimeSlots(prodServiceVO.getProdReservationConfig().getReservationTimeSlots()); + prodReservationConfigDO.setTimeSlot(prodReservationInfoVO.getTimeBook().getTimeSlot()); + prodReservationConfigDO.setReservationTimeSlots(prodReservationInfoVO.getTimeBook().getReservationTimeSlots()); prodReservationConfigMapper.updateById(prodReservationConfigDO); //先删除在新增 prodAdditionalFeeDatesMapper.deleteAdditionalFeeDates(prod.getProdId(), 2); @@ -359,18 +360,18 @@ public class ProdServiceImpl implements ProdService { //体重设置 if (Objects.equals(prodServiceVO.getWeightSwitch(), BaseEnum.YES_ONE.getKey())) { prod.setWeightSwitch(BaseEnum.YES_ONE.getKey()); - ProdExtendDO prodExtendDO =prodExtendMapper.selectOne(ProdExtendDO::getProdId, prod.getProdId()); - if(prodExtendDO!= null){ + ProdExtendDO prodExtendDO = prodExtendMapper.selectOne(ProdExtendDO::getProdId, prod.getProdId()); + if (prodExtendDO != null) { prodExtendDO.setIsWeightCharge(prodServiceVO.getProdWeightConfig().getIsWeightCharge()); prodExtendMapper.updateById(prodExtendDO); - }else { + } else { prodExtendDO = new ProdExtendDO(); prodExtendDO.setProdId(prod.getProdId()); prodExtendDO.setIsWeightCharge(prodServiceVO.getProdWeightConfig().getIsWeightCharge()); prodExtendMapper.insert(prodExtendDO); } prodWeightRangePricesMapper.deleteWeightRangePrices(prod.getProdId()); - if (prodServiceVO.getProdWeightConfig().getProdWeightConfigList() != null){ + if (prodServiceVO.getProdWeightConfig().getProdWeightConfigList() != null) { for (ProdWeightRangePricesDO prodWeightRangePricesDO : prodServiceVO.getProdWeightConfig().getProdWeightConfigList()) { prodWeightRangePricesDO.setProdId(prod.getProdId()); prodWeightRangePricesMapper.insert(prodWeightRangePricesDO); @@ -385,13 +386,47 @@ public class ProdServiceImpl implements ProdService { public ProdServiceVO getProdService(Long prodId) { ProdDO prodDO = prodMapper.selectById(prodId); if (prodDO != null && prodDO.getRegionSwitch() == BaseEnum.YES_ONE.getKey()) { - return prodMapper.selectProdService(prodDO.getProdId(), prodDO.getRegionSwitch(), + ProdServiceVO prodServiceVO = prodMapper.selectProdService(prodDO.getProdId(), prodDO.getRegionSwitch(), prodDO.getReservationSwitch(), prodDO.getEmergencySwitch(), prodDO.getOrderLimitSwitch(), prodDO.getAdditionalSwitch(), prodDO.getAdditionalFeeSwitch(), prodDO.getWeightSwitch()); + if (Objects.equals(prodDO.getReservationSwitch(), BaseEnum.YES_ONE.getKey())&&prodServiceVO.getProdReservationConfig().getProdReservationBlackList().get(0).isEmpty()) { + ProdReservationInfoVO prodReservationInfoVO = prodServiceVO.getProdReservationConfig(); + prodReservationInfoVO.setProdReservationBlackList(new ArrayList<>()); + } + if (Objects.equals(prodDO.getEmergencySwitch(), BaseEnum.YES_ONE.getKey())&&prodServiceVO.getProdEmergencyInfoVO().getProdEmergencyResponseIntervalsList().get(0).isEmpty()) { + ProdEmergencyInfoVO prodEmergencyInfoVO = prodServiceVO.getProdEmergencyInfoVO(); + prodEmergencyInfoVO.setProdEmergencyResponseIntervalsList(new ArrayList<>()); + } + if (Objects.equals(prodDO.getAdditionalSwitch(), BaseEnum.YES_ONE.getKey())&&prodServiceVO.getProdAdditionalFeeDatesList().get(0).isEmpty()) { + prodServiceVO.setProdAdditionalFeeDatesList(new ArrayList<>()); + } + if (Objects.equals(prodDO.getAdditionalFeeSwitch(), BaseEnum.YES_ONE.getKey())&&prodServiceVO.getProdAdditionalFeePeriodsList().get(0).isEmpty()) { + prodServiceVO.setProdAdditionalFeePeriodsList(new ArrayList<>()); + } + return prodServiceVO; } else { - return prodMapper.selectProdServiceInfo(prodDO.getProdId(), + ProdServiceVO prodServiceVO = prodMapper.selectProdServiceInfo(prodDO.getProdId(), prodDO.getReservationSwitch(), prodDO.getEmergencySwitch(), prodDO.getOrderLimitSwitch(), prodDO.getAdditionalSwitch(), prodDO.getAdditionalFeeSwitch(), prodDO.getWeightSwitch()); + if (Objects.equals(prodDO.getReservationSwitch(), BaseEnum.YES_ONE.getKey())&prodServiceVO.getProdReservationConfig().getProdReservationBlackList().get(0).isEmpty()) { + ProdReservationInfoVO prodReservationInfoVO = prodServiceVO.getProdReservationConfig(); + prodReservationInfoVO.setProdReservationBlackList(new ArrayList<>()); + } + if (Objects.equals(prodDO.getEmergencySwitch(), BaseEnum.YES_ONE.getKey())&&prodServiceVO.getProdEmergencyInfoVO().getProdEmergencyResponseIntervalsList().get(0).isEmpty()) { + ProdEmergencyInfoVO prodEmergencyInfoVO = prodServiceVO.getProdEmergencyInfoVO(); + prodEmergencyInfoVO.setProdEmergencyResponseIntervalsList(new ArrayList<>()); + } + if (Objects.equals(prodDO.getEmergencySwitch(), BaseEnum.YES_ONE.getKey())&&prodServiceVO.getProdEmergencyInfoVO().getProdEmergencyResponseBlackList().get(0).isEmpty()) { + ProdEmergencyInfoVO prodEmergencyInfoVO = prodServiceVO.getProdEmergencyInfoVO(); + prodEmergencyInfoVO.setProdEmergencyResponseBlackList(new ArrayList<>()); + } + if (Objects.equals(prodDO.getAdditionalSwitch(), BaseEnum.YES_ONE.getKey())&&prodServiceVO.getProdAdditionalFeeDatesList().get(0).isEmpty()) { + prodServiceVO.setProdAdditionalFeeDatesList(new ArrayList<>()); + } + if (Objects.equals(prodDO.getAdditionalFeeSwitch(), BaseEnum.YES_ONE.getKey())&&prodServiceVO.getProdAdditionalFeePeriodsList().get(0).isEmpty()) { + prodServiceVO.setProdAdditionalFeePeriodsList(new ArrayList<>()); + } + return prodServiceVO; } 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 440bc79..2983b6e 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 @@ -395,21 +395,15 @@ public class SkuServiceImpl implements SkuService { if (CollectionUtil.isNotEmpty(skuPropVO.getSkuList())) { 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())) { sku.setProdId(skuPropVO.getProdId()); skuListNew.add(sku); - } else { - skuListUpdate.add(sku); } } if (CollUtil.isNotEmpty(skuListNew)) { skuMapper.insertBatch(skuListNew); } - if (CollUtil.isNotEmpty(skuListUpdate)) { - skuMapper.updateBatch(skuListUpdate); - } } prodExtendMapper.updateByProdId(skuPropVO.getProdId(), skuPropVO.getIsDisable(), skuPropVO.getIsExpire()); //保存规格 @@ -438,25 +432,27 @@ public class SkuServiceImpl implements SkuService { } @Override - public void disableProp(Long id) { + public void disableProp(Long id, Integer state) { ProdPropValueDO prodPropValueDO = prodPropValueService.getById(id); - prodPropValueDO.setState(BaseEnum.YES_ONE.getKey()); + prodPropValueDO.setState(state); prodPropValueService.updateById(prodPropValueDO); - List skuDOList = skuMapper.getSkuListByName(prodPropValueDO.getPropValue()); - List skuDOList1 = new ArrayList<>(); - for (SkuDO skuDO : skuDOList) { - if (skuDO.getProperties() != null) { - String[] split = skuDO.getProperties().split(","); - for (String s : split) { - if (s.equals(prodPropValueDO.getPropValue())) { - skuDO.setIsShelf(BaseEnum.NO_ZERO.getKey()); - skuDOList1.add(skuDO); + if (Objects.equals(BaseEnum.NO_ZERO.getKey(), state)) { + List skuDOList = skuMapper.getSkuListByName(prodPropValueDO.getPropValue()); + List skuDOList1 = new ArrayList<>(); + for (SkuDO skuDO : skuDOList) { + if (skuDO.getProperties() != null) { + String[] split = skuDO.getProperties().split(","); + for (String s : split) { + if (s.equals(prodPropValueDO.getPropValue())) { + skuDO.setIsShelf(BaseEnum.NO_ZERO.getKey()); + skuDOList1.add(skuDO); + } } } } - } - if (CollUtil.isNotEmpty(skuDOList1)) { - skuMapper.updateBatch(skuDOList1); + if (CollUtil.isNotEmpty(skuDOList1)) { + skuMapper.updateBatch(skuDOList1); + } } } @@ -472,6 +468,7 @@ public class SkuServiceImpl implements SkuService { List values = prodPropValueService.list( new LambdaQueryWrapper() .eq(ProdPropValueDO::getPropId, prop.getId()) + .eq(ProdPropValueDO::getDeleted, BaseEnum.NO_ZERO.getKey()) .orderByAsc(ProdPropValueDO::getSort) ); prop.setProdPropValues(values); @@ -487,7 +484,7 @@ public class SkuServiceImpl implements SkuService { @Override public PageResult getSKuPropRecycleBinList(ProPageReqVO proPageReqVO) { - IPage prodPageList = prodPropValueMapper.getSKuPropRecycleBinList(MyBatisUtils.buildPage(proPageReqVO),proPageReqVO.getProdId(), proPageReqVO.getPropValue()); + IPage prodPageList = prodPropValueMapper.getSKuPropRecycleBinList(MyBatisUtils.buildPage(proPageReqVO), proPageReqVO.getProdId(), proPageReqVO.getPropValue()); for (ProPropRecycleBinVO prodPage : prodPageList.getRecords()) { if (prodPage.getDeleteTime() != null) { prodPage.setRemainingDays(DateUtils.getRemainingDays(prodPage.getDeleteTime())); @@ -727,6 +724,20 @@ public class SkuServiceImpl implements SkuService { if (skuList.isEmpty()) { return; } + + // 获取商品下所有被删除的SKU(除了当前要恢复的 ids) + List skuAllDeletedList = skuMapper.getskuListByDeleted(skuList.get(0).getProdId(), ids); + + Set allDeletedValues = new HashSet<>(); + for (SkuDO sku : skuAllDeletedList) { + if (sku.getProperties() != null && !sku.getProperties().trim().isEmpty()) { + String[] values = sku.getProperties().split(","); + for (String v : values) { + allDeletedValues.add(v.trim()); + } + } + } + Set currentlyUsedValues = new HashSet<>(); for (SkuDO sku : skuList) { skuMapper.updateSkuDeleted(sku.getSkuId()); @@ -737,21 +748,41 @@ public class SkuServiceImpl implements SkuService { } } } - //恢复被删除的属性值 - 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); - } + + // === 核心修改点:提取 currentlyUsedValues 中不在 allDeletedValues 的值(即新增启用的规格值)=== + Set valuesToRestore = new HashSet<>(currentlyUsedValues); + valuesToRestore.removeAll(allDeletedValues); // 只保留“之前被删掉过”的规格值 + + // 如果没有需要恢复的规格值,直接返回 + if (valuesToRestore.isEmpty()) { + return; + } + + // 查询商品下所有属性值 + Long prodId = skuList.get(0).getProdId(); + List allPropValues = prodPropValueMapper.selectRestoreProp(prodId); + + if (!allPropValues.isEmpty()) { + for (ProdPropValueDO pv : allPropValues) { + // 仅当该属性值是“当前使用”且“之前被删除”的(即在 valuesToRestore 中),才恢复 + if (valuesToRestore.contains(pv.getPropValue())) { + pv.setIsExpire(BaseEnum.NO_ZERO.getKey()); // 标记为未过期 + prodPropValueMapper.updateById(pv); } } } } + @Override + public void restorePropList(List ids) { + List prodPropValueDOList = prodPropValueMapper.getskuListByPropValueIds(ids); + for(ProdPropValueDO prodPropValueDO: prodPropValueDOList){ + prodPropValueDO.setState(BaseEnum.YES_ONE.getKey()); + prodPropValueService.updateById(prodPropValueDO); + } + + } + @Override public void updatSkuIsShelf(Long id, Integer isShelf) { @@ -761,10 +792,8 @@ public class SkuServiceImpl implements SkuService { SkuDO prodSku = skuMapper.selectById(id); // Step 1: 获取该商品下所有未禁用的 SKU 的 properties List activeProperties = skuMapper.selectPropertiesByProdIdShelf(prodSku.getProdId()); - SkuDO sku = new SkuDO(); - sku.setSkuId(id); - sku.setIsShelf(isShelf); - skuMapper.updateById(sku); + prodSku.setIsShelf(isShelf); + skuMapper.updateById(prodSku); // Step 2: 提取所有正在被使用的属性值(去重) Set currentlyUsedValues = new HashSet<>(); for (String props : activeProperties) { @@ -818,7 +847,7 @@ public class SkuServiceImpl implements SkuService { SkuDO sku = new SkuDO(); sku.setSkuId(id); sku.setIsShelf(isShelf); - skuMapper.updateBatch(sku); + skuMapper.updateById(sku); } // Step 4: 提取所有仍在使用的属性值(去重 + trim) Set currentlyUsedValues = new HashSet<>(); 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 9ade8cc..3074c3f 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 @@ -28,11 +28,11 @@ - - - - - + + + + + @@ -56,13 +56,14 @@ - - - - - - - + + + + + + + @@ -105,6 +106,7 @@ + @@ -128,16 +130,10 @@ - - - - - - @@ -162,11 +158,11 @@ - - - - - + + + + + @@ -190,13 +186,13 @@ - - - - - - - + + + + + + @@ -262,6 +258,7 @@ SELECT + p.prod_id, p.emergency_switch, p.additional_switch, p.additional_fee_switch, @@ -418,11 +420,13 @@ erc.id AS erc_record_id, erc.response_time_slots as erc_response_time_slots, - epafd.id AS erc_record_id, - epafd.date_type as erc_date_type, - epafd.custom_time_slots as erc_custom_time_slots, - epafd.type as erc_type, - epafd.is_enabled as erc_is_enabled, + + epafd.id AS eblack_record_id, + epafd.date_type as eblack_date_type, + epafd.custom_time_slots as eblack_custom_time_slots, + epafd.type as eblack_type, + epafd.is_enabled as eblack_is_enabled, + eri.id AS eri_record_id, eri.config_id AS eri_config_id, eri.mode_name, @@ -474,11 +478,12 @@ rc.change_time_rule AS rc_change_time_rule, rc.time_slot AS rc_time_slot, rc.max_change_times AS rc_max_change_times, - rpafd.id AS rcp_record_id, - rpafd.date_type as rcp_date_type, - rpafd.custom_time_slots as rcp_custom_time_slots, - rpafd.type as rcp_type, - rpafd.is_enabled as rcp_is_enabled, + + rpafd.id AS black_id, + rpafd.date_type as black_date_type, + rpafd.custom_time_slots as black_custom_time_slots, + rpafd.type as black_type, + rpafd.is_enabled as black_is_enabled, @@ -496,13 +501,13 @@ wrp.price AS wrp_price, wrp.is_enabled AS wrp_is_enabled, - p.prod_id + p.prod_name FROM tz_prod p LEFT JOIN tz_prod_emergency_response erc ON p.prod_id = erc.prod_id AND erc.deleted = 0 - LEFT JOIN tz_prod_additional_fee_dates epafd ON erc.prod_id = epafd.prod_id AND epafd.deleted = 0 AND epafd.type = 3 + LEFT JOIN tz_prod_additional_fee_dates epafd ON p.prod_id = epafd.prod_id AND epafd.deleted = 0 AND epafd.type = 3 LEFT JOIN tz_prod_emergency_response_intervals eri ON erc.id = eri.config_id AND eri.deleted = 0 @@ -513,7 +518,7 @@ LEFT JOIN tz_prod_reservation_config rc ON p.prod_id = rc.prod_id AND rc.deleted = 0 - LEFT JOIN tz_prod_additional_fee_dates rpafd ON rc.id = rpafd.prod_id AND rpafd.deleted = 0 AND rpafd.type = 2 + LEFT JOIN tz_prod_additional_fee_dates rpafd ON p.prod_id = rpafd.prod_id AND rpafd.deleted = 0 AND rpafd.type = 2 LEFT JOIN tz_product_order_limit ol ON p.prod_id = ol.prod_id AND ol.deleted = 0 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 23d1a60..7a0f9f3 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 @@ -62,7 +62,7 @@ UPDATE tz_prod_prop_value SET - is_expire = 1, delete_time = NOW() + deleted = 1, delete_time = NOW() WHERE id = #{id} @@ -87,10 +87,20 @@ FROM tz_prod_prop pp JOIN tz_prod_prop_value ppv ON pp.id = ppv.prop_id WHERE pp.prod_id = #{prodId} - AND ppv.is_expire = 1 + AND (ppv.is_expire = 1 or ppv.deleted = 1) and prop_value like concat('%', #{propValue}, '%') + + + \ 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 506e728..55602d9 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 @@ -84,10 +84,31 @@ + + + UPDATE tz_sku SET deleted = 0 WHERE sku_id = #{skuId} + + + + UPDATE tz_sku + SET deleted = 0 + WHERE sku_id IN + + #{id} + + + \ No newline at end of file