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

wxpay
LI-CCONG\李聪聪 8 months ago
parent 5c72a4e6f8
commit 6c41b4f00c

@ -69,6 +69,7 @@ public class PageQuery<T> {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
orderItem.setAsc(isAsc); orderItem.setAsc(isAsc);
orderItems.add(orderItem);
return this; return this;
} }

@ -8,6 +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.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;
@ -18,6 +19,8 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
/** /**
* <p> * <p>
@ -52,16 +55,18 @@ public class RecycleStationController {
@ApiOperation("回收站详情") @ApiOperation("回收站详情")
@GetMapping("/info") @GetMapping("/info")
public CommonResult<RecycleStationRespVO> findOrder(@RequestBody RecycleStationQuery recycleStationQuery) { public CommonResult<RecycleStationRespVO> stationInfo(@RequestParam("stationId") String stationId) {
RecycleStation station = recycleStationService.getStationById(recycleStationQuery.getStationId()); RecycleStation station = recycleStationService.getStationById(stationId);
RecycleStationRespVO recycleStationRespVO = BeanUtils.copyBean(station, RecycleStationRespVO.class); RecycleStationRespVO recycleStationRespVO = BeanUtils.copyBean(station, RecycleStationRespVO.class);
// 站点距离计算
LocationDTO locationDTO = recycleStationQuery.getLocation();
log.info("client locationDTO: {}", locationDTO);
if (ObjectUtil.isEmpty(locationDTO)) {
throw new BizIllegalException("授权定位信息未授权");
}
return CommonResult.success(recycleStationRespVO); return CommonResult.success(recycleStationRespVO);
} }
@ApiOperation("回收站废品价格类目")
@GetMapping("/price-product")
public CommonResult<List<ProductRespVO>> stationProduct(@RequestParam("stationId") String stationId) {
List<ProductRespVO> stationProduct = recycleStationService.getStationProduct(stationId);
return CommonResult.success(stationProduct);
}
} }

@ -0,0 +1,58 @@
package cc.yunxi.domain.po;
import cc.yunxi.enums.GlobalStatusEnum;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.time.LocalDateTime;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
*
* </p>
*
* @author ccongli
* @since 2024-03-08 01:37:49
*/
@Data
@TableName("nx_price")
@ApiModel(value = "Price", description = "价格表")
public class Price {
@ApiModelProperty("主键id")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty("价格编号")
@TableField("price_code")
private String priceCode;
// @ApiModelProperty("报价方id(登录人所在商户id)")
// @TableField("buiness_id")
// private String buinessId;
// @ApiModelProperty("价格类型(1回收价)")
// @TableField("price_type")
// private String priceType;
@ApiModelProperty("状态1生效2失效")
@TableField("status")
private GlobalStatusEnum status;
@ApiModelProperty("备注")
@TableField("remak")
private String remak;
@ApiModelProperty("创建时间")
@TableField("f_creator_time")
private LocalDateTime fCreatorTime;
}

@ -0,0 +1,53 @@
package cc.yunxi.domain.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
*
* </p>
*
* @author ccongli
* @since 2024-03-08 01:47:39
*/
@Data
@TableName("nx_price_product")
@ApiModel(value = "PriceProduct", description = "价格废品关联信息")
public class PriceProduct {
@ApiModelProperty("主键id")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@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("f_creator_time")
private LocalDateTime fCreatorTime;
}

@ -0,0 +1,57 @@
package cc.yunxi.domain.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.time.LocalDateTime;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
*
* </p>
*
* @author ccongli
* @since 2024-03-08 01:52:54
*/
@Data
@TableName("nx_product")
@ApiModel(value = "Product对象", description = "商品回收类目")
public class Product {
@ApiModelProperty("主键id")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@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;
}

@ -0,0 +1,46 @@
package cc.yunxi.domain.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
import java.util.Date;
/**
* <p>
*
* </p>
*
* @author ccongli
* @since 2024-03-08 01:41:56
*/
@Getter
@Setter
@TableName("nx_price_recycle")
@ApiModel(value = "RecycleStationPrice", description = "回收站价目表")
public class RecycleStationPrice {
@ApiModelProperty("主键Id")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty("价目id")
@TableField("price_id")
private String priceId;
@ApiModelProperty("回收站id")
@TableField("recycle_id")
private String recycleStationId;
@ApiModelProperty("创建时间")
@TableField("f_creator_time")
private LocalDateTime fCreatorTime;
}

@ -0,0 +1,67 @@
package cc.yunxi.domain.vo.recyclestation;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
/**
* <p>
* VO
* </p>
*
* @author ccongli
* @since 2024-03-01 11:15:39
*/
@ApiModel(description = "回收站 Response VO")
@Data
@Accessors(chain = true)
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;
}

@ -0,0 +1,22 @@
package cc.yunxi.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
*
*/
@Getter
@AllArgsConstructor
public enum GlobalStatusEnum {
VALID("1", "启用"),
INVALID("2", "禁用");
@EnumValue
private final String code;
private final String desc;
}

@ -0,0 +1,18 @@
package cc.yunxi.mapper;
import cc.yunxi.domain.po.Price;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* Mapper
* </p>
*
* @author ccongli
* @since 2024-03-08 01:37:49
*/
@Mapper
public interface PriceMapper extends BaseMapper<Price> {
}

@ -0,0 +1,18 @@
package cc.yunxi.mapper;
import cc.yunxi.domain.po.PriceProduct;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* Mapper
* </p>
*
* @author ccongli
* @since 2024-03-08 01:47:39
*/
@Mapper
public interface PriceProductMapper extends BaseMapper<PriceProduct> {
}

@ -0,0 +1,18 @@
package cc.yunxi.mapper;
import cc.yunxi.domain.po.Product;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* Mapper
* </p>
*
* @author ccongli
* @since 2024-03-08 01:52:54
*/
@Mapper
public interface ProductMapper extends BaseMapper<Product> {
}

@ -0,0 +1,18 @@
package cc.yunxi.mapper;
import cc.yunxi.domain.po.RecycleStationPrice;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* Mapper
* </p>
*
* @author ccongli
* @since 2024-03-08 01:41:56
*/
@Mapper
public interface RecycleStationPriceMapper extends BaseMapper<RecycleStationPrice> {
}

@ -0,0 +1,16 @@
package cc.yunxi.service;
import cc.yunxi.domain.po.Price;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
*
* </p>
*
* @author ccongli
* @since 2024-03-08 01:37:49
*/
public interface IPriceService extends IService<Price> {
}

@ -3,12 +3,15 @@ package cc.yunxi.service;
import cc.yunxi.domain.po.RecycleOrder; 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 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;
import java.util.List;
/** /**
* <p> * <p>
* - *
* </p> * </p>
* *
* @author ccongli * @author ccongli
@ -26,10 +29,18 @@ public interface IRecycleStationService extends IService<RecycleStation> {
/** /**
* *
* @param id * @param id
* @return RecycleOrder * @return RecycleOrder
*/ */
RecycleStation getStationById(String id); RecycleStation getStationById(String id);
/**
*
* @param stationId
* @return RecycleOrder
*/
List<ProductRespVO> getStationProduct(String stationId);
} }

@ -0,0 +1,20 @@
package cc.yunxi.service.impl;
import cc.yunxi.domain.po.Price;
import cc.yunxi.mapper.PriceMapper;
import cc.yunxi.service.IPriceService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
*
* </p>
*
* @author ccongli
* @since 2024-03-08 01:37:49
*/
@Service
public class PriceServiceImpl extends ServiceImpl<PriceMapper, Price> implements IPriceService {
}

