Browse Source

在SPU做统计

v1.0
Yen 2 years ago
parent
commit
0e89e52bc8
  1. 10
      src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java
  2. 2
      src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java
  3. 20
      src/main/java/com/qs/serve/modules/goods/entity/dto/GoodSpuSkuNum.java
  4. 6
      src/main/java/com/qs/serve/modules/goods/mapper/GoodsSpuMapper.java
  5. 10
      src/main/java/com/qs/serve/modules/goods/service/GoodsSpuService.java
  6. 56
      src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java
  7. 27
      src/main/java/com/qs/serve/task/GoodsTask.java
  8. 22
      src/main/resources/mapper/goods/GoodsSpuMapper.xml

10
src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java

@ -73,6 +73,16 @@ public class GoodsSpuController {
return R.ok(spuList); return R.ok(spuList);
} }
/**
* 翻页搜索
* @return
*/
@GetMapping("/initSkuNum")
public R<List<GoodsSpu>> initSkuNum(){
goodsSpuService.initSkuNum();
return R.ok();
}
/** /**
* 翻页搜索(组件接口) * 翻页搜索(组件接口)
* @param param * @param param

2
src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java

@ -120,6 +120,8 @@ public class GoodsSpu implements Serializable {
/** 商品销售类型:0-普通商品;1-赠品 */ /** 商品销售类型:0-普通商品;1-赠品 */
private Integer goodsSaleType; private Integer goodsSaleType;
private String skuNumVal;
/** 展示的价格 */ /** 展示的价格 */
@TableField(exist = false) @TableField(exist = false)
private Double showPrice = 0D; private Double showPrice = 0D;

20
src/main/java/com/qs/serve/modules/goods/entity/dto/GoodSpuSkuNum.java

@ -0,0 +1,20 @@
package com.qs.serve.modules.goods.entity.dto;
import lombok.Data;
/**
* @author YenHex
* @since 2023/12/20
*/
@Data
public class GoodSpuSkuNum {
private Long spuId;
private Long countOrder;
private Long countSpec;
private Long countSku;
}

6
src/main/java/com/qs/serve/modules/goods/mapper/GoodsSpuMapper.java

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.common.model.dto.RowParam; import com.qs.serve.common.model.dto.RowParam;
import com.qs.serve.modules.goods.entity.GoodsSpu; import com.qs.serve.modules.goods.entity.GoodsSpu;
import com.qs.serve.modules.goods.entity.dto.GoodSpuSkuNum;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
@ -24,5 +25,10 @@ public interface GoodsSpuMapper extends BaseMapper<GoodsSpu> {
@InterceptorIgnore(tenantLine = "1") @InterceptorIgnore(tenantLine = "1")
List<GoodsSpu> selectSkuJoinSpuList(@Param("query") GoodsSpu goodsSpu, @Param("pageInfo")RowParam rowParam); List<GoodsSpu> selectSkuJoinSpuList(@Param("query") GoodsSpu goodsSpu, @Param("pageInfo")RowParam rowParam);
@InterceptorIgnore(tenantLine = "1")
List<Long> selectLastChangeSpuId();
GoodSpuSkuNum getSpuSkuNumInfo(@Param("spuId") Long spuId);
} }

10
src/main/java/com/qs/serve/modules/goods/service/GoodsSpuService.java

@ -52,5 +52,15 @@ public interface GoodsSpuService extends IService<GoodsSpu> {
*/ */
List<OmsSpuToSkuKey> getSpuToSkuInfo(String placeName, List<String> spuCodes); List<OmsSpuToSkuKey> getSpuToSkuInfo(String placeName, List<String> spuCodes);
/**
* 最近SKU或者SPU有更新的更新skuNumVal字段
*/
void updateSkuNumByLastChange();
void initSkuNum();
boolean updateSkuNumString(List<Long> spuIds);
String getSkuNumString(Long spuId);
} }

56
src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java

@ -12,6 +12,7 @@ import com.qs.serve.modules.goods.entity.bo.GoodsSpuBatchTasteBo;
import com.qs.serve.modules.goods.entity.bo.GoodsSpuBo; import com.qs.serve.modules.goods.entity.bo.GoodsSpuBo;
import com.qs.serve.modules.goods.entity.bo.GoodsSpuEditBo; import com.qs.serve.modules.goods.entity.bo.GoodsSpuEditBo;
import com.qs.serve.modules.goods.entity.bo.GoodsSpuTasteBo; import com.qs.serve.modules.goods.entity.bo.GoodsSpuTasteBo;
import com.qs.serve.modules.goods.entity.dto.GoodSpuSkuNum;
import com.qs.serve.modules.goods.entity.vo.*; import com.qs.serve.modules.goods.entity.vo.*;
import com.qs.serve.modules.goods.service.*; import com.qs.serve.modules.goods.service.*;
import com.qs.serve.modules.oms.entity.dto.OmsSpuToSkuKey; import com.qs.serve.modules.oms.entity.dto.OmsSpuToSkuKey;
@ -283,6 +284,61 @@ public class GoodsSpuServiceImpl extends ServiceImpl<GoodsSpuMapper,GoodsSpu> im
return list(lqw); return list(lqw);
} }
@Override
public void updateSkuNumByLastChange() {
List<Long> spuIds = baseMapper.selectLastChangeSpuId();
this.updateSkuNumString(spuIds);
}
@Override
public void initSkuNum() {
AuthContextUtils.setTenant("001");
LambdaQueryWrapper<GoodsSpu> lqw = new LambdaQueryWrapper<>();
lqw.select(GoodsSpu::getId);
List<GoodsSpu> goodsSpus = this.baseMapper.selectList(lqw);
List<Long> spuIds = goodsSpus.stream().map(GoodsSpu::getId).collect(Collectors.toList());
updateSkuNumString(spuIds);
}
@Override
public boolean updateSkuNumString(List<Long> spuIds) {
if(spuIds.size()<1){
return false;
}
List<GoodsSpu> updateList = new ArrayList<>();
for (Long spuId : spuIds) {
String skuNum = this.getSkuNumString(spuId);
GoodsSpu spu = new GoodsSpu();
spu.setId(spuId);
spu.setSkuNumVal(skuNum);
updateList.add(spu);
}
this.updateBatchById(updateList);
return true;
}
@Override
public String getSkuNumString(Long spuId) {
/**
* 在SKU这里做一个统计每个SKU显示一个字段1/1/19 表示1个允许下单1个特殊品19个未启用
*/
GoodSpuSkuNum goodSpuSkuNum = baseMapper.getSpuSkuNumInfo(spuId);
if(goodSpuSkuNum==null){
return "0/0/0";
}
if(goodSpuSkuNum.getCountOrder()==null){
goodSpuSkuNum.setCountOrder(0L);
}
if(goodSpuSkuNum.getCountSpec()==null){
goodSpuSkuNum.setCountSpec(0L);
}
if(goodSpuSkuNum.getCountSku()==null){
goodSpuSkuNum.setCountSku(0L);
}
return goodSpuSkuNum.getCountOrder()+"/"+goodSpuSkuNum.getCountSpec()+"/"+goodSpuSkuNum.getCountSku();
}
/** /**
* 根据账套获取spu对应的sku * 根据账套获取spu对应的sku
* @param placeName 账套 * @param placeName 账套

27
src/main/java/com/qs/serve/task/GoodsTask.java

@ -0,0 +1,27 @@
package com.qs.serve.task;
import com.qs.serve.modules.goods.service.GoodsSpuService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* @author YenHex
* @since 2023/12/20
*/
@Slf4j
@Component
@AllArgsConstructor
@ConditionalOnProperty(value = "project.task", havingValue = "true")
public class GoodsTask {
private GoodsSpuService goodsSpuService;
@Scheduled(cron="0 0 1 * * ?")
public void buildTempTable(){
goodsSpuService.initSkuNum();
}
}

22
src/main/resources/mapper/goods/GoodsSpuMapper.xml

@ -64,6 +64,7 @@
goods_spu.`order_flag`, goods_spu.`order_flag`,
goods_spu.`del_flag`, goods_spu.`del_flag`,
goods_spu.`special_sku_id`, goods_spu.`special_sku_id`,
goods_spu.`sku_num_val`,
goods_spu.`belong` goods_spu.`belong`
</sql> </sql>
@ -242,4 +243,25 @@
</where> </where>
</select> </select>
<select id="getSpuSkuNumInfo" resultType="com.qs.serve.modules.goods.entity.dto.GoodSpuSkuNum">
select
tmp1.count_order,
tmp2.count_spec,
tmp3.count_sku
from goods_spu spu
left join ( select count(0) as count_order,sku.spu_id from goods_sku sku where sku.spu_id = #{spuId} and sku.del_flag=0 and sku.order_flag = 1 ) tmp1
on tmp1.spu_id = spu.id
left join ( select count(0) as count_spec,sku.spu_id from goods_sku sku where sku.spu_id = #{spuId} and sku.del_flag=0 and sku.special_flag = 1 ) tmp2
on tmp2.spu_id = spu.id
left join ( select count(0) as count_sku,sku.spu_id from goods_sku sku where sku.spu_id = #{spuId} and sku.del_flag=0 and sku.order_flag = 0 and sku.special_flag = 0) tmp3
on tmp3.spu_id = spu.id
where spu.id = #{spuId}
</select>
<select id="selectLastChangeSpuId" resultType="java.lang.Long">
select goods_sku.spu_id from goods_sku where DATE(goods_sku.update_time) > CURDATE() - INTERVAL 7 DAY
UNION
select goods_spu.id from goods_spu where DATE(goods_spu.update_time) > CURDATE() - INTERVAL 7 DAY
</select>
</mapper> </mapper>

Loading…
Cancel
Save