From d65695437ff0a7c5946c1f7232b67f21f180ae1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LI-CCONG=5C=E6=9D=8E=E8=81=AA=E8=81=AA?= <1441652193@qq.com> Date: Sat, 9 Mar 2024 15:30:36 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=B8=9A=E5=8A=A1=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=BC=80=E5=8F=91v6=20-=20=E8=AE=A2=E5=8D=95=E5=BA=9F?= =?UTF-8?q?=E5=93=81=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cc/yunxi/controller/CommonController.java | 7 +- .../controller/RecycleOrderController.java | 46 +++++++++---- .../main/java/cc/yunxi/domain/po/Product.java | 3 +- .../java/cc/yunxi/domain/po/RecycleOrder.java | 6 +- .../yunxi/domain/po/RecycleOrderProduct.java | 69 +++++++++++++++++++ .../domain/vo/priceproduct/ProductRespVO.java | 3 +- .../vo/recycleorder/RecycleOrderCreateVO.java | 15 ++-- .../vo/recycleorder/RecycleOrderFinishVO.java | 9 +++ .../vo/recycleorder/RecycleOrderUpdateVO.java | 8 +-- .../RecycleOrderDetailCreateVO.java | 41 +++++++++++ .../RecycleOrderDetailResponseVO.java | 57 +++++++++++++++ .../RecycleOrderDetailUpdateVO.java | 40 +++++++++++ .../java/cc/yunxi/enums/ProductUnitEnum.java | 27 ++++++++ .../cc/yunxi/enums/ProductWeightEnum.java | 28 ++++++++ .../cc/yunxi/mapper/PriceProductMapper.java | 2 + .../mapper/RecycleOrderProductMapper.java | 27 ++++++++ .../mapper/RecycleStationPriceMapper.java | 1 + .../service/IRecycleOrderProductService.java | 53 ++++++++++++++ .../yunxi/service/IRecycleOrderService.java | 8 ++- .../impl/RecycleOrderProductServiceImpl.java | 52 ++++++++++++++ .../service/impl/RecycleOrderServiceImpl.java | 46 +++++++++++-- .../mapper/RecycleOrderProductMapper.xml | 25 +++++++ 22 files changed, 531 insertions(+), 42 deletions(-) create mode 100644 nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleOrderProduct.java create mode 100644 nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorderdetail/RecycleOrderDetailCreateVO.java create mode 100644 nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorderdetail/RecycleOrderDetailResponseVO.java create mode 100644 nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorderdetail/RecycleOrderDetailUpdateVO.java create mode 100644 nxhs-service/src/main/java/cc/yunxi/enums/ProductUnitEnum.java create mode 100644 nxhs-service/src/main/java/cc/yunxi/enums/ProductWeightEnum.java create mode 100644 nxhs-service/src/main/java/cc/yunxi/mapper/RecycleOrderProductMapper.java create mode 100644 nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderProductService.java create mode 100644 nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderProductServiceImpl.java create mode 100644 nxhs-service/src/main/resources/mapper/RecycleOrderProductMapper.xml diff --git a/nxhs-service/src/main/java/cc/yunxi/controller/CommonController.java b/nxhs-service/src/main/java/cc/yunxi/controller/CommonController.java index 86303da..b8ccb9d 100644 --- a/nxhs-service/src/main/java/cc/yunxi/controller/CommonController.java +++ b/nxhs-service/src/main/java/cc/yunxi/controller/CommonController.java @@ -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 search() { + @ApiOperation("登录态检查") + @GetMapping("/check_token") + public CommonResult checkToken() { UserDTO userDto = UserContext.getUser(); return CommonResult.success(userDto); } diff --git a/nxhs-service/src/main/java/cc/yunxi/controller/RecycleOrderController.java b/nxhs-service/src/main/java/cc/yunxi/controller/RecycleOrderController.java index 9ed065c..596a331 100644 --- a/nxhs-service/src/main/java/cc/yunxi/controller/RecycleOrderController.java +++ b/nxhs-service/src/main/java/cc/yunxi/controller/RecycleOrderController.java @@ -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; + /** *

* 回收站回收订单 @@ -37,6 +42,8 @@ public class RecycleOrderController { private final IRecycleOrderService recycleOrderService; + private final IRecycleOrderProductService recycleOrderProductService; + @ApiOperation("分页查询回收订单") @PostMapping("/page") public CommonResult> queryOrderByPage(@RequestBody RecycleOrderQuery recycleOrderQuery) { @@ -87,6 +94,18 @@ public class RecycleOrderController { return CommonResult.success(recycleOrderRespVO); } + + @ApiOperation("回收订单明细详情") + @GetMapping("/product-info") + public CommonResult> OrderProductList(@RequestParam("orderId") String orderId) { + List orderProducts = recycleOrderProductService.getOrderProductsByOrderId(orderId); + List 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 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 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 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 cancelOrder(@RequestBody RecycleOrderCancelVO orderCancelVO) { - UserDTO userDTO = UserContext.getUser(); - orderCancelVO.setClientId(userDTO.getId()); - recycleOrderService.cancelOrder(orderCancelVO); - return CommonResult.success(true); - } - - } diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/po/Product.java b/nxhs-service/src/main/java/cc/yunxi/domain/po/Product.java index e8cab3b..b9140cc 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/po/Product.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/po/Product.java @@ -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") diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleOrder.java b/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleOrder.java index 544d911..d96032f 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleOrder.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleOrder.java @@ -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; diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleOrderProduct.java b/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleOrderProduct.java new file mode 100644 index 0000000..bbe9fc9 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleOrderProduct.java @@ -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; + +/** + *

+ * 回收订单-废品信息表 + *

+ * + * @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; +} diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/priceproduct/ProductRespVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/priceproduct/ProductRespVO.java index 411f496..a686fdc 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/vo/priceproduct/ProductRespVO.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/priceproduct/ProductRespVO.java @@ -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; diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderCreateVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderCreateVO.java index 6cde15c..f35d0fb 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderCreateVO.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderCreateVO.java @@ -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 orderDetails; + } diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderFinishVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderFinishVO.java index 8d8001e..2af715b 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderFinishVO.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderFinishVO.java @@ -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 orderDetails; } diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderUpdateVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderUpdateVO.java index 0c812e2..6724cbe 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderUpdateVO.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderUpdateVO.java @@ -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 = "预约上门时间起不正确") diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorderdetail/RecycleOrderDetailCreateVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorderdetail/RecycleOrderDetailCreateVO.java new file mode 100644 index 0000000..b836624 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorderdetail/RecycleOrderDetailCreateVO.java @@ -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; + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorderdetail/RecycleOrderDetailResponseVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorderdetail/RecycleOrderDetailResponseVO.java new file mode 100644 index 0000000..ed3aa12 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorderdetail/RecycleOrderDetailResponseVO.java @@ -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; + +/** + *

+ * 回收订单明细 VO + *

+ * + * @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; + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorderdetail/RecycleOrderDetailUpdateVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorderdetail/RecycleOrderDetailUpdateVO.java new file mode 100644 index 0000000..a9e1271 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorderdetail/RecycleOrderDetailUpdateVO.java @@ -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; + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/enums/ProductUnitEnum.java b/nxhs-service/src/main/java/cc/yunxi/enums/ProductUnitEnum.java new file mode 100644 index 0000000..eb4687d --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/enums/ProductUnitEnum.java @@ -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; + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/enums/ProductWeightEnum.java b/nxhs-service/src/main/java/cc/yunxi/enums/ProductWeightEnum.java new file mode 100644 index 0000000..64ffd79 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/enums/ProductWeightEnum.java @@ -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; + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/mapper/PriceProductMapper.java b/nxhs-service/src/main/java/cc/yunxi/mapper/PriceProductMapper.java index 88b37d2..ab93620 100644 --- a/nxhs-service/src/main/java/cc/yunxi/mapper/PriceProductMapper.java +++ b/nxhs-service/src/main/java/cc/yunxi/mapper/PriceProductMapper.java @@ -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; /** *

@@ -15,4 +16,5 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface PriceProductMapper extends BaseMapper { + } diff --git a/nxhs-service/src/main/java/cc/yunxi/mapper/RecycleOrderProductMapper.java b/nxhs-service/src/main/java/cc/yunxi/mapper/RecycleOrderProductMapper.java new file mode 100644 index 0000000..cbd7f70 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/mapper/RecycleOrderProductMapper.java @@ -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; + +/** + *

+ * 回收订单-废品信息表 Mapper 接口 + *

+ * + * @author ccongli + * @since 2024-03-09 09:29:28 + */ +@Mapper +public interface RecycleOrderProductMapper extends BaseMapper { + + /** + * 根据废品id 查询最新一条的有效的价目 + * @param productId + * @return Price + */ + PriceProduct getLatestPriceProductByProductId(@Param("productId") String productId); + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/mapper/RecycleStationPriceMapper.java b/nxhs-service/src/main/java/cc/yunxi/mapper/RecycleStationPriceMapper.java index 4a3b747..8fb7881 100644 --- a/nxhs-service/src/main/java/cc/yunxi/mapper/RecycleStationPriceMapper.java +++ b/nxhs-service/src/main/java/cc/yunxi/mapper/RecycleStationPriceMapper.java @@ -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; diff --git a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderProductService.java b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderProductService.java new file mode 100644 index 0000000..4a4468a --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderProductService.java @@ -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; + +/** + *

+ * 回收订单-废品信息表 服务类 + *

+ * + * @author ccongli + * @since 2024-03-09 09:29:28 + */ +public interface IRecycleOrderProductService extends IService { + + /** + * 获取废品最新价格信息 + * @param productId + * @return PriceProduct + */ + PriceProduct getLatestPriceProduct(String productId); + + + /** + * 订单废品明细 + * @param orderId + * @return List + */ + List getOrderProductsByOrderId(String orderId); + + + /** + * 订单废品批量添加 + * @param + * @return List + */ + void createOrderProducts(Collection recycleOrderProducts); + + + /** + * 订单废品批量更新 + * @param + * @return List + */ + void updateOrderProducts(Collection recycleOrderProducts); + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderService.java b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderService.java index f1fcb75..f642fbe 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderService.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderService.java @@ -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; /** *

@@ -60,19 +62,19 @@ public interface IRecycleOrderService extends IService { * 散户取消订单 * @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); } diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderProductServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderProductServiceImpl.java new file mode 100644 index 0000000..001c5e0 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderProductServiceImpl.java @@ -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; + +/** + *

+ * 回收订单-废品信息表 服务实现类 + *

+ * + * @author ccongli + * @since 2024-03-09 09:29:28 + */ +@Service +public class RecycleOrderProductServiceImpl extends ServiceImpl implements IRecycleOrderProductService { + + @Resource + private RecycleOrderProductMapper recycleOrderProductMapper; + + @Override + public PriceProduct getLatestPriceProduct(String productId) { + return recycleOrderProductMapper.getLatestPriceProductByProductId(productId); + } + + @Override + public List getOrderProductsByOrderId(String orderId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(RecycleOrderProduct::getRecycleOrderId, orderId); + return this.list(wrapper); + } + + + @Override + public void createOrderProducts(Collection recycleOrderProducts) { + this.saveBatch(recycleOrderProducts); + } + + + @Override + public void updateOrderProducts(Collection recycleOrderProducts) { + this.updateBatchById(recycleOrderProducts); + } +} diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderServiceImpl.java index 99f1462..b2fbdf1 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderServiceImpl.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleOrderServiceImpl.java @@ -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; /** *

@@ -47,6 +52,9 @@ public class RecycleOrderServiceImpl extends ServiceImpl queryOrderByPage(RecycleOrderQuery recycleOrderQuery) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if (recycleOrderQuery.getUserType().equals(UserTypeEnum.CLIENT)) { // 散户查询 @@ -90,6 +98,7 @@ public class RecycleOrderServiceImpl extends ServiceImpl { target.setLatitude(source.getLocation().getLatitude()); target.setLongitude(source.getLocation().getLongitude()); @@ -103,7 +112,18 @@ public class RecycleOrderServiceImpl extends ServiceImpl recycleOrderProductVOList = orderCreateVO.getOrderDetails(); + recycleOrderProductVOList.forEach(rp -> { + rp.setRecycleOrderId(orderId); + rp.setCreatorTime(LocalDateTime.now()); + }); + List recycleOrderProducts = BeanUtils.copyList(recycleOrderProductVOList, RecycleOrderProduct.class); + this.recycleOrderProductService.createOrderProducts(recycleOrderProducts); + + return orderId; } @@ -141,6 +161,7 @@ public class RecycleOrderServiceImpl extends ServiceImpl 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 recycleOrderProducts = BeanUtils.copyList(recycleOrderProductVOList, RecycleOrderProduct.class); + this.recycleOrderProductService.updateOrderProducts(recycleOrderProducts); + + // 给散户加余额 todo } diff --git a/nxhs-service/src/main/resources/mapper/RecycleOrderProductMapper.xml b/nxhs-service/src/main/resources/mapper/RecycleOrderProductMapper.xml new file mode 100644 index 0000000..efd15e4 --- /dev/null +++ b/nxhs-service/src/main/resources/mapper/RecycleOrderProductMapper.xml @@ -0,0 +1,25 @@ + + + + + + + +