回收站类目价格功能开发v2

wxpay
LI-CCONG\李聪聪 8 months ago
parent 6c41b4f00c
commit 2a673472c1

@ -8,7 +8,7 @@ import cc.yunxi.common.utils.BeanUtils;
import cc.yunxi.domain.dto.LocationDTO;
import cc.yunxi.domain.po.RecycleStation;
import cc.yunxi.domain.query.RecycleStationQuery;
import cc.yunxi.domain.vo.recyclestation.ProductRespVO;
import cc.yunxi.domain.vo.priceproduct.ProductRespVO;
import cc.yunxi.domain.vo.recyclestation.RecycleStationRespVO;
import cc.yunxi.service.IRecycleStationService;
import cn.hutool.core.util.ObjectUtil;

@ -21,6 +21,9 @@ public class RecycleStationQuery extends PageQuery<RecycleStation> {
private String stationName;
@ApiModelProperty(value = "废品类目", required = false, example = "SPHS2024030500001")
private String productCode;
@ApiModelProperty(value = "散户当前位置", required = true)
private LocationDTO location;

@ -1,4 +1,4 @@
package cc.yunxi.domain.vo.recyclestation;
package cc.yunxi.domain.vo.priceproduct;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
@ -26,42 +26,32 @@ import java.util.Date;
public class ProductRespVO {
@ApiModelProperty("价格id")
@TableField("price_id")
private String priceId;
@ApiModelProperty("废品id")
@TableField("product_id")
private String productId;
@ApiModelProperty("回收价")
@TableField("recovery_price")
private BigDecimal recoveryPrice;
@ApiModelProperty("赠送积分")
@TableField("reward_points")
private String rewardPoints;
@ApiModelProperty("废品编码")
@TableField("code")
private String code;
@ApiModelProperty("废品名称")
@TableField("name")
private String name;
@ApiModelProperty("废品规格")
@TableField("spec")
private String spec;
@ApiModelProperty("废品单位")
@TableField("unit")
private String unit;
@ApiModelProperty("备注")
@TableField("remak")
private String remark;
@ApiModelProperty("废品定价时间")
@TableField("f_creator_time")
private LocalDateTime fCreatorTime;
}

@ -1,8 +1,12 @@
package cc.yunxi.mapper;
import cc.yunxi.domain.po.Price;
import cc.yunxi.domain.po.Product;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* <p>
@ -15,4 +19,11 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ProductMapper extends BaseMapper<Product> {
/**
* code id
* @param productCode
* @return Price
*/
String getLatestPriceByProductCode(@Param("productCode") String productCode);
}

@ -1,8 +1,15 @@
package cc.yunxi.mapper;
import cc.yunxi.domain.po.Price;
import cc.yunxi.domain.po.RecycleStation;
import cc.yunxi.domain.po.RecycleStationPrice;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* <p>
@ -15,4 +22,13 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface RecycleStationPriceMapper extends BaseMapper<RecycleStationPrice> {
/**
* id id
* @param stationId
* @return Price
*/
String getLatestPriceByStationId(
@Param("stationId") String stationId,
@Param(Constants.WRAPPER) Wrapper<Price> wrapper);
}

@ -1,9 +1,8 @@
package cc.yunxi.service;
import cc.yunxi.domain.po.RecycleOrder;
import cc.yunxi.domain.po.RecycleStation;
import cc.yunxi.domain.query.RecycleStationQuery;
import cc.yunxi.domain.vo.recyclestation.ProductRespVO;
import cc.yunxi.domain.vo.priceproduct.ProductRespVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

@ -4,18 +4,15 @@ import cc.yunxi.common.domain.LambdaQueryWrapperX;
import cc.yunxi.common.exception.BizIllegalException;
import cc.yunxi.common.utils.BeanUtils;
import cc.yunxi.domain.po.*;
import cc.yunxi.domain.query.RecycleOrderQuery;
import cc.yunxi.domain.query.RecycleStationQuery;
import cc.yunxi.domain.vo.recyclestation.ProductRespVO;
import cc.yunxi.domain.vo.priceproduct.ProductRespVO;
import cc.yunxi.enums.GlobalStatusEnum;
import cc.yunxi.mapper.*;
import cc.yunxi.service.IRecycleStationService;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -27,7 +24,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* <p>
@ -43,12 +39,9 @@ public class RecycleStationServiceImpl extends ServiceImpl<RecycleStationMapper,
@Resource
private RecycleStationMapper recycleStationMapper;
@Resource
private RecycleStationPriceMapper recycleStationPriceMapper;
@Resource
private PriceMapper priceMapper;
@Resource
private PriceProductMapper priceProductMapper;
@Resource
private ProductMapper productMapper;
@ -57,6 +50,23 @@ public class RecycleStationServiceImpl extends ServiceImpl<RecycleStationMapper,
@Override
public Page<RecycleStation> queryStationByPage(RecycleStationQuery recycleStationQuery) {
LambdaQueryWrapperX<RecycleStation> wrapperX = new LambdaQueryWrapperX<>();
// 根据废品类目过滤站点
String productCode = recycleStationQuery.getProductCode();
if (StrUtil.isNotEmpty(productCode)) {
String priceId = productMapper.getLatestPriceByProductCode(productCode);
if (ObjectUtil.isEmpty(priceId)) {
return new Page<>();
} else {
List<RecycleStationPrice> stationPriceList = new LambdaQueryChainWrapper<>(recycleStationPriceMapper)
.eq(RecycleStationPrice::getPriceId, priceId).select(RecycleStationPrice::getRecycleStationId).list();
List<String> stationIds = new ArrayList<>();
for (RecycleStationPrice recycleStationPrice : stationPriceList) {
String recycleStationId = recycleStationPrice.getRecycleStationId();
stationIds.add(recycleStationId);
}
wrapperX.inIfPresent(RecycleStation::getId, stationIds);
}
}
wrapperX.eqIfPresent(RecycleStation::getStationName, recycleStationQuery.getStationName());
Page<RecycleStation> pageDO = recycleStationQuery.addOrderItem(RecycleStation::getCreatorTime, false).buildPage();
return recycleStationMapper.queryStationByPage(recycleStationQuery.getLocation(), pageDO, wrapperX);
@ -78,18 +88,14 @@ public class RecycleStationServiceImpl extends ServiceImpl<RecycleStationMapper,
@Override
public List<ProductRespVO> getStationProduct(String stationId) {
RecycleStationPrice recycleStationPrice = new LambdaQueryChainWrapper<>(recycleStationPriceMapper)
.eq(RecycleStationPrice::getRecycleStationId, stationId).one();
if (ObjectUtil.isEmpty(recycleStationPrice)) {
throw new BizIllegalException("回收站点价目信息未配置");
}
Price price = new LambdaQueryChainWrapper<>(priceMapper).eq(Price::getId, recycleStationPrice.getPriceId()).one();
if (ObjectUtil.isEmpty(price) || GlobalStatusEnum.INVALID.equals(price.getStatus())) {
throw new BizIllegalException("价目配置不存在或被禁用");
QueryWrapper<Price> wrapper = new QueryWrapper<Price>().eq("a.status", GlobalStatusEnum.VALID);
String priceId = recycleStationPriceMapper.getLatestPriceByStationId(stationId,wrapper);
if (ObjectUtil.isEmpty(priceId)) {
throw new BizIllegalException("回收站点未配置有效价目信息");
}
List<ProductRespVO> productRespVOList = new ArrayList<>(20);
List<PriceProduct> priceProductList = new LambdaQueryChainWrapper<>(priceProductMapper)
.eq(PriceProduct::getPriceId, price.getId()).list();
.eq(PriceProduct::getPriceId, priceId).list();
if (CollectionUtil.isNotEmpty(priceProductList)) {
// 获取废品价格信息
Map<String, PriceProduct> priceProductMap = priceProductList.stream()

@ -1,5 +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="cc.yunxi.mapper.PriceRecycleMapper">
</mapper>

@ -2,4 +2,19 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cc.yunxi.mapper.ProductMapper">
<!-- 根据类目code查询最新一条的有效的价目 -->
<select id="getLatestPriceByProductCode" resultType="String">
SELECT
c.id
FROM
nx_product a
INNER JOIN nx_price_product b ON a.id = b.product_id
INNER JOIN nx_price c ON b.price_id = c.id
AND c.`status` = 1
WHERE
a.`code` = #{productCode}
ORDER BY
c.f_creator_time ASC;
</select>
</mapper>

@ -0,0 +1,19 @@
<?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="cc.yunxi.mapper.RecycleStationPriceMapper">
<!-- 根据回收站id 查询最新一条的有效的价目 -->
<select id="getLatestPriceByStationId" resultType="String">
SELECT
a.id
FROM
nx_price a
LEFT JOIN nx_price_recycle b ON a.id = b.price_id
WHERE
b.recycle_id = #{stationId}
and ${ew.sqlSegment}
ORDER BY
a.f_creator_time DESC
</select>
</mapper>
Loading…
Cancel
Save