master:库存等模块调优;

pull/1121/head
liujiang 2025-05-17 12:26:34 +08:00
parent e826f1ef06
commit 9f69716471
15 changed files with 132 additions and 155 deletions

View File

@ -6,9 +6,11 @@ import com.ruoyi.common.core.controller.XktBaseController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.Page;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.web.controller.xkt.vo.storeProdStock.StoreProdStockClearZeroVO;
import com.ruoyi.web.controller.xkt.vo.storeProdStock.StoreProdStockPageVO;
import com.ruoyi.web.controller.xkt.vo.storeProdStock.StoreProdStockResVO;
import com.ruoyi.web.controller.xkt.vo.storeProdStock.StoreProdStockVO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockClearZeroDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageResDTO;
@ -63,9 +65,9 @@ public class StoreProductStockController extends XktBaseController {
// @PreAuthorize("@ss.hasPermi('system:stock:edit')")
@ApiOperation(value = "档口商品库存清零", httpMethod = "PUT", response = R.class)
@Log(title = "档口商品库存清零", businessType = BusinessType.UPDATE)
@PutMapping("/clear-zero/{storeId}/{storeProdStockId}")
public R<Integer> clearStockToZero(@PathVariable("storeId") Long storeId, @PathVariable("storeProdStockId") Long storeProdStockId) {
return R.ok(storeProdStockService.clearStockToZero(storeId, storeProdStockId));
@PutMapping("/clear-zero")
public R<Integer> clearStockToZero(@Validated @RequestBody StoreProdStockClearZeroVO clearZeroVO) {
return R.ok(storeProdStockService.clearStockToZero(BeanUtil.toBean(clearZeroVO, StoreProdStockClearZeroDTO.class)));
}
/**
@ -75,7 +77,7 @@ public class StoreProductStockController extends XktBaseController {
@ApiOperation(value = "直接调整档口商品库存值", httpMethod = "PUT", response = R.class)
@Log(title = "直接调整档口商品库存值", businessType = BusinessType.UPDATE)
@PutMapping("/update-stock/{storeId}")
public R<Integer> updateStock(@PathVariable("storeId") Long storeId, @RequestBody StoreProdStockVO prodStockVO) {
public R<Integer> updateStock(@PathVariable("storeId") Long storeId,@Validated @RequestBody StoreProdStockVO prodStockVO) {
return R.ok(storeProdStockService.updateStock(storeId, Collections.singletonList(BeanUtil.toBean(prodStockVO, StoreProdStockDTO.class)), 0));
}

View File

@ -0,0 +1,26 @@
package com.ruoyi.web.controller.xkt.vo.storeProdStock;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口库存清零")
@Data
public class StoreProdStockClearZeroVO {
@ApiModelProperty(value = "档口ID", required = true)
@NotNull(message = "档口ID不能为空")
private Long storeId;
@NotNull(message = "商品库存ID列表不能为空")
@ApiModelProperty(value = "商品货号")
private List<Long> storeProdStockIdList;
}

View File

@ -23,6 +23,10 @@ public class StoreProdStockResVO {
private String mainPicUrl;
@ApiModelProperty(value = "商品货号")
private String prodArtNum;
@ApiModelProperty(value = "档口商品颜色ID")
private Long storeProdColorId;
@ApiModelProperty(value = "档口颜色ID")
private Long storeColorId;
@ApiModelProperty(value = "颜色名称")
private String colorName;
@ApiModelProperty(value = "分类类目")

View File

@ -5,6 +5,9 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* @author liujiang
* @version v1.0
@ -15,8 +18,20 @@ import lombok.Data;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class StoreProdStockVO {
@NotNull(message = "档口商品库存ID不能为空")
@ApiModelProperty(value = "档口商品库存ID")
private Long storeProdStockId;
@NotNull(message = "档口商品ID不能为空")
@ApiModelProperty(value = "档口商品ID")
private Long storeProdId;
@NotBlank(message = "商品货号不能为空")
@ApiModelProperty(value = "商品货号")
private String prodArtNum;
@NotNull(message = "档口商品颜色ID不能为空")
@ApiModelProperty(value = "档口商品颜色ID")
private Long storeProdColorId;
@ApiModelProperty(value = "档口颜色ID")
private Long storeColorId;
@ApiModelProperty(value = "颜色名称")
private String colorName;
@ApiModelProperty(value = "尺码30")

View File

@ -39,14 +39,11 @@ public enum AdType {
// 首页两侧固定挂耳
PC_HOME_FIXED_EAR(12, "首页两侧固定挂耳", "/url"),
// 首页搜索框下名称
PC_HOME_SEARCH_DOWN_NAME(13, "首页搜索框下名称", "/url"),
// 首页搜索框商品
PC_HOME_SEARCH_PRODUCT(14, "首页搜索框商品", "/url"),
// 首页搜索框档口
PC_HOME_SEARCH_STORE(15, "首页搜索框档口", "/url"),
// 首页以图搜款商品
PC_HOME_PIC_SEARCH_PRODUCT(16, "首页以图搜款商品", "/url"),
PC_HOME_SEARCH_DOWN_NAME(13, "首页搜索框下档口名称", "/url"),
// 首页搜索框中推荐商品
PC_HOME_SEARCH_PRODUCT(14, "首页搜索框中推荐商品", "/url"),
// 首页以图搜款框商品、以图搜款结果商品、点击以图搜款界面
PC_HOME_PIC_SEARCH_PRODUCT(15, "首页以图搜款商品", "/url"),
// 新品馆顶部横向大图

View File

@ -0,0 +1,24 @@
package com.ruoyi.xkt.dto.storeProductStock;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口库存清零")
@Data
public class StoreProdStockClearZeroDTO {
@NotNull(message = "档口ID不能为空")
private Long storeId;
@ApiModelProperty(value = "商品货号")
private List<Long> storeProdStockIdList;
}

View File

@ -23,6 +23,10 @@ public class StoreProdStockPageResDTO {
private String mainPicUrl;
@ApiModelProperty(value = "商品货号")
private String prodArtNum;
@ApiModelProperty(value = "档口商品颜色ID")
private Long storeProdColorId;
@ApiModelProperty(value = "档口颜色ID")
private Long storeColorId;
@ApiModelProperty(value = "颜色名称")
private String colorName;
@ApiModelProperty(value = "分类类目")

View File

@ -23,6 +23,10 @@ public class StoreProdStockResDTO {
private String mainPicUrl;
@ApiModelProperty(value = "商品货号")
private String prodArtNum;
@ApiModelProperty(value = "档口商品颜色ID")
private Long storeProdColorId;
@ApiModelProperty(value = "档口颜色ID")
private Long storeColorId;
@ApiModelProperty(value = "颜色名称")
private String colorName;
@ApiModelProperty(value = "分类类目")

View File

@ -21,6 +21,8 @@ public enum AdDisplayType {
PRODUCT(2, "商品"),
// 图和商品
PIC_AND_PROD(3, "图和商品"),
// 档口名称
STORE_NAME(4, "档口名称"),
;

View File

@ -44,8 +44,6 @@ public interface IAdvertRoundService {
*/
void initAdvertLockMap();
void test();
/**
* 11:30广 biddingTempStatusbiddingStatus
*

View File

@ -2,10 +2,7 @@ package com.ruoyi.xkt.service;
import com.ruoyi.common.core.page.Page;
import com.ruoyi.xkt.domain.StoreProductStock;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageResDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockResDTO;
import com.ruoyi.xkt.dto.storeProductStock.*;
import java.util.List;
@ -23,47 +20,7 @@ public interface IStoreProductStockService {
* @param storeProdStockId
* @return
*/
public StoreProdStockResDTO selectByStoreProdStockId(Long storeId, Long storeProdStockId);
/**
*
*
* @param storeProductStock
* @return
*/
public List<StoreProductStock> selectStoreProductStockList(StoreProductStock storeProductStock);
/**
*
*
* @param storeProductStock
* @return
*/
public int insertStoreProductStock(StoreProductStock storeProductStock);
/**
*
*
* @param storeProductStock
* @return
*/
public int updateStoreProductStock(StoreProductStock storeProductStock);
/**
*
*
* @param storeProdStockIds
* @return
*/
public int deleteStoreProductStockByStoreProdStockIds(Long[] storeProdStockIds);
/**
*
*
* @param storeProdStockId
* @return
*/
public int deleteStoreProductStockByStoreProdStockId(Long storeProdStockId);
StoreProdStockResDTO selectByStoreProdStockId(Long storeId, Long storeProdStockId);
/**
*
@ -86,11 +43,10 @@ public interface IStoreProductStockService {
/**
*
*
* @param storeId ID
* @param storeProdStockId
* @param clearZeroDTO dto
* @return int
*/
int clearStockToZero(Long storeId, Long storeProdStockId);
int clearStockToZero(StoreProdStockClearZeroDTO clearZeroDTO);
/**
*

View File

@ -380,10 +380,10 @@ public class AdvertRoundServiceImpl implements IAdvertRoundService {
.setSysIntercept(AdSysInterceptType.UN_INTERCEPT.getValue())
.setStoreId(createDTO.getStoreId()).setPayPrice(createDTO.getPayPrice()).setVoucherDate(java.sql.Date.valueOf(LocalDate.now()))
.setBiddingStatus(AdBiddingStatus.BIDDING.getValue()).setBiddingTempStatus(AdBiddingStatus.BIDDING_SUCCESS.getValue())
.setPicSetType(!Objects.equals(minPriceAdvert.getDisplayType(), AdDisplayType.PRODUCT.getValue()) ? AdPicSetType.UN_SET.getValue() : null)
.setPicAuditStatus(!Objects.equals(minPriceAdvert.getDisplayType(), AdDisplayType.PRODUCT.getValue()) ? AdPicAuditStatus.UN_AUDIT.getValue() : null)
.setPicDesignType(!Objects.equals(minPriceAdvert.getDisplayType(), AdDisplayType.PRODUCT.getValue()) ? createDTO.getPicDesignType() : null)
.setPicAuditStatus(!Objects.equals(minPriceAdvert.getDisplayType(), AdDisplayType.PRODUCT.getValue()) ? AdPicAuditStatus.UN_AUDIT.getValue() : null)
.setPicSetType(this.hasPic(minPriceAdvert.getDisplayType()) ? AdPicSetType.UN_SET.getValue() : null)
.setPicAuditStatus(this.hasPic(minPriceAdvert.getDisplayType()) ? AdPicAuditStatus.UN_AUDIT.getValue() : null)
.setPicDesignType(this.hasPic(minPriceAdvert.getDisplayType()) ? createDTO.getPicDesignType() : null)
.setPicAuditStatus(this.hasPic(minPriceAdvert.getDisplayType()) ? AdPicAuditStatus.UN_AUDIT.getValue() : null)
.setProdIdStr(createDTO.getProdIdStr());
this.advertRoundMapper.updateById(minPriceAdvert);
// 扣除推广费
@ -392,6 +392,8 @@ public class AdvertRoundServiceImpl implements IAdvertRoundService {
return 1;
}
/**
* 广
*
@ -829,4 +831,13 @@ public class AdvertRoundServiceImpl implements IAdvertRoundService {
return prefix + middle + suffix;
}
/**
* 广 广
* @param displayType 广
* @return true false
*/
private boolean hasPic(Integer displayType) {
return Objects.equals(displayType, AdDisplayType.PICTURE.getValue()) || Objects.equals(displayType, AdDisplayType.PIC_AND_PROD.getValue());
}
}

View File

@ -67,7 +67,8 @@ public class AdvertServiceImpl implements IAdvertService {
advert.setOnlineStatus(AdOnlineStatus.ONLINE.getValue());
// 推广类型为 推广图 或者 图及商品 则新增系统文件
if (!Objects.equals(createDTO.getDisplayType(), AdDisplayType.PRODUCT.getValue()) && ObjectUtils.isNotEmpty(createDTO.getExample())) {
if ((Objects.equals(createDTO.getDisplayType(), AdDisplayType.PICTURE.getValue()) || Objects.equals(createDTO.getDisplayType(), AdDisplayType.PIC_AND_PROD.getValue()))
&& ObjectUtils.isNotEmpty(createDTO.getExample())) {
// 将文件插入到SysFile表中
SysFile file = BeanUtil.toBean(createDTO.getExample(), SysFile.class);
this.fileMapper.insert(file);

View File

@ -8,15 +8,11 @@ import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.page.Page;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.xkt.domain.StoreProductFile;
import com.ruoyi.xkt.domain.StoreProductStock;
import com.ruoyi.xkt.domain.SysFile;
import com.ruoyi.xkt.dto.storeProductFile.StoreProdMainPicDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageResDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockResDTO;
import com.ruoyi.xkt.dto.storeProductStock.*;
import com.ruoyi.xkt.enums.FileType;
import com.ruoyi.xkt.mapper.StoreProductFileMapper;
import com.ruoyi.xkt.mapper.StoreProductStockMapper;
@ -138,19 +134,19 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService {
/**
*
*
* @param storeId ID
* @param storeProdStockId
* @param clearZeroDTO
* @return int
*/
@Override
@Transactional
public int clearStockToZero(Long storeId, Long storeProdStockId) {
StoreProductStock stock = Optional.ofNullable(this.storeProdStockMapper.selectOne(new LambdaQueryWrapper<StoreProductStock>()
.eq(StoreProductStock::getId, storeProdStockId).eq(StoreProductStock::getStoreId, storeId).eq(StoreProductStock::getDelFlag, Constants.UNDELETED)))
public int clearStockToZero(StoreProdStockClearZeroDTO clearZeroDTO) {
List<StoreProductStock> stockList = Optional.ofNullable(this.storeProdStockMapper.selectList(new LambdaQueryWrapper<StoreProductStock>()
.eq(StoreProductStock::getStoreId, clearZeroDTO.getStoreId()).eq(StoreProductStock::getDelFlag, Constants.UNDELETED)
.in(StoreProductStock::getId, clearZeroDTO.getStoreProdStockIdList())))
.orElseThrow(() -> new ServiceException("档口商品库存不存在!", HttpStatus.ERROR));
stock.setSize30(0).setSize31(0).setSize32(0).setSize33(0).setSize34(0).setSize35(0).setSize36(0).setSize37(0)
.setSize38(0).setSize39(0).setSize40(0).setSize41(0).setSize42(0).setSize43(0);
return this.storeProdStockMapper.updateById(stock);
stockList.forEach(stock -> stock.setSize30(0).setSize31(0).setSize32(0).setSize33(0).setSize34(0).setSize35(0).setSize36(0).setSize37(0)
.setSize38(0).setSize39(0).setSize40(0).setSize41(0).setSize42(0).setSize43(0));
return this.storeProdStockMapper.updateById(stockList).size();
}
@ -256,69 +252,6 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService {
.setStoreProdStockId(stock.getId()).setMainPicUrl(file.getFileUrl());
}
/**
*
*
* @param storeProductStock
* @return
*/
@Override
@Transactional(readOnly = true)
public List<StoreProductStock> selectStoreProductStockList(StoreProductStock storeProductStock) {
return storeProdStockMapper.selectStoreProductStockList(storeProductStock);
}
/**
*
*
* @param storeProductStock
* @return
*/
@Override
@Transactional
public int insertStoreProductStock(StoreProductStock storeProductStock) {
storeProductStock.setCreateTime(DateUtils.getNowDate());
return storeProdStockMapper.insertStoreProductStock(storeProductStock);
}
/**
*
*
* @param storeProductStock
* @return
*/
@Override
@Transactional
public int updateStoreProductStock(StoreProductStock storeProductStock) {
storeProductStock.setUpdateTime(DateUtils.getNowDate());
return storeProdStockMapper.updateStoreProductStock(storeProductStock);
}
/**
*
*
* @param storeProdStockIds
* @return
*/
@Override
@Transactional
public int deleteStoreProductStockByStoreProdStockIds(Long[] storeProdStockIds) {
return storeProdStockMapper.deleteStoreProductStockByStoreProdStockIds(storeProdStockIds);
}
/**
*
*
* @param storeProdStockId
* @return
*/
@Override
@Transactional
public int deleteStoreProductStockByStoreProdStockId(Long storeProdStockId) {
return storeProdStockMapper.deleteStoreProductStockByStoreProdStockId(storeProdStockId);
}
/**
* diff
*

View File

@ -156,21 +156,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectStockPage" parameterType="com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageDTO" resultType="com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageResDTO">
SELECT
id AS stockProdStockId, store_prod_id, prod_art_num, color_name,
size_30 AS size30, size_31 AS size31, size_32 AS size32, size_33 AS size33, size_34 AS size34, size_35 AS size35, size_36 AS size36, size_37 AS size37,
size_38 AS size38, size_39 AS size39, size_40 AS size40, size_41 AS size41, size_42 AS size42, size_43 AS size43,
(IFNULL(size_30, 0) + IFNULL(size_31, 0) + IFNULL(size_32, 0) + IFNULL(size_33, 0) +
IFNULL(size_34, 0) + IFNULL(size_35, 0) + IFNULL(size_36, 0) + IFNULL(size_37, 0) +
IFNULL(size_38, 0) + IFNULL(size_39, 0) + IFNULL(size_40, 0) + IFNULL(size_41, 0) +
IFNULL(size_42, 0) + IFNULL(size_43, 0)) AS totalStock
sps.id AS storeProdStockId, sps.store_prod_id, sps.prod_art_num, sps.store_color_id, sps.store_prod_color_id, sps.color_name, spc.name AS prodCateName,
sps.size_30 AS size30, sps.size_31 AS size31, sps.size_32 AS size32, sps.size_33 AS size33, sps.size_34 AS size34, sps.size_35 AS size35, sps.size_36 AS size36, sps.size_37 AS size37,
sps.size_38 AS size38, sps.size_39 AS size39, sps.size_40 AS size40, sps.size_41 AS size41, sps.size_42 AS size42, sps.size_43 AS size43,
(IFNULL(sps.size_30, 0) + IFNULL(sps.size_31, 0) + IFNULL(sps.size_32, 0) + IFNULL(sps.size_33, 0) +
IFNULL(sps.size_34, 0) + IFNULL(sps.size_35, 0) + IFNULL(sps.size_36, 0) + IFNULL(sps.size_37, 0) +
IFNULL(sps.size_38, 0) + IFNULL(sps.size_39, 0) + IFNULL(sps.size_40, 0) + IFNULL(sps.size_41, 0) +
IFNULL(sps.size_42, 0) + IFNULL(sps.size_43, 0)) AS totalStock
FROM
store_product_stock
store_product_stock sps left join store_product sp on sps.store_prod_id = sp.id left join sys_product_category spc on sp.prod_cate_id = spc.id
WHERE
del_flag = 0
AND store_id = #{storeId}
<if test="prodArtNum != null and prodArtNum != ''"> and prod_art_num like concat('%', #{prodArtNum}, '%')</if>
sps.del_flag = 0
AND sps.store_id = #{storeId}
<if test="prodArtNum != null and prodArtNum != ''"> and sps.prod_art_num like concat('%', #{prodArtNum}, '%')</if>
ORDER BY
create_time DESC
sps.create_time DESC
</select>
<select id="selectTop10List" resultType="com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO">