refactor(pc): 重构价格配置相关代码

- 移除了 PriceConfigController 中的冗余方法- 删除了 VideoController 中的 @Deprecated 注解
- 移除了 PriceConfigEntity 中的 @TableName 注解
- 重构了 PriceRepository 中的 getPriceByScenicTypeGoods 方法
- 删除了 PriceConfigServiceImpl 和 PriceConfigService 接口- 移除了 PriceConfigMapper接口和对应的 XML 文件
This commit is contained in:
2025-09-07 14:31:35 +08:00
parent 90dc7fea70
commit c4acdc576a
8 changed files with 4 additions and 281 deletions

View File

@@ -1,13 +1,7 @@
package com.ycwl.basic.controller.pc;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.model.pc.price.entity.PriceConfigEntity;
import com.ycwl.basic.model.pc.price.req.PriceConfigListReq;
import com.ycwl.basic.biz.PriceBiz;
import com.ycwl.basic.model.pc.price.resp.GoodsListRespVO;
import com.ycwl.basic.model.pc.price.resp.PriceConfigRespVO;
import com.ycwl.basic.repository.PriceRepository;
import com.ycwl.basic.service.pc.PriceConfigService;
import com.ycwl.basic.utils.ApiResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -19,61 +13,11 @@ import java.util.List;
public class PriceConfigController {
@Autowired
private PriceConfigService priceConfigService;
@Autowired
private PriceRepository priceRepository;
private PriceBiz priceBiz;
@GetMapping("/goodsList")
public ApiResponse<List<GoodsListRespVO>> goodsList(@RequestParam Long scenicId) {
return ApiResponse.success(priceConfigService.listGoodsByScenic(scenicId));
return ApiResponse.success(priceBiz.listGoodsByScenic(scenicId));
}
@PostMapping("/add")
public ApiResponse<PriceConfigEntity> addPriceConfig(@RequestBody PriceConfigEntity priceConfig) {
priceConfig.setId(null);
priceConfigService.save(priceConfig);
return ApiResponse.success(priceConfig);
}
@PostMapping("/update")
public ApiResponse<PriceConfigEntity> updatePriceConfig(@RequestBody PriceConfigEntity priceConfig) {
priceRepository.clearPriceCache(priceConfig.getId());
priceConfigService.updateById(priceConfig);
priceRepository.clearPriceCache(priceConfig.getId());
return ApiResponse.success(priceConfig);
}
@DeleteMapping("/delete/{id}")
public ApiResponse<Boolean> deletePriceConfig(@PathVariable Integer id) {
priceRepository.clearPriceCache(id);
priceConfigService.removeById(id);
priceRepository.clearPriceCache(id);
return ApiResponse.success(true);
}
@PostMapping("/{id}/status")
public ApiResponse<Boolean> updateStatus(@PathVariable Integer id) {
priceRepository.clearPriceCache(id);
priceConfigService.updateStatus(id);
priceRepository.clearPriceCache(id);
return ApiResponse.success(true);
}
@GetMapping("/{id}")
public ApiResponse<PriceConfigRespVO> getPriceConfigById(@PathVariable Integer id) {
PriceConfigRespVO config = priceConfigService.findById(id);
priceConfigService.fillGoodsName(config);
return ApiResponse.success(config);
}
@GetMapping("/list")
public ApiResponse<PageInfo<PriceConfigRespVO>> list(@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "10") int pageSize,
@ModelAttribute PriceConfigListReq req) {
PageHelper.startPage(pageNum, pageSize);
List<PriceConfigRespVO> result = priceConfigService.listByCondition(req);
priceConfigService.fillGoodsName(result);
PageInfo<PriceConfigRespVO> pageInfo = new PageInfo<>(result);
return ApiResponse.success(pageInfo);
}
}

View File

