订单业务功能开发v6 - 订单废品明细

wxpay
LI-CCONG\李聪聪 8 months ago
parent 3828d1af57
commit d65695437f

@ -17,7 +17,6 @@ import org.springframework.web.bind.annotation.*;
@RequestMapping("/common")
@RequiredArgsConstructor
@Slf4j
public class CommonController {
private final CommonService commonService;
@ -47,9 +46,9 @@ public class CommonController {
}
@ApiOperation("用户查询接口")
@GetMapping("/cuser")
public CommonResult<UserDTO> search() {
@ApiOperation("登录态检查")
@GetMapping("/check_token")
public CommonResult<UserDTO> checkToken() {
UserDTO userDto = UserContext.getUser();
return CommonResult.success(userDto);
}

@ -8,10 +8,13 @@ import cc.yunxi.common.utils.BeanUtils;
import cc.yunxi.common.utils.CommonUtil;
import cc.yunxi.domain.dto.LocationDTO;
import cc.yunxi.domain.dto.UserDTO;
import cc.yunxi.domain.po.RecycleOrderProduct;
import cc.yunxi.domain.vo.recycleorder.*;
import cc.yunxi.domain.po.RecycleOrder;
import cc.yunxi.domain.query.RecycleOrderQuery;
import cc.yunxi.domain.vo.recycleorder.RecycleOrderDetailResponseVO;
import cc.yunxi.enums.UserTypeEnum;
import cc.yunxi.service.IRecycleOrderProductService;
import cc.yunxi.service.IRecycleOrderService;
import cc.yunxi.utils.UserContext;
import cn.hutool.core.util.ObjectUtil;
@ -21,6 +24,8 @@ import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
*
@ -37,6 +42,8 @@ public class RecycleOrderController {
private final IRecycleOrderService recycleOrderService;
private final IRecycleOrderProductService recycleOrderProductService;
@ApiOperation("分页查询回收订单")
@PostMapping("/page")
public CommonResult<PageDTO<RecycleOrderRespVO>> queryOrderByPage(@RequestBody RecycleOrderQuery recycleOrderQuery) {
@ -87,6 +94,18 @@ public class RecycleOrderController {
return CommonResult.success(recycleOrderRespVO);
}
@ApiOperation("回收订单明细详情")
@GetMapping("/product-info")
public CommonResult<List<RecycleOrderDetailResponseVO>> OrderProductList(@RequestParam("orderId") String orderId) {
List<RecycleOrderProduct> orderProducts = recycleOrderProductService.getOrderProductsByOrderId(orderId);
List<RecycleOrderDetailResponseVO> recycleOrderDetailVOList = BeanUtils.copyList(orderProducts, RecycleOrderDetailResponseVO.class);
// 是否展示最新价格? todo
return CommonResult.success(recycleOrderDetailVOList);
}
@ApiOperation("回收订单更新")
@PostMapping("/update")
@UserTypeAnnotation(UserTypeEnum.CLIENT)
@ -95,9 +114,19 @@ public class RecycleOrderController {
return CommonResult.success(true);
}
@ApiOperation("散户取消订单")
@PostMapping ("/cancel")
@UserTypeAnnotation(UserTypeEnum.CLIENT)
public CommonResult<Boolean> cancelOrder(@RequestBody RecycleOrderCancelVO orderCancelVO) {
UserDTO userDTO = UserContext.getUser();
orderCancelVO.setClientId(userDTO.getId());
recycleOrderService.cancelOrder(orderCancelVO);
return CommonResult.success(true);
}
@ApiOperation("回收员接单")
@PostMapping("/taking")
@UserTypeAnnotation(UserTypeEnum.CLIENT)
@UserTypeAnnotation(UserTypeEnum.RECYCLER)
public CommonResult<Boolean> takingOrder(@RequestBody RecycleOrderTakingVO orderTakingVO) {
UserDTO userDTO = UserContext.getUser();
orderTakingVO.setStaffsId(userDTO.getId());
@ -108,7 +137,7 @@ public class RecycleOrderController {
@ApiOperation("回收员到达")
@PostMapping("/reach")
@UserTypeAnnotation(UserTypeEnum.CLIENT)
@UserTypeAnnotation(UserTypeEnum.RECYCLER)
public CommonResult<Boolean> reachOrder(@RequestBody RecycleOrderReachVO orderReachVO) {
UserDTO userDTO = UserContext.getUser();
orderReachVO.setStaffsId(userDTO.getId());
@ -126,17 +155,4 @@ public class RecycleOrderController {
return CommonResult.success(true);
}
@ApiOperation("散户取消订单")
@PostMapping ("/cancel")
@UserTypeAnnotation(UserTypeEnum.CLIENT)
public CommonResult<Boolean> cancelOrder(@RequestBody RecycleOrderCancelVO orderCancelVO) {
UserDTO userDTO = UserContext.getUser();
orderCancelVO.setClientId(userDTO.getId());
recycleOrderService.cancelOrder(orderCancelVO);
return CommonResult.success(true);
}
}

@ -1,5 +1,6 @@
package cc.yunxi.domain.po;
import cc.yunxi.enums.ProductUnitEnum;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
@ -44,7 +45,7 @@ public class Product {
@ApiModelProperty("库存单位")
@TableField("unit")
private String unit;
private ProductUnitEnum unit;
@ApiModelProperty("备注")
@TableField("remak")

@ -86,9 +86,13 @@ public class RecycleOrder {
@ApiModelProperty("订单创建时间")
@TableField("creator_time")
@TableField("f_creator_time")
private LocalDateTime creatorTime;
@ApiModelProperty("订单修改时间")
@TableField("f_last_modify_time")
private LocalDateTime updateTime;
@ApiModelProperty("预约上门时间起")
@TableField("appointment_time_start")
private LocalDateTime appointmentTimeStart;

@ -0,0 +1,69 @@
package cc.yunxi.domain.po;
import cc.yunxi.enums.ProductWeightEnum;
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.Getter;
import lombok.Setter;
/**
* <p>
* -
* </p>
*
* @author ccongli
* @since 2024-03-09 09:29:28
*/
@Getter
@Setter
@TableName("nx_recycle_order_product")
@ApiModel(value = "RecycleOrderProduct对象", description = "回收订单-废品信息表")
public class RecycleOrderProduct {
@ApiModelProperty("主键id")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty("订单id")
@TableField("recycle_order_id")
private String recycleOrderId;
@ApiModelProperty("商品id")
@TableField("product_id")
private String productId;
@ApiModelProperty("商品名称")
@TableField("product_name")
private String productName;
@ApiModelProperty("商品预估重量")
@TableField("product_weight")
private ProductWeightEnum productWeight;
@ApiModelProperty("商品实际重量")
@TableField("product_actual_weight")
private Double productActualWeight;
@ApiModelProperty("下单时回收单价")
@TableField("recovery_price")
private BigDecimal recoveryPrice;
@ApiModelProperty("实际回收单价")
@TableField("actual_recoveryl_price")
private BigDecimal ActualRecoveryPrice;
@ApiModelProperty("创建时间")
@TableField("f_creator_time")
private LocalDateTime creatorTime;
@ApiModelProperty("更新时间")
@TableField("f_last_modify_time")
private LocalDateTime updateTime;
}

@ -1,5 +1,6 @@
package cc.yunxi.domain.vo.priceproduct;
import cc.yunxi.enums.ProductUnitEnum;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
@ -47,7 +48,7 @@ public class ProductRespVO {
private String spec;
@ApiModelProperty("废品单位")
private String unit;
private ProductUnitEnum unit;
@ApiModelProperty("备注")
private String remark;

@ -1,6 +1,7 @@
package cc.yunxi.domain.vo.recycleorder;
import cc.yunxi.domain.dto.LocationDTO;
import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailCreateVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -11,6 +12,7 @@ import javax.validation.constraints.Future;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.List;
@ApiModel(description = "回收订单- App下单 Request VO")
@Data
@ -31,13 +33,6 @@ public class RecycleOrderCreateVO {
@NotBlank(message = "散户地址不能为空")
private String recycleAddress;
// @ApiModelProperty(value = "下单地址经度", required = true, example = "119.643888")
// @NotBlank(message = "下单地址经度不能为空")
// private String longitude;
//
// @ApiModelProperty(value = "下单地址纬度", required = true, example = "37.966944")
// @NotBlank(message = "下单地址纬度不能为空")
// private String latitude;
@ApiModelProperty(value = "当前位置", required = true)
@NotNull(message = "位置定位信息未授权")
@Valid
@ -56,4 +51,10 @@ public class RecycleOrderCreateVO {
@ApiModelProperty(value = "备注", required = false, example = "请尽快上门")
private String remark;
@ApiModelProperty(value = "订单明细", required = true)
@NotNull(message = "订单明细未提交")
@Valid
private List<RecycleOrderDetailCreateVO> orderDetails;
}

@ -1,12 +1,16 @@
package cc.yunxi.domain.vo.recycleorder;
import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailUpdateVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.List;
@ApiModel(description = "回收订单- 订单完成 Request VO")
@Data
@ -20,4 +24,9 @@ public class RecycleOrderFinishVO {
@ApiModelProperty(value = "回收员id", hidden = true, example = "533242995646951684")
private String staffsId;
@ApiModelProperty(value = "订单明细", required = true)
@NotNull(message = "订单明细未提交")
@Valid
private List<RecycleOrderDetailUpdateVO> orderDetails;
}

@ -17,11 +17,11 @@ public class RecycleOrderUpdateVO {
@NotBlank(message = "回收订单id不能为空")
private String id;
@ApiModelProperty(value = "回收站id", required = false, example = "521632060801030597")
private String recycleStationId;
// @ApiModelProperty(value = "回收站id", required = false, example = "521632060801030597")
// private String recycleStationId;
@ApiModelProperty(value = "散户地址", required = false, example = "xxx市yyy区")
private String recycleAddress;
// @ApiModelProperty(value = "散户地址", required = false, example = "xxx市yyy区")
// private String recycleAddress;
@ApiModelProperty(value = "预约上门时间起", required = false, example = "2024-03-01 15:58:49")
@Future(message = "预约上门时间起不正确")

@ -0,0 +1,41 @@
package cc.yunxi.domain.vo.recycleorderdetail;
import cc.yunxi.enums.ProductWeightEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@ApiModel(description = "回收订单添加明细 Request VO")
@Data
public class RecycleOrderDetailCreateVO {
@ApiModelProperty(value = "订单id", hidden = true, example = "1763827319099719682")
private String recycleOrderId;
@ApiModelProperty(value = "商品id", required = true, example = "534658869696135686")
@NotBlank(message = "商品id不能为空")
private String productId;
@ApiModelProperty(value = "商品名称", required = true)
@NotBlank(message = "商品名称不能为空")
private String productName;
@ApiModelProperty(value = "商品预估重量", required = true)
@NotBlank(message = "商品预估重量不能为空")
private ProductWeightEnum productWeight;
@ApiModelProperty(value = "下单时回收单价", required = true)
@NotBlank(message = "下单时回收单价不能为空")
@DecimalMin(value = "0.01", message = "下单时回收单价数值错误")
private BigDecimal recoveryPrice;
@ApiModelProperty(value = "创建时间", hidden = true)
private LocalDateTime creatorTime;
}

@ -0,0 +1,57 @@
package cc.yunxi.domain.vo.recycleorder;
import cc.yunxi.enums.OrderStatusEnum;
import cc.yunxi.enums.OrderTypeEnum;
import cc.yunxi.enums.ProductWeightEnum;
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 javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* <p>
* VO
* </p>
*
* @author ccongli
* @since 2024-03-01 11:15:39
*/
@ApiModel(description = "回收订单明细 Response VO")
@Data
public class RecycleOrderDetailResponseVO {
@ApiModelProperty("主键id")
private String id;
@ApiModelProperty("订单id")
private String recycleOrderId;
@ApiModelProperty("商品id")
private String productId;
@ApiModelProperty("商品名称")
private String productName;
@ApiModelProperty("商品预估重量")
private ProductWeightEnum productWeight;
@ApiModelProperty("商品实际重量")
private Double productActualWeight;
@ApiModelProperty("下单时回收单价")
private BigDecimal recoveryPrice;
@ApiModelProperty("实际回收单价")
private BigDecimal actualRecoveryPrice;
@ApiModelProperty("创建时间")
private LocalDateTime creatorTime;
}

@ -0,0 +1,40 @@
package cc.yunxi.domain.vo.recycleorderdetail;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@ApiModel(description = "回收订单更新明细 Request VO")
@Data
public class RecycleOrderDetailUpdateVO {
@ApiModelProperty(value = "主键id", required = true)
@NotBlank(message = "id不能为空")
private String id;
@ApiModelProperty(value = "商品id", required = true, example = "534658869696135686")
@NotBlank(message = "商品id不能为空")
private String productId;
@ApiModelProperty(value = "商品实际重量", required = true, example = "1.08")
@NotBlank(message = "商品实际重量不能为空")
@DecimalMin(value = "0.00", message = "商品实际重量数值错误")
private Double productActualWeight;
// @ApiModelProperty(value = "实际回收单价", required = true, example = "100.00")
// @NotBlank(message = "实际回收单价不能为空")
// @DecimalMin(value = "0.01", message = "实际回收单价数值错误")
@ApiModelProperty(value = "实际回收单价", hidden = true)
private BigDecimal actualRecoveryPrice;
@ApiModelProperty(value = "更新时间", hidden = true)
private LocalDateTime updateTime;
}

@ -0,0 +1,27 @@
package cc.yunxi.enums;
import cc.yunxi.common.enums.BaseEnum;
import cc.yunxi.common.enums.SwaggerDisplayEnum;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
*
*/
@Getter
@AllArgsConstructor
@SwaggerDisplayEnum
public enum ProductUnitEnum implements BaseEnum {
G("1", "克"),
KG("2", "千克"),
TON("3", "吨");
@EnumValue
private final String code;
private final String desc;
}

@ -0,0 +1,28 @@
package cc.yunxi.enums;
import cc.yunxi.common.enums.BaseEnum;
import cc.yunxi.common.enums.SwaggerDisplayEnum;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
*
*/
@Getter
@AllArgsConstructor
@SwaggerDisplayEnum
public enum ProductWeightEnum implements BaseEnum {
I("1", "10Kg以下"),
II("2", "10Kg~20Kg"),
III("3", "20Kg以上");
@EnumValue
private final String code;
private final String desc;
}

@ -3,6 +3,7 @@ package cc.yunxi.mapper;
import cc.yunxi.domain.po.PriceProduct;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* <p>
@ -15,4 +16,5 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PriceProductMapper extends BaseMapper<PriceProduct> {
}

@ -0,0 +1,27 @@
package cc.yunxi.mapper;
import cc.yunxi.domain.po.PriceProduct;
import cc.yunxi.domain.po.RecycleOrderProduct;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* <p>
* - Mapper
* </p>
*
* @author ccongli
* @since 2024-03-09 09:29:28
*/
@Mapper
public interface RecycleOrderProductMapper extends BaseMapper<RecycleOrderProduct> {
/**
* id
* @param productId
* @return Price
*/
PriceProduct getLatestPriceProductByProductId(@Param("productId") String productId);
}

@ -1,6 +1,7 @@
package cc.yunxi.mapper;
import cc.yunxi.domain.po.Price;
import cc.yunxi.domain.po.PriceProduct;
import cc.yunxi.domain.po.RecycleStation;
import cc.yunxi.domain.po.RecycleStationPrice;
import com.baomidou.mybatisplus.core.conditions.Wrapper;

@ -0,0 +1,53 @@
package cc.yunxi.service;
import cc.yunxi.domain.po.PriceProduct;
import cc.yunxi.domain.po.RecycleOrderProduct;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;
import java.util.Collection;
import java.util.List;
/**
* <p>
* -
* </p>
*
* @author ccongli
* @since 2024-03-09 09:29:28
*/
public interface IRecycleOrderProductService extends IService<RecycleOrderProduct> {
/**
*
* @param productId
* @return PriceProduct
*/
PriceProduct getLatestPriceProduct(String productId);
/**
*
* @param orderId
* @return List<RecycleOrderProduct>
*/
List<RecycleOrderProduct> getOrderProductsByOrderId(String orderId);
/**
*
* @param
* @return List<RecycleOrderProduct>
*/
void createOrderProducts(Collection<RecycleOrderProduct> recycleOrderProducts);
/**
*
* @param
* @return List<RecycleOrderProduct>
*/
void updateOrderProducts(Collection<RecycleOrderProduct> recycleOrderProducts);
}

@ -1,6 +1,7 @@
package cc.yunxi.service;
import cc.yunxi.domain.po.RecycleOrder;
import cc.yunxi.domain.po.RecycleOrderProduct;
import cc.yunxi.domain.po.Recycler;
import cc.yunxi.domain.query.RecycleOrderQuery;
import cc.yunxi.domain.query.RecyclerQuery;
@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.validation.Valid;
import java.util.List;
/**
* <p>
@ -60,19 +62,19 @@ public interface IRecycleOrderService extends IService<RecycleOrder> {
*
* @param orderCancelVO
*/
void cancelOrder(RecycleOrderCancelVO orderCancelVO);
void cancelOrder(@Valid RecycleOrderCancelVO orderCancelVO);
/**
*
* @param orderReachVO
*/
void reachOrder(RecycleOrderReachVO orderReachVO);
void reachOrder(@Valid RecycleOrderReachVO orderReachVO);
/**
*
* @param orderFinishVO
*/
void finishOrder(RecycleOrderFinishVO orderFinishVO);
void finishOrder(@Valid RecycleOrderFinishVO orderFinishVO);
}

@ -0,0 +1,52 @@
package cc.yunxi.service.impl;
import cc.yunxi.domain.po.PriceProduct;
import cc.yunxi.domain.po.RecycleOrderProduct;
import cc.yunxi.mapper.RecycleOrderProductMapper;
import cc.yunxi.service.IRecycleOrderProductService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;
/**
* <p>
* -
* </p>
*
* @author ccongli
* @since 2024-03-09 09:29:28
*/
@Service
public class RecycleOrderProductServiceImpl extends ServiceImpl<RecycleOrderProductMapper, RecycleOrderProduct> implements IRecycleOrderProductService {
@Resource
private RecycleOrderProductMapper recycleOrderProductMapper;
@Override
public PriceProduct getLatestPriceProduct(String productId) {
return recycleOrderProductMapper.getLatestPriceProductByProductId(productId);
}
@Override
public List<RecycleOrderProduct> getOrderProductsByOrderId(String orderId) {
LambdaQueryWrapper<RecycleOrderProduct> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(RecycleOrderProduct::getRecycleOrderId, orderId);
return this.list(wrapper);
}
@Override
public void createOrderProducts(Collection<RecycleOrderProduct> recycleOrderProducts) {
this.saveBatch(recycleOrderProducts);
}
@Override
public void updateOrderProducts(Collection<RecycleOrderProduct> recycleOrderProducts) {
this.updateBatchById(recycleOrderProducts);
}
}

@ -4,24 +4,25 @@ import cc.yunxi.common.exception.BizIllegalException;
import cc.yunxi.common.exception.DbException;
import cc.yunxi.common.utils.BeanUtils;
import cc.yunxi.common.utils.CommonUtil;
import cc.yunxi.domain.dto.UserDTO;
import cc.yunxi.domain.po.Client;
import cc.yunxi.domain.po.PriceProduct;
import cc.yunxi.domain.po.RecycleOrder;
import cc.yunxi.domain.po.Recycler;
import cc.yunxi.domain.po.RecycleOrderProduct;
import cc.yunxi.domain.query.RecycleOrderQuery;
import cc.yunxi.domain.vo.recycleorder.*;
import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailCreateVO;
import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailUpdateVO;
import cc.yunxi.enums.BusinessCodeEnum;
import cc.yunxi.enums.OrderStatusEnum;
import cc.yunxi.enums.OrderTypeEnum;
import cc.yunxi.enums.UserTypeEnum;
import cc.yunxi.mapper.RecycleOrderMapper;
import cc.yunxi.service.IClientService;
import cc.yunxi.service.IRecycleOrderProductService;
import cc.yunxi.service.IRecycleOrderService;
import cc.yunxi.utils.UserContext;
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.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
@ -30,6 +31,10 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
/**
* <p>
@ -47,6 +52,9 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
@Resource
private IClientService clientService;
@Resource
private IRecycleOrderProductService recycleOrderProductService;
public Page<RecycleOrder> queryOrderByPage(RecycleOrderQuery recycleOrderQuery) {
LambdaQueryWrapper<RecycleOrder> wrapper = new LambdaQueryWrapper<>();
if (recycleOrderQuery.getUserType().equals(UserTypeEnum.CLIENT)) { // 散户查询
@ -90,6 +98,7 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
if (ObjectUtil.isEmpty(client)) {
throw new DbException("散户不存在");
}
// 创建订单
RecycleOrder recycleOrder = BeanUtils.copyBean(orderCreateVO, RecycleOrder.class, (source, target) -> {
target.setLatitude(source.getLocation().getLatitude());
target.setLongitude(source.getLocation().getLongitude());
@ -103,7 +112,18 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
recycleOrder.setOrderStatus(OrderStatusEnum.PENDING);
log.info("create recycleOrder info : {}", recycleOrder);
this.save(recycleOrder);
return recycleOrder.getId();
// 创建订单明细
String orderId = recycleOrder.getId();
List<RecycleOrderDetailCreateVO> recycleOrderProductVOList = orderCreateVO.getOrderDetails();
recycleOrderProductVOList.forEach(rp -> {
rp.setRecycleOrderId(orderId);
rp.setCreatorTime(LocalDateTime.now());
});
List<RecycleOrderProduct> recycleOrderProducts = BeanUtils.copyList(recycleOrderProductVOList, RecycleOrderProduct.class);
this.recycleOrderProductService.createOrderProducts(recycleOrderProducts);
return orderId;
}
@ -141,6 +161,7 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
recycleOrder.setOrderStatus(OrderStatusEnum.CANCELED);
log.info("recycleOrder cancelVO: {}", recycleOrder);
this.updateById(recycleOrder);
// 是否还要关联操作订单明细? todo
}
@ -167,9 +188,22 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
}
recycleOrder = BeanUtils.copyBean(orderFinishVO, RecycleOrder.class);;
recycleOrder.setOrderStatus(OrderStatusEnum.FINISHED);
// 给散户加余额 todo
log.info("recycleOrder orderFinishVO: {}", recycleOrder);
this.updateById(recycleOrder);
// 更新订单明细信息
List<RecycleOrderDetailUpdateVO> recycleOrderProductVOList = orderFinishVO.getOrderDetails();
recycleOrderProductVOList.forEach(rp -> {
rp.setUpdateTime(LocalDateTime.now());
PriceProduct latestPriceProduct = this.recycleOrderProductService.getLatestPriceProduct(rp.getProductId());
log.info("latest price product: {}", latestPriceProduct);
BigDecimal recoveryPrice = Optional.ofNullable(latestPriceProduct.getRecoveryPrice()).orElse(new BigDecimal("0.00"));
rp.setActualRecoveryPrice(recoveryPrice);
});
List<RecycleOrderProduct> recycleOrderProducts = BeanUtils.copyList(recycleOrderProductVOList, RecycleOrderProduct.class);
this.recycleOrderProductService.updateOrderProducts(recycleOrderProducts);
// 给散户加余额 todo
}

@ -0,0 +1,25 @@
<?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.RecycleOrderProductMapper">
<!-- 根据类目code查询最新一条的有效的价目 -->
<select id="getLatestPriceProductByProductId" resultType="String">
SELECT
b.id,
b.price_id,
b.product_id,
b.recovery_price,
b.reward_points,
b.f_creator_time
FROM
nx_recycle_order_product a
INNER JOIN nx_price_product b ON a.product_id = b.product_id
INNER JOIN nx_price c ON b.price_id = c.id
AND c.`status` = 1
WHERE
a.`product_id` = #{productId}
ORDER BY
c.f_creator_time ASC;
</select>
</mapper>
Loading…
Cancel
Save