回收站类目价格功能开发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.dto.LocationDTO;
import cc.yunxi.domain.po.RecycleStation; import cc.yunxi.domain.po.RecycleStation;
import cc.yunxi.domain.query.RecycleStationQuery; 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.domain.vo.recyclestation.RecycleStationRespVO;
import cc.yunxi.service.IRecycleStationService; import cc.yunxi.service.IRecycleStationService;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;

@ -21,6 +21,9 @@ public class RecycleStationQuery extends PageQuery<RecycleStation> {
private String stationName; private String stationName;
@ApiModelProperty(value = "废品类目", required = false, example = "SPHS2024030500001")
private String productCode;
@ApiModelProperty(value = "散户当前位置", required = true) @ApiModelProperty(value = "散户当前位置", required = true)
private LocationDTO location; 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.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
@ -26,42 +26,32 @@ import java.util.Date;
public class ProductRespVO { public class ProductRespVO {
@ApiModelProperty("价格id") @ApiModelProperty("价格id")
@TableField("price_id")
private String priceId; private String priceId;
@ApiModelProperty("废品id") @ApiModelProperty("废品id")
@TableField("product_id")
private String productId; private String productId;
@ApiModelProperty("回收价") @ApiModelProperty("回收价")
@TableField("recovery_price")
private BigDecimal recoveryPrice; private BigDecimal recoveryPrice;
@ApiModelProperty("赠送积分") @ApiModelProperty("赠送积分")
@TableField("reward_points")
private String rewardPoints; private String rewardPoints;
@ApiModelProperty("废品编码") @ApiModelProperty("废品编码")
@TableField("code")
private String code; private String code;
@ApiModelProperty("废品名称") @ApiModelProperty("废品名称")
@TableField("name")
private String name; private String name;
@ApiModelProperty("废品规格") @ApiModelProperty("废品规格")
@TableField("spec")
private String spec; private String spec;
@ApiModelProperty("废品单位") @ApiModelProperty("废品单位")
@TableField("unit")
private String unit; private String unit;
@ApiModelProperty("备注") @ApiModelProperty("备注")
@TableField("remak")
private String remark; private String remark;
@ApiModelProperty("废品定价时间") @ApiModelProperty("废品定价时间")
@TableField("f_creator_time")
private LocalDateTime fCreatorTime; private LocalDateTime fCreatorTime;
} }

@ -1,8 +1,12 @@
package cc.yunxi.mapper; package cc.yunxi.mapper;
import cc.yunxi.domain.po.Price;
import cc.yunxi.domain.po.Product; 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.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/** /**
* <p> * <p>
@ -15,4 +19,11 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface ProductMapper extends BaseMapper<Product> { 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; package cc.yunxi.mapper;
import cc.yunxi.domain.po.Price;
import cc.yunxi.domain.po.RecycleStation;
import cc.yunxi.domain.po.RecycleStationPrice; 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.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/** /**
* <p> * <p>
@ -15,4 +22,13 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface RecycleStationPriceMapper extends BaseMapper<RecycleStationPrice> { 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; package cc.yunxi.service;
import cc.yunxi.domain.po.RecycleOrder;
import cc.yunxi.domain.po.RecycleStation; import cc.yunxi.domain.po.RecycleStation;
import cc.yunxi.domain.query.RecycleStationQuery; 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.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; 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.exception.BizIllegalException;
import cc.yunxi.common.utils.BeanUtils; import cc.yunxi.common.utils.BeanUtils;
import cc.yunxi.domain.po.*; import cc.yunxi.domain.po.*;
import cc.yunxi.domain.query.RecycleOrderQuery;
import cc.yunxi.domain.query.RecycleStationQuery; 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.enums.GlobalStatusEnum;
import cc.yunxi.mapper.*; import cc.yunxi.mapper.*;
import cc.yunxi.service.IRecycleStationService; import cc.yunxi.service.IRecycleStationService;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -27,7 +24,6 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* <p> * <p>
@ -43,12 +39,9 @@ public class RecycleStationServiceImpl extends ServiceImpl<RecycleStationMapper,
@Resource @Resource
private RecycleStationMapper recycleStationMapper; private RecycleStationMapper recycleStationMapper;
@Resource @Resource
private RecycleStationPriceMapper recycleStationPriceMapper; private RecycleStationPriceMapper recycleStationPriceMapper;
@Resource @Resource
private PriceMapper priceMapper;
@Resource
private PriceProductMapper priceProductMapper; private PriceProductMapper priceProductMapper;
@Resource @Resource
private ProductMapper productMapper; private ProductMapper productMapper;
@ -57,6 +50,23 @@ public class RecycleStationServiceImpl extends ServiceImpl<RecycleStationMapper,
@Override @Override
public Page<RecycleStation> queryStationByPage(RecycleStationQuery recycleStationQuery) { public Page<RecycleStation> queryStationByPage(RecycleStationQuery recycleStationQuery) {
LambdaQueryWrapperX<RecycleStation> wrapperX = new LambdaQueryWrapperX<>(); 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()); wrapperX.eqIfPresent(RecycleStation::getStationName, recycleStationQuery.getStationName());
Page<RecycleStation> pageDO = recycleStationQuery.addOrderItem(RecycleStation::getCreatorTime, false).buildPage(); Page<RecycleStation> pageDO = recycleStationQuery.addOrderItem(RecycleStation::getCreatorTime, false).buildPage();
return recycleStationMapper.queryStationByPage(recycleStationQuery.getLocation(), pageDO, wrapperX); return recycleStationMapper.queryStationByPage(recycleStationQuery.getLocation(), pageDO, wrapperX);
@ -78,18 +88,14 @@ public class RecycleStationServiceImpl extends ServiceImpl<RecycleStationMapper,
@Override @Override
public List<ProductRespVO> getStationProduct(String stationId) { public List<ProductRespVO> getStationProduct(String stationId) {
RecycleStationPrice recycleStationPrice = new LambdaQueryChainWrapper<>(recycleStationPriceMapper) QueryWrapper<Price> wrapper = new QueryWrapper<Price>().eq("a.status", GlobalStatusEnum.VALID);
.eq(RecycleStationPrice::getRecycleStationId, stationId).one(); String priceId = recycleStationPriceMapper.getLatestPriceByStationId(stationId,wrapper);
if (ObjectUtil.isEmpty(recycleStationPrice)) { if (ObjectUtil.isEmpty(priceId)) {
throw new BizIllegalException("回收站点价目信息未配置"); 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("价目配置不存在或被禁用");
} }
List<ProductRespVO> productRespVOList = new ArrayList<>(20); List<ProductRespVO> productRespVOList = new ArrayList<>(20);
List<PriceProduct> priceProductList = new LambdaQueryChainWrapper<>(priceProductMapper) List<PriceProduct> priceProductList = new LambdaQueryChainWrapper<>(priceProductMapper)
.eq(PriceProduct::getPriceId, price.getId()).list(); .eq(PriceProduct::getPriceId, priceId).list();
if (CollectionUtil.isNotEmpty(priceProductList)) { if (CollectionUtil.isNotEmpty(priceProductList)) {
// 获取废品价格信息 // 获取废品价格信息
Map<String, PriceProduct> priceProductMap = priceProductList.stream() 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"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cc.yunxi.mapper.ProductMapper"> <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> </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