@@ -18,7 +18,6 @@ import java.util.List;
@RestController
@RequestMapping("/api/video/v1")
@Deprecated
// 视频成片管理
public class VideoController {

View File

@@ -1,22 +0,0 @@
package com.ycwl.basic.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ycwl.basic.model.pc.price.entity.PriceConfigEntity;
import com.ycwl.basic.model.pc.price.req.PriceConfigListReq;
import com.ycwl.basic.model.pc.price.resp.PriceConfigRespVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface PriceConfigMapper extends BaseMapper<PriceConfigEntity> {
PriceConfigRespVO getById(@Param("id") Integer id);
List<PriceConfigRespVO> listByCondition(@Param("req") PriceConfigListReq req);
PriceConfigEntity getPriceByScenicTypeGoods(Long scenicId, Integer type, String goodsId);
int updateStatus(Integer id);
}

View File

@@ -1,17 +1,12 @@
package com.ycwl.basic.model.pc.price.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
@TableName("price_config")
public class PriceConfigEntity {
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 景区ID

View File

@@ -3,23 +3,17 @@ package com.ycwl.basic.repository;
import com.ycwl.basic.pricing.entity.PriceOnePriceConfig;
import com.ycwl.basic.pricing.service.IOnePricePurchaseService;
import com.ycwl.basic.utils.JacksonUtil;
import com.ycwl.basic.mapper.PriceConfigMapper;
import com.ycwl.basic.model.pc.price.entity.PriceConfigEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@Component
public class PriceRepository {
@Autowired
private PriceConfigMapper mapper;
@Autowired
private RedisTemplate<String, String> redisTemplate;
public static final String PRICE_SCENIC_TYPE_GOODS_CACHE = "price:s%s:t%s:g%s";
public static final String PRICE_ID_CACHE = "price:%s";
@Autowired
private IOnePricePurchaseService onePricePurchaseService;
@@ -39,19 +33,7 @@ public class PriceRepository {
entity.setGoodsIds(goodsId);
return entity;
}
String cacheKey = String.format(PRICE_SCENIC_TYPE_GOODS_CACHE, scenicId, type, goodsId);
PriceConfigEntity priceConfigEntity = null;
if (redisTemplate.hasKey(cacheKey)) {
priceConfigEntity = JacksonUtil.parseObject(redisTemplate.opsForValue().get(cacheKey), PriceConfigEntity.class);
}
if (priceConfigEntity == null) {
priceConfigEntity = mapper.getPriceByScenicTypeGoods(scenicId, type, goodsId);
if (priceConfigEntity != null) {
redisTemplate.opsForValue().set(cacheKey, JacksonUtil.toJSONString(priceConfigEntity), 12, TimeUnit.HOURS);
redisTemplate.opsForValue().set(String.format(PRICE_ID_CACHE, priceConfigEntity.getId()), JacksonUtil.toJSONString(priceConfigEntity), 12, TimeUnit.HOURS);
}
}
return priceConfigEntity;
return null;
}
public PriceConfigEntity getPriceConfig(Integer id) {

View File

@@ -1,24 +0,0 @@
package com.ycwl.basic.service.pc;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ycwl.basic.model.pc.price.entity.PriceConfigEntity;
import com.ycwl.basic.model.pc.price.req.PriceConfigListReq;
import com.ycwl.basic.model.pc.price.resp.GoodsListRespVO;
import com.ycwl.basic.model.pc.price.resp.PriceConfigRespVO;
import java.util.List;
public interface PriceConfigService extends IService<PriceConfigEntity> {
List<PriceConfigRespVO> listByCondition(PriceConfigListReq req);
PriceConfigRespVO findById(Integer id);
List<GoodsListRespVO> listGoodsByScenic(Long scenicId);
void fillGoodsName(List<PriceConfigRespVO> result);
void fillGoodsName(PriceConfigRespVO config);
void updateStatus(Integer id);
}

View File

@@ -1,85 +0,0 @@
package com.ycwl.basic.service.pc.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycwl.basic.biz.PriceBiz;
import com.ycwl.basic.mapper.PriceConfigMapper;
import com.ycwl.basic.model.pc.price.entity.PriceConfigEntity;
import com.ycwl.basic.model.pc.price.req.PriceConfigListReq;
import com.ycwl.basic.model.pc.price.resp.GoodsListRespVO;
import com.ycwl.basic.model.pc.price.resp.PriceConfigRespVO;
import com.ycwl.basic.model.pc.template.resp.TemplateRespVO;
import com.ycwl.basic.repository.TemplateRepository;
import com.ycwl.basic.service.pc.PriceConfigService;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class PriceConfigServiceImpl extends ServiceImpl<PriceConfigMapper, PriceConfigEntity> implements PriceConfigService {
@Autowired
private TemplateRepository templateRepository;
@Autowired
private PriceBiz priceBiz;
@Override
public List<PriceConfigRespVO> listByCondition(PriceConfigListReq req) {
return baseMapper.listByCondition(req);
}
@Override
public PriceConfigRespVO findById(Integer id) {
return baseMapper.getById(id);
}
@Override
public List<GoodsListRespVO> listGoodsByScenic(Long scenicId) {
return priceBiz.listGoodsByScenic(scenicId);
}
@Override
public void fillGoodsName(List<PriceConfigRespVO> result) {
for (PriceConfigRespVO item : result) {
fillGoodsName(item);
}
}
@Override
public void fillGoodsName(PriceConfigRespVO item) {
if (Integer.valueOf(-1).equals(item.getType())) {
item.setGoodsNames("景区内所有售卖商品");
} else if (Integer.valueOf(3).equals(item.getType())) {
item.setGoodsNames("打印照片");
} else if (StringUtils.isNotBlank(item.getGoodsIds())) {
List<String> goodsNames = new ArrayList<>();
for (String s : item.getGoodsIds().split(",")) {
if (Strings.CS.equals(s, "1")) {
goodsNames.add("录像集");
} else if (Strings.CS.equals(s, "2")) {
goodsNames.add("照片集");
} else {
if (StringUtils.isNumeric(s)) {
TemplateRespVO template = templateRepository.getTemplate(Long.valueOf(s));
if (template != null) {
goodsNames.add(template.getName());
} else {
goodsNames.add("?未知商品【"+s+"】?");
}
} else {
goodsNames.add("!未知商品【"+s+"】!");
}
}
}
item.setGoodsNames(StringUtils.join(goodsNames, ","));
}
}
@Override
public void updateStatus(Integer id) {
baseMapper.updateStatus(id);
}
}

View File

@@ -1,66 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ycwl.basic.mapper.PriceConfigMapper">
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
insert into price_config (scenic_id, type, goods_ids, price, slash_price, create_time, update_time)
values (#{scenicId}, #{type}, #{goodsIds}, #{price}, #{slashPrice}, now(), now())
</insert>
<update id="update">
update price_config
<set>
<if test="scenicId != null">scenic_id = #{scenicId},</if>
<if test="type != null">type = #{type},</if>
<if test="goodsIds != null">goods_ids = #{goodsIds},</if>
<if test="price != null">price = #{price},</if>
<if test="slashPrice != null">slash_price = #{slashPrice},</if>
update_time = now()
</set>
where id = #{id}
</update>
<update id="updateStatus">
update price_config
set `status` = IF(`status` = 0, 1, 0),
update_time = now()
where id = #{id}
</update>
<delete id="deleteById">
delete from price_config where id = #{id}
</delete>
<select id="getById" resultType="com.ycwl.basic.model.pc.price.resp.PriceConfigRespVO">
select p.* from price_config p
where p.id = #{id}
</select>
<select id="listByCondition" resultType="com.ycwl.basic.model.pc.price.resp.PriceConfigRespVO">
select p.* from price_config p
<where>
<if test="req.scenicId != null">
and p.scenic_id = #{req.scenicId}
</if>
<if test="req.type != null">
and p.type = #{req.type}
</if>
<if test="req.goodsId != null">
and p.goods_ids like concat('%', #{req.goodsId}, '%')
</if>
<if test="req.status != null">
and p.status = #{req.status}
</if>
</where>
</select>
<select id="getPriceByScenicTypeGoods" resultType="com.ycwl.basic.model.pc.price.entity.PriceConfigEntity">
select * from price_config
where scenic_id = #{scenicId}
and type = #{type} and status = 1
<if test="goodsId != null and goodsId != ''">
and goods_ids like concat('%', #{goodsId}, '%')
</if>
</select>
</mapper>