@ -2,22 +2,32 @@ package cc.yunxi.service.impl;
import cc.yunxi.common.domain.LambdaQueryWrapperX; import cc.yunxi.common.domain.LambdaQueryWrapperX;
import cc.yunxi.common.exception.BizIllegalException; import cc.yunxi.common.exception.BizIllegalException;
import cc.yunxi.domain.po.Client; import cc.yunxi.common.utils.BeanUtils;
import cc.yunxi.domain.po.RecycleOrder; import cc.yunxi.domain.po.*;
import cc.yunxi.domain.po.RecycleStation;
import cc.yunxi.domain.query.RecycleOrderQuery; import cc.yunxi.domain.query.RecycleOrderQuery;
import cc.yunxi.domain.query.RecycleStationQuery; import cc.yunxi.domain.query.RecycleStationQuery;
import cc.yunxi.mapper.RecycleStationMapper; import cc.yunxi.domain.vo.recyclestation.ProductRespVO;
import cc.yunxi.enums.GlobalStatusEnum;
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.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.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
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;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* <p> * <p>
@ -34,7 +44,17 @@ public class RecycleStationServiceImpl extends ServiceImpl<RecycleStationMapper,
@Resource @Resource
private RecycleStationMapper recycleStationMapper; private RecycleStationMapper recycleStationMapper;
@Resource
private RecycleStationPriceMapper recycleStationPriceMapper;
@Resource
private PriceMapper priceMapper;
@Resource
private PriceProductMapper priceProductMapper;
@Resource
private ProductMapper productMapper;
@Override
public Page<RecycleStation> queryStationByPage(RecycleStationQuery recycleStationQuery) { public Page<RecycleStation> queryStationByPage(RecycleStationQuery recycleStationQuery) {
LambdaQueryWrapperX<RecycleStation> wrapperX = new LambdaQueryWrapperX<>(); LambdaQueryWrapperX<RecycleStation> wrapperX = new LambdaQueryWrapperX<>();
wrapperX.eqIfPresent(RecycleStation::getStationName, recycleStationQuery.getStationName()); wrapperX.eqIfPresent(RecycleStation::getStationName, recycleStationQuery.getStationName());
@ -43,6 +63,7 @@ public class RecycleStationServiceImpl extends ServiceImpl<RecycleStationMapper,
} }
@Override
public RecycleStation getStationById(String id) { public RecycleStation getStationById(String id) {
if (StrUtil.isEmpty(id)) { if (StrUtil.isEmpty(id)) {
throw new BizIllegalException("请求参数缺失"); throw new BizIllegalException("请求参数缺失");
@ -54,4 +75,41 @@ public class RecycleStationServiceImpl extends ServiceImpl<RecycleStationMapper,
return recycleStation; return recycleStation;
} }
@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("价目配置不存在或被禁用");
}
List<ProductRespVO> productRespVOList = new ArrayList<>(20);
List<PriceProduct> priceProductList = new LambdaQueryChainWrapper<>(priceProductMapper)
.eq(PriceProduct::getPriceId, price.getId()).list();
if (CollectionUtil.isNotEmpty(priceProductList)) {
// 获取废品价格信息
Map<String, PriceProduct> priceProductMap = priceProductList.stream()
.collect(Collectors.toMap(PriceProduct::getProductId, p -> p, (k1, k2) -> k1));
if (CollectionUtil.isNotEmpty(priceProductMap)) {
List<Product> productList = new LambdaQueryChainWrapper<>(productMapper)
.in(Product::getId, priceProductMap.keySet()).list();
for (Product product : productList) {
PriceProduct priceProduct = priceProductMap.get(product.getId());
ProductRespVO productRespVO = BeanUtils.copyBean(priceProduct, ProductRespVO.class);
productRespVO.setCode(product.getCode())
.setName(product.getName())
.setSpec(product.getSpec())
.setUnit(product.getUnit())
.setRemark(product.getRemark());
productRespVOList.add(productRespVO);
}
}
}
return productRespVOList;
}
} }

@ -0,0 +1,5 @@
<?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.PriceMapper">
</mapper>

@ -0,0 +1,5 @@
<?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.PriceProductMapper">
</mapper>

@ -0,0 +1,5 @@
<?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>

@ -0,0 +1,5 @@
<?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.ProductMapper">
</mapper>

@ -17,7 +17,7 @@
HAVING HAVING
distance &lt;= a.accept_range distance &lt;= a.accept_range
ORDER BY ORDER BY
distance ASC; distance ASC
</select> </select>
</mapper> </mapper>

Loading…
Cancel
Save