sku规则恢复和列表

This commit is contained in:
xuelijun
2025-08-14 14:13:29 +08:00
parent 257dc16c94
commit 7afa85b941
14 changed files with 539 additions and 184 deletions

View File

@@ -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<String> areaNameList;
/**
* 还剩多少天
*/
private Long remainingDays;
/**
* 删除时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date deleteTime;
}

View File

@@ -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<PageResult<SkuRecycleBinVO>> getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO) {
PageResult<SkuRecycleBinVO> pageResult = prodService.getProdRecycleBinPageList(prodRecycleBinVO);
public CommonResult<PageResult<ProdListVO>> getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO) {
PageResult<ProdListVO> pageResult = prodService.getProdRecycleBinPageList(prodRecycleBinVO);
return success(pageResult);
}
@PostMapping("/restoreProdList")
@Operation(summary = "恢复商品")
@Parameter(name = "ids", description = "商品id集合", required = true)
@PermitAll
public CommonResult<Boolean> restoreProdList(@RequestParam("ids") List<Long> ids) {
prodService.restoreProdList(ids);
return success(true);
}
}

View File

@@ -107,7 +107,7 @@ public class SkuController {
@Operation(summary = "批量删除SKU")
@Parameter(name = "ids", description = "编号", required = true)
@PermitAll
public CommonResult<Boolean> deleteSkuList(@RequestParam("id") List<Long> ids) {
public CommonResult<Boolean> deleteSkuList(@RequestParam("ids") List<Long> 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<Boolean> 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<Boolean> updateSkuShelfList(@RequestParam("id") List<Long> ids,@RequestParam("isShelf") Integer isShelf) {
public CommonResult<Boolean> updateSkuShelfList(@RequestParam("ids") List<Long> 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<Boolean> restoreSkuList(@RequestParam("ids") List<Long> 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回收站分页列表")

View File

@@ -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<ProdDO> {
, @Param("weightSwitch") Integer weightSwitch
);
IPage<SkuRecycleBinVO> getProdRecycleBinPageList(Page<?> page,@Param("createTime") String[] createTime
IPage<ProdListVO> getProdRecycleBinPageList(Page<?> page, @Param("createTime") String[] createTime
, @Param("prodName") String prodName);
void batchRestoreProd(@Param("ids") List<Long> ids);
}

View File

@@ -29,4 +29,9 @@ public interface ProdPropValueMapper extends BaseMapperX<ProdPropValueDO> {
List<ProdPropValueDO> selectSalesValuesByState(@Param("prodId") Long prodId);
void batchMarkDeleted(@Param("ids") List<Long> ids);
int deleteProdPropValueById( @Param("id")Long id);
List<ProdPropValueDO> selectRestoreProp(@Param("prodId") Long prodId);
}

View File

@@ -27,4 +27,8 @@ public interface SkuMapper extends BaseMapperX<SkuDO> {
List<String> selectPropertiesByProdIdAndNotDeleted( @Param("prodId")Long prodId);
List<String> selectPropertiesByProdIdShelf( @Param("prodId")Long prodId);
int deleteBySkuId( @Param("skuId")Long skuId);
void batchSkuDeleted(@Param("ids") List<Long> ids);
}

View File

@@ -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<ProdDO> getProdPage(ProdPageReqVO pageReqVO);
PageResult<SkuRecycleBinVO> getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO);
PageResult<ProdListVO> getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO);
/**
* 恢复商品
*
* @param ids
*/
void restoreProdList(List<Long> ids);
}

View File

@@ -88,6 +88,13 @@ public interface SkuService {
*/
void deleteSkus(List<Long> ids);
/**
* 恢复SKU
*
* @param ids
*/
void restoreSkuList(List<Long> ids);
/**
* 删除单品SKU

View File

@@ -54,7 +54,7 @@ public class ProdPropValueServiceImpl extends ServiceImpl<ProdPropValueMapper,
// 校验存在
validateProdPropValueExists(id);
// 删除
prodPropValueMapper.deleteById(id);
prodPropValueMapper.deleteProdPropValueById(id);
}
private void validateProdPropValueExists(Long id) {

View File

@@ -11,10 +11,7 @@ import com.tashow.cloud.product.mapper.*;
import com.tashow.cloud.product.service.ProdPropService;
import com.tashow.cloud.product.service.ProdService;
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;
@@ -183,7 +180,30 @@ public class ProdServiceImpl implements ProdService {
ProdDO prod = BeanUtils.toBean(prodServiceVO, ProdDO.class);
//服务区域设置
if(Objects.equals(prodServiceVO.getRegionSwitch(),BaseEnum.YES_ONE.getKey())){
ProdServiceOverAreaRulesDO overAreaRules= prodServiceOverAreaRulesMapper.selectOne(new LambdaQueryWrapper<ProdServiceOverAreaRulesDO>()
.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<String> areaNameList =prodServiceVO.getProdServiceAreasInfo().getAreaNameList();
for(String areaName : areaNameList){
//查询区域信息
ProdServiceAreasDO prodServiceAreas = prodServiceAreasMapper.selectOne(new LambdaQueryWrapper<ProdServiceAreasDO>()
.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());
@@ -206,12 +226,36 @@ public class ProdServiceImpl implements ProdService {
}
}
}
}
//预约设置设置
if(Objects.equals(prodServiceVO.getReservationSwitch(),BaseEnum.YES_ONE.getKey())){
prodReservationConfigMapper.updateById(prodServiceVO.prodReservationConfig);
ProdReservationConfigDO reservationConfig= prodReservationConfigMapper.selectOne(new LambdaQueryWrapper<ProdReservationConfigDO>()
.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 rmergencyResponse= prodEmergencyResponseMapper.selectOne(new LambdaQueryWrapper<ProdEmergencyResponseDO>()
.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);
@@ -221,27 +265,53 @@ public class ProdServiceImpl implements ProdService {
prodEmergencyResponseIntervalsMapper.insert(prodEmergencyResponseIntervals);
}
}
}
}
//接单上线设置
if(Objects.equals(prodServiceVO.getOrderLimitSwitch(),BaseEnum.YES_ONE.getKey())){
productOrderLimitMapper.updateById(prodServiceVO.productOrderLimitVO);
ProductOrderLimitDO orderLimit= productOrderLimitMapper.selectOne(new LambdaQueryWrapper<ProductOrderLimitDO>()
.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()){
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()){
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<SkuRecycleBinVO> getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO){
IPage<SkuRecycleBinVO> prodPageList = prodMapper.getProdRecycleBinPageList(MyBatisUtils.buildPage(prodRecycleBinVO), prodRecycleBinVO.getDeleteTime(), prodRecycleBinVO.getProdName());
for(SkuRecycleBinVO prodPage : prodPageList.getRecords()){
public PageResult<ProdListVO> getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO){
IPage<ProdListVO> 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<Long> ids) {
prodMapper.batchRestoreProd(ids);
}
}

View File

@@ -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<SkuDO> skuList = skuPropVO.getSkuList();
List<SkuDO> skuListNew = new ArrayList<>();
List<SkuDO> 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<SkuDO> skuDOList = skuMapper.getSkuListByName(prodPropValueDO.getPropValue());
List<SkuDO> skuDOList1 = new ArrayList<>();
for(SkuDO skuDO : skuDOList){
if(skuDO.getProperties()!=null){
List<Long> 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<SkuDO> skuDOList = skuMapper.getSkuListByName(prodPropValueDO.getPropValue());
List<SkuDO> 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);
}
}
}
}
if (CollUtil.isNotEmpty(skuDOList1)) {
skuMapper.updateBatch(skuDOList1);
}
}
@Override
public SkuPropInfoVO getSKuPropList(Long prodId) {
LambdaQueryWrapper<ProdPropDO> 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<ProdPropDO> list = prodPropService.list(wrapper);
list.forEach(prop -> {
List<ProdPropValueDO> values = prodPropValueService.list(
@@ -465,14 +472,6 @@ public class SkuServiceImpl implements SkuService {
.eq(ProdPropValueDO::getPropId, prop.getId())
.orderByAsc(ProdPropValueDO::getSort)
);
/* LambdaQueryWrapper<ProdPropValueDO> 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<ProdExtendDO>().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<ProdPropDO> propWrapper = new LambdaQueryWrapper<>();
propWrapper.eq(ProdPropDO::getProdId, prodId)
.eq(ProdPropDO::getState, BaseEnum.YES_ONE.getKey()) // 只查启用的属性
.orderByAsc(ProdPropDO::getSort);
List<ProdPropDO> propList = prodPropService.list(propWrapper);
if (propList.isEmpty()) {
return buildSkuPropInfoVO(prodId, propList, extendDO);
}
// 4. 提取所有属性 ID用于批量查询属性值
List<Long> propIds = propList.stream()
.map(ProdPropDO::getId)
.collect(Collectors.toList());
// 5. 构建属性值查询条件(批量查询)
LambdaQueryWrapper<ProdPropValueDO> 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<ProdPropValueDO> valueList = prodPropValueService.list(valueWrapper);
// 6. 按 propId 分组,便于后续关联
Map<Long, List<ProdPropValueDO>> 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<ProdPropDO> 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<ProdExtendDO>().eq(ProdExtendDO::getProdId, prodId));
if(isExpire==null){
isExpire = prodExtendDO.getIsExpire();
}
if(state==null){
state = prodExtendDO.getIsDisable();
}
List<ProdPropDO> list = prodPropService.list(wrapper);
list.forEach(prop -> {
LambdaQueryWrapper<ProdPropValueDO> 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<ProdPropValueDO> 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<ProdPropDO> 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<String> 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<ProdPropValueDO> allPropValues = prodPropValueMapper.selectSalesValuesByProdId(prodSku.getProdId());
// Step 4: 遍历每个属性值,检查是否还在被使用
@@ -533,30 +662,22 @@ public class SkuServiceImpl implements SkuService {
if (ids == null || ids.isEmpty()) {
return;
}
// Step 1: 查询这些 SKU 的基本信息(主要是 prod_id
List<SkuDO> 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<String> 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<String> currentlyUsedValues = new HashSet<>();
@@ -568,7 +689,6 @@ public class SkuServiceImpl implements SkuService {
}
}
}
// Step 5: 查询该商品下所有 rule=1 的销售属性值(未删除的)
List<ProdPropValueDO> allPropValues = prodPropValueMapper.selectSalesValuesByProdId(prodId);
@@ -586,12 +706,47 @@ public class SkuServiceImpl implements SkuService {
}
}
//恢复SKU
@Override
@Transactional(rollbackFor = Exception.class)
public void restoreSkuList(List<Long> ids) {
List<SkuDO> skuList = skuMapper.selectByIds(ids);
if (skuList.isEmpty()) {
return;
}
Set<String> 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<ProdPropValueDO> 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<String> activeProperties = skuMapper.selectPropertiesByProdIdShelf(prodSku.getProdId());
SkuDO sku = new SkuDO();
@@ -647,7 +802,7 @@ public class SkuServiceImpl implements SkuService {
// Step 3: 获取该商品下【当前仍然未禁用】的 SKU 的 properties
List<String> 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<SkuRecycleBinVO> getSkuRecycleBinPageList(SkuPageReqVO pageReqVO){
public PageResult<SkuRecycleBinVO> getSkuRecycleBinPageList(SkuPageReqVO pageReqVO) {
IPage<SkuRecycleBinVO> prodPageList = skuMapper.getSkuRecycleBinPageList(MyBatisUtils.buildPage(pageReqVO), pageReqVO.getProdId(), pageReqVO.getProperties());
for(SkuRecycleBinVO prodPage : prodPageList.getRecords()){
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<SkuDO> getSkuPageList(SkuPageReqVO pageReqVO){
IPage<SkuDO> prodPageList = skuMapper.getSkuPageList(MyBatisUtils.buildPage(pageReqVO), pageReqVO.getProdId(), pageReqVO.getSkuId(),pageReqVO.getProperties());
public PageResult<SkuDO> getSkuPageList(SkuPageReqVO pageReqVO) {
IPage<SkuDO> 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<SkuDO> getSkuPage(SkuPageReqVO pageReqVO) {
return null;

View File

@@ -520,14 +520,65 @@
</select>
<select id="getProdRecycleBinPageList" resultType="com.tashow.cloud.productapi.api.product.vo.sku.SkuRecycleBinVO" >
select * from tz_prod where deleted = 1
<!-- 结果映射:将数据库查询结果映射到 ProdServiceVO -->
<resultMap id="ProdRecycleBinMap" type="com.tashow.cloud.productapi.api.product.vo.prod.ProdListVO"> <!-- 确保这是 ProdServiceVO 的正确包名 -->
<!-- 商品基本信息映射 -->
<id property="prodId" column="prod_id"/>
<result property="prodName" column="prod_name"/>
<result property="categoryName" column="category_name"/>
<result property="shopId" column="shop_id"/>
<result property="shopName" column="shop_name"/>
<collection property="areaNameList" ofType="string">
<result column="sa_area_name"/>
</collection>
<!-- <association property="prodReservationConfig" javaType="com.tashow.cloud.productapi.api.product.dto.ProdReservationConfigDO">
<id property="id" column="rc_record_id"/>
<result property="prodId" column="rc_prod_id"/>
<result property="reservationTimeSlots" column="rc_reservation_time_slots"/>
<result property="advanceHours" column="rc_advance_hours"/>
<result property="reservationDateRange" column="rc_reservation_date_range"/>
<result property="allowChange" column="rc_allow_change"/>
<result property="changeTimeRule" column="rc_change_time_rule"/>
<result property="maxChangeTimes" column="rc_max_change_times"/>
<result property="blacklistedDates" column="rc_blacklisted_dates"/>
<result property="isBlacklisted" column="rc_is_blacklisted"/>
<result property="blackAppointDates" column="rc_black_appoint_dates"/>
<result property="isBlackAppoint" column="rc_is_black_appoint"/>
<result property="blackHappy" column="rc_black_happy"/>
<result property="blackWeekend" column="rc_black_weekend"/>
</association>-->
</resultMap>
<select id="getProdRecycleBinPageList" resultMap="ProdRecycleBinMap" >
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
<if test="properties != null and properties != ''">
and properties like concat('%', #{prodName}, '%')
and tp.properties like concat('%', #{prodName}, '%')
</if>
<if test="deleteTime != null and deleteTime.length == 2">
AND delete_time BETWEEN #{deleteTime[0]} AND #{deleteTime[1]}
AND tp.delete_time BETWEEN #{deleteTime[0]} AND #{deleteTime[1]}
</if>
</select>
<update id="batchRestoreProd">
UPDATE tz_prod
SET deleted = 0
WHERE prod_id IN
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}
</foreach>
</update>
</mapper>

View File

@@ -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
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{ids}
#{id}
</foreach>
</update>
<update id="deleteProdPropValueById">
UPDATE tz_prod_prop_value
SET
is_expire = 1, delete_time = NOW()
WHERE id = #{id}
</update>
<select id="selectRestoreProp" resultType="com.tashow.cloud.productapi.api.product.dto.ProdPropValueDO">
SELECT
ppv.id AS id,
ppv.prop_value
FROM tz_prod_prop pp
JOIN tz_prod_prop_value ppv ON pp.id = ppv.prop_id
WHERE pp.prod_id = #{prodId}
AND pp.rule = 1
AND ppv.is_expire = 1
</select>
</mapper>

View File

@@ -26,14 +26,14 @@
and sku_id = #{skuId}
</if>
<if test="properties != null and properties != ''">
and properties like concat('%', #{propertiesName}, '%')
and properties like concat('%', #{properties}, '%')
</if>
</select>
<select id="getSkuListByName" resultType="com.tashow.cloud.productapi.api.product.dto.SkuDO" >
select sku_id, properties, delete_time,deleted from tz_sku
<if test="properties != null and properties != ''">
select sku_id, properties, delete_time,deleted from tz_sku where deleted = 0
<if test="propertiesName != null and propertiesName != ''">
and properties like concat('%', #{propertiesName}, '%')
</if>
</select>
@@ -55,5 +55,22 @@
and is_shelf =0
</select>
<update id="deleteBySkuId">
UPDATE tz_sku
SET
deleted = 1,
delete_time = now()
WHERE sku_id = #{skuId}
</update>
<update id="batchSkuDeleted">
UPDATE tz_sku
SET deleted = 1,
delete_time = now()
WHERE sku_id IN
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}
</foreach>
</update>
</mapper>