diff --git a/nxhs-service/src/main/java/cc/yunxi/controller/HousingEstateController.java b/nxhs-service/src/main/java/cc/yunxi/controller/HousingEstateController.java index 013179d..cdea983 100644 --- a/nxhs-service/src/main/java/cc/yunxi/controller/HousingEstateController.java +++ b/nxhs-service/src/main/java/cc/yunxi/controller/HousingEstateController.java @@ -7,7 +7,6 @@ import cc.yunxi.common.utils.CommonUtil; import cc.yunxi.domain.dto.LocationDTO; import cc.yunxi.domain.po.HousingEstate; import cc.yunxi.domain.vo.housingestate.HousingEstateRespVO; -import cc.yunxi.domain.vo.recycleorder.RecycleOrderRespVO; import cc.yunxi.service.IHousingEstateService; import cn.hutool.core.util.ObjectUtil; import io.swagger.annotations.Api; @@ -15,14 +14,10 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; - -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import javax.validation.Valid; +import javax.validation.constraints.NotBlank; import java.math.BigDecimal; import java.util.List; @@ -57,6 +52,20 @@ public class HousingEstateController { return CommonResult.success(housingEstateRespVOList); } + + @ApiOperation("回收站下辖小区") + @GetMapping("/list-by-station") + public CommonResult> getHousingListByStation( + @NotBlank(message = "回收站id不能为空") @RequestParam("stationId") String stationId) { + List housingList = housingEstateService.getHousingListByStation(stationId); + List housingEstateRespVOList = BeanUtils.copyList(housingList, HousingEstateRespVO.class, (s,t) -> { + t.setLocation(new LocationDTO(s.getLongitude(), s.getLatitude())); +// t.setDistance(String.valueOf(new Double(s.getDistance()) / 1000)); + }); + return CommonResult.success(housingEstateRespVOList); + } + + @ApiOperation("小区详情") @GetMapping("/info") public CommonResult getNearbyHousing(String housingEstateId, LocationDTO location) { 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 45a8349..7d9ed23 100644 --- a/nxhs-service/src/main/java/cc/yunxi/controller/RecycleOrderController.java +++ b/nxhs-service/src/main/java/cc/yunxi/controller/RecycleOrderController.java @@ -12,8 +12,10 @@ import cc.yunxi.domain.dto.UserDTO; import cc.yunxi.domain.po.*; import cc.yunxi.domain.vo.clientaddress.ClientAddressSimpleVO; import cc.yunxi.domain.vo.priceproduct.ProductSimpleVO; -import cc.yunxi.domain.vo.recycleorder.*; import cc.yunxi.domain.query.RecycleOrderQuery; +import cc.yunxi.domain.vo.recycleorder.dzorder.DZRecycleOrderCreateVO; +import cc.yunxi.domain.vo.recycleorder.shorder.*; +import cc.yunxi.domain.vo.recycleorder.tmorder.TMRecycleOrderCreateVO; import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailResponseVO; import cc.yunxi.domain.vo.recycler.RecyclerSimpleVO; import cc.yunxi.enums.UserTypeEnum; @@ -25,10 +27,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; -import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -60,6 +60,9 @@ public class RecycleOrderController { @ApiOperation("分页查询回收订单") @PostMapping("/page") public CommonResult> queryOrderByPage(@RequestBody RecycleOrderQuery recycleOrderQuery) { + if (ObjectUtil.isEmpty(recycleOrderQuery.getOrderType())) { + throw new BizIllegalException("请确定要查询的订单类型"); + } // 1.解析用户上下文 UserDTO userDTO = UserContext.getUser(); recycleOrderQuery.setUserType(userDTO.getUserType()).setUserId(userDTO.getId()).setStationId(userDTO.getStationId()); @@ -74,7 +77,7 @@ public class RecycleOrderController { return CommonResult.success(recycleOrderPageVO); } - @ApiOperation("散户创建回收订单") + @ApiOperation("散户预约回收订单") @PostMapping("/create") @UserTypeAnnotation(UserTypeEnum.CLIENT) public CommonResult createOrder(@RequestBody RecycleOrderCreateVO orderCreateVO) { @@ -85,7 +88,30 @@ public class RecycleOrderController { } - @ApiOperation("回收订单详情") + @ApiOperation("定点回收订单") + @PostMapping("/create-by-housing") + @UserTypeAnnotation(UserTypeEnum.CLIENT) + public CommonResult createOrderByHousing(@RequestBody TMRecycleOrderCreateVO tmOrderCreateVO) { + UserDTO userDTO = UserContext.getUser(); + tmOrderCreateVO.setClientId(userDTO.getId()); + String orderId = recycleOrderService.createOrderByHousing(tmOrderCreateVO); + return CommonResult.success(orderId); + } + + + @ApiOperation("到站回收订单") + @PostMapping("/create-by-station") + @UserTypeAnnotation(UserTypeEnum.RECYCLER) + public CommonResult createOrderByStation(@RequestBody DZRecycleOrderCreateVO dzOrderCreateVO) { + UserDTO userDTO = UserContext.getUser(); + dzOrderCreateVO.setRecyclerId(userDTO.getId()); + String orderId = recycleOrderService.createOrderByStation(dzOrderCreateVO); + return CommonResult.success(orderId); + } + + + + @ApiOperation("回收订单详情") // todo @GetMapping("/info") public CommonResult findOrder(@RequestParam("orderId") String orderId, LocationDTO location) { RecycleOrder recycleOrder = recycleOrderService.getOrderById(orderId); @@ -116,7 +142,6 @@ public class RecycleOrderController { } - @ApiOperation("回收订单更新") @PostMapping("/update") @UserTypeAnnotation(UserTypeEnum.CLIENT) @@ -166,6 +191,19 @@ public class RecycleOrderController { return CommonResult.success(true); } + + @ApiOperation("确认完成定点订单") + @PostMapping("/complete-dz") + @UserTypeAnnotation(UserTypeEnum.RECYCLER) + public CommonResult completeTMOrder(@RequestBody RecycleOrderFinishVO orderCompleteVO) { + UserDTO userDTO = UserContext.getUser(); + orderCompleteVO.setStaffsId(userDTO.getId()); + recycleOrderService.finishOrder(orderCompleteVO); + return CommonResult.success(true); + } + + + /** * 组装订单关联信息 * @param orderRespVOList diff --git a/nxhs-service/src/main/java/cc/yunxi/controller/RecycleStationController.java b/nxhs-service/src/main/java/cc/yunxi/controller/RecycleStationController.java index 03a1755..9ca66b8 100644 --- a/nxhs-service/src/main/java/cc/yunxi/controller/RecycleStationController.java +++ b/nxhs-service/src/main/java/cc/yunxi/controller/RecycleStationController.java @@ -10,7 +10,6 @@ import cc.yunxi.domain.dto.LocationDTO; import cc.yunxi.domain.po.RecycleStation; import cc.yunxi.domain.query.RecycleStationQuery; import cc.yunxi.domain.vo.priceproduct.ProductRespVO; -import cc.yunxi.domain.vo.recycleorder.RecycleOrderRespVO; import cc.yunxi.domain.vo.recyclestation.RecycleStationRespVO; import cc.yunxi.service.IRecycleStationService; import cn.hutool.core.util.ObjectUtil; diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/po/ClientAddress.java b/nxhs-service/src/main/java/cc/yunxi/domain/po/ClientAddress.java index 7cd1974..d84f60f 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/po/ClientAddress.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/po/ClientAddress.java @@ -6,6 +6,7 @@ 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; @@ -17,8 +18,7 @@ import lombok.Setter; * @author ccongli * @since 2024-03-14 10:26:03 */ -@Getter -@Setter +@Data @TableName("nx_client_address") @ApiModel(value = "ClientAddress", description = "散户地址信息") public class ClientAddress { 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 2721225..608a190 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 @@ -79,7 +79,7 @@ public class RecycleOrder { @TableField("latitude") private String latitude; - @ApiModelProperty(value = "废品预估重量", required = true) + @ApiModelProperty(value = "废品预估重量") @TableField("predict_weight") private ProductWeightEnum predictWeight; @@ -135,6 +135,10 @@ public class RecycleOrder { @TableField("settle_time") private LocalDateTime settleTime; + @ApiModelProperty("小区id") + @TableField("housing_estate_id") + private String housingEstateId; + @ApiModelProperty("备注") @TableField("remark") private String remark; 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 index f6ef2e2..1d0c369 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleOrderProduct.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleOrderProduct.java @@ -10,6 +10,7 @@ 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; @@ -21,8 +22,7 @@ import lombok.Setter; * @author ccongli * @since 2024-03-09 09:29:28 */ -@Getter -@Setter +@Data @TableName("nx_recycle_order_product") @ApiModel(value = "RecycleOrderProduct对象", description = "回收订单-废品信息表") public class RecycleOrderProduct { diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleStationPrice.java b/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleStationPrice.java index 95a01a6..c272ccb 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleStationPrice.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/po/RecycleStationPrice.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; import lombok.Getter; import lombok.Setter; @@ -20,8 +21,7 @@ import java.util.Date; * @author ccongli * @since 2024-03-08 01:41:56 */ -@Getter -@Setter +@Data @TableName("nx_price_recycle") @ApiModel(value = "RecycleStationPrice", description = "回收站价目表") public class RecycleStationPrice { diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/query/RecycleOrderQuery.java b/nxhs-service/src/main/java/cc/yunxi/domain/query/RecycleOrderQuery.java index e0e9ebf..6067cd1 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/query/RecycleOrderQuery.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/query/RecycleOrderQuery.java @@ -4,6 +4,7 @@ import cc.yunxi.common.domain.PageQuery; import cc.yunxi.domain.dto.LocationDTO; import cc.yunxi.domain.po.RecycleOrder; import cc.yunxi.enums.OrderStatusEnum; +import cc.yunxi.enums.OrderTypeEnum; import cc.yunxi.enums.UserTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -23,6 +24,16 @@ public class RecycleOrderQuery extends PageQuery { @ApiModelProperty(value = "订单状态", required = false, example = "PENDING") private OrderStatusEnum status; + @ApiModelProperty(value = "订单类型", required = true, example = "SH_ORDER") + private OrderTypeEnum orderType; + + @ApiModelProperty(value = "小区ID", required = false, example = "520190202195480901") + private String housingEstateId; + + @ApiModelProperty(value = "散户手机号", required = false, example = "17802164218") + private String mobile; + + // 计算距离使用,不参与条件查询 @ApiModelProperty(value = "回收员当前位置", required = false) private LocationDTO location; diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/housingestate/HousingEstateRespVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/housingestate/HousingEstateRespVO.java index a828904..80baafa 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/vo/housingestate/HousingEstateRespVO.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/housingestate/HousingEstateRespVO.java @@ -11,7 +11,7 @@ import java.time.LocalDateTime; /** *

- * 小区信息表 + * 小区信息 *

* * @author ccongli diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/housingestate/HousingEstateSimpleVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/housingestate/HousingEstateSimpleVO.java new file mode 100644 index 0000000..1fde489 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/housingestate/HousingEstateSimpleVO.java @@ -0,0 +1,60 @@ +package cc.yunxi.domain.vo.housingestate; + +import cc.yunxi.domain.dto.LocationDTO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + *

+ * 小区信息 + *

+ * + * @author ccongli + * @since 2024-03-18 02:31:50 + */ +@Data +@ApiModel(value = "HousingEstate", description = "小区信息 Simple VO") +public class HousingEstateSimpleVO { + + @ApiModelProperty("主键id") + private String id; + + @ApiModelProperty("小区名") + private String name; + + @ApiModelProperty("小区详细地址") + private String address; + + @ApiModelProperty("位置信息") + private LocationDTO location; + + @ApiModelProperty("定点回收地址") + private String recycleAddress; + + @ApiModelProperty("定点回收时间起") + private String appointmentTimeStart; + + @ApiModelProperty("定点回收时间止") + private String appointmentTimeEnd; + + @ApiModelProperty("所属回收站id") + private String stationId; + +// @ApiModelProperty("有效标志(0-禁用,1-启用)") +// @TableField("enabled_mark") +// private Integer enabledMark; + + @ApiModelProperty("创建时间") + private LocalDateTime creatorTime; + + @ApiModelProperty("备注") + private String remark; + + + @ApiModelProperty("小区距离(km)") + private String distance; + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/dzorder/DZRecycleOrderCreateVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/dzorder/DZRecycleOrderCreateVO.java new file mode 100644 index 0000000..92aa036 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/dzorder/DZRecycleOrderCreateVO.java @@ -0,0 +1,31 @@ +package cc.yunxi.domain.vo.recycleorder.dzorder; + +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.util.List; + +@ApiModel(description = "到站回收订单- 到站下单 Request VO") +@Data +public class DZRecycleOrderCreateVO { + + @ApiModelProperty(value = "散户手机号", required = true, example = "17802164218") + private String clientMobile; + + @ApiModelProperty(value = "订单明细", required = true) + @NotNull(message = "订单明细未提交") + @Valid + private List orderDetails; + + @ApiModelProperty(value = "订单备注", required = false, example = "请尽快上门") + private String remark; + + @ApiModelProperty(value = "回收员id", hidden = true, example = "17802164218") + private String recyclerId; + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/dzorder/DZRecycleOrderRespVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/dzorder/DZRecycleOrderRespVO.java new file mode 100644 index 0000000..e398722 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/dzorder/DZRecycleOrderRespVO.java @@ -0,0 +1,63 @@ +package cc.yunxi.domain.vo.recycleorder.dzorder; + + +import cc.yunxi.domain.vo.housingestate.HousingEstateSimpleVO; +import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailResponseVO; +import cc.yunxi.domain.vo.recycler.RecyclerSimpleVO; +import cc.yunxi.enums.OrderStatusEnum; +import cc.yunxi.enums.OrderTypeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@ApiModel(description = "到站回收订单 Response VO") +@Data +public class DZRecycleOrderRespVO { + + @ApiModelProperty("主键id") + private String id; + + @ApiModelProperty("回收站id") + private String recycleStationId; + + @ApiModelProperty("订单编号") + private String orderNumber; + + @ApiModelProperty("订单类型") + private OrderTypeEnum orderType; + + @ApiModelProperty("订单金额(元)") + private BigDecimal orderAmount; + + @ApiModelProperty("订单状态") + private OrderStatusEnum orderStatus; + + @ApiModelProperty("散户id") + private String clientId; + + @ApiModelProperty("散户姓名") + private String clientName; + + @ApiModelProperty("散户手机号") + private String clientMobile; + + @ApiModelProperty("回收员id") + private String staffsId; + + @ApiModelProperty("回收员信息") + private RecyclerSimpleVO recyclerInfo; + + @ApiModelProperty("订单明细详情") + private List orderDetails; + + @ApiModelProperty("订单创建时间") + private LocalDateTime creatorTime; + + @ApiModelProperty("完成时间") + private LocalDateTime completeTime; + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderCancelVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/shorder/RecycleOrderCancelVO.java similarity index 91% rename from nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderCancelVO.java rename to nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/shorder/RecycleOrderCancelVO.java index 78431db..9fb3bf7 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderCancelVO.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/shorder/RecycleOrderCancelVO.java @@ -1,4 +1,4 @@ -package cc.yunxi.domain.vo.recycleorder; +package cc.yunxi.domain.vo.recycleorder.shorder; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; 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/shorder/RecycleOrderCreateVO.java similarity index 98% rename from nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderCreateVO.java rename to nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/shorder/RecycleOrderCreateVO.java index 8c5fcca..e894f6d 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/shorder/RecycleOrderCreateVO.java @@ -1,4 +1,4 @@ -package cc.yunxi.domain.vo.recycleorder; +package cc.yunxi.domain.vo.recycleorder.shorder; import cc.yunxi.domain.dto.LocationDTO; import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailCreateVO; 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/shorder/RecycleOrderFinishVO.java similarity index 95% rename from nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderFinishVO.java rename to nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/shorder/RecycleOrderFinishVO.java index b317d7a..f835ffd 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/shorder/RecycleOrderFinishVO.java @@ -1,4 +1,4 @@ -package cc.yunxi.domain.vo.recycleorder; +package cc.yunxi.domain.vo.recycleorder.shorder; import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailUpdateVO; diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderReachVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/shorder/RecycleOrderReachVO.java similarity index 94% rename from nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderReachVO.java rename to nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/shorder/RecycleOrderReachVO.java index b3fdc54..d7266c8 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderReachVO.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/shorder/RecycleOrderReachVO.java @@ -1,4 +1,4 @@ -package cc.yunxi.domain.vo.recycleorder; +package cc.yunxi.domain.vo.recycleorder.shorder; import cc.yunxi.domain.dto.LocationDTO; import io.swagger.annotations.ApiModel; diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderRespVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/shorder/RecycleOrderRespVO.java similarity index 98% rename from nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderRespVO.java rename to nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/shorder/RecycleOrderRespVO.java index 4657295..ff5fab5 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderRespVO.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/shorder/RecycleOrderRespVO.java @@ -1,4 +1,4 @@ -package cc.yunxi.domain.vo.recycleorder; +package cc.yunxi.domain.vo.recycleorder.shorder; import cc.yunxi.domain.dto.LocationDTO; import cc.yunxi.domain.vo.clientaddress.ClientAddressSimpleVO; diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderTakingVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/shorder/RecycleOrderTakingVO.java similarity index 91% rename from nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderTakingVO.java rename to nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/shorder/RecycleOrderTakingVO.java index 2f1c7c6..4241b8a 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderTakingVO.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/shorder/RecycleOrderTakingVO.java @@ -1,4 +1,4 @@ -package cc.yunxi.domain.vo.recycleorder; +package cc.yunxi.domain.vo.recycleorder.shorder; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; 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/shorder/RecycleOrderUpdateVO.java similarity index 96% rename from nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/RecycleOrderUpdateVO.java rename to nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/shorder/RecycleOrderUpdateVO.java index 6724cbe..21b3358 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/shorder/RecycleOrderUpdateVO.java @@ -1,4 +1,4 @@ -package cc.yunxi.domain.vo.recycleorder; +package cc.yunxi.domain.vo.recycleorder.shorder; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/tmorder/TMRecycleOrderCreateVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/tmorder/TMRecycleOrderCreateVO.java new file mode 100644 index 0000000..7a54511 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/tmorder/TMRecycleOrderCreateVO.java @@ -0,0 +1,32 @@ +package cc.yunxi.domain.vo.recycleorder.tmorder; + +import cc.yunxi.domain.dto.LocationDTO; +import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailCreateVO; +import cc.yunxi.enums.ProductWeightEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.Valid; +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 = "定点回收订单- 指定小区下单 Request VO") +@Data +public class TMRecycleOrderCreateVO { + + @ApiModelProperty(value = "散户id", hidden = true, example = "1763507031581421570") + private String clientId; + + @ApiModelProperty(value = "小区id", required = true, example = "520193382480351557") + @NotBlank(message = "小区id不能为空") + private String housingEstateId; + + + @ApiModelProperty(value = "备注", required = false, example = "请尽快上门") + private String remark; + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/tmorder/TMRecycleOrderRespVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/tmorder/TMRecycleOrderRespVO.java new file mode 100644 index 0000000..5dd4437 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/recycleorder/tmorder/TMRecycleOrderRespVO.java @@ -0,0 +1,68 @@ +package cc.yunxi.domain.vo.recycleorder.tmorder; + + +import cc.yunxi.domain.vo.clientaddress.ClientAddressSimpleVO; +import cc.yunxi.domain.vo.housingestate.HousingEstateSimpleVO; +import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailResponseVO; +import cc.yunxi.domain.vo.recycler.RecyclerSimpleVO; +import cc.yunxi.enums.OrderStatusEnum; +import cc.yunxi.enums.OrderTypeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@ApiModel(description = "定点回收订单 Response VO") +@Data +public class TMRecycleOrderRespVO { + + @ApiModelProperty("主键id") + private String id; + + @ApiModelProperty("回收站id") + private String recycleStationId; + + @ApiModelProperty("订单编号") + private String orderNumber; + + @ApiModelProperty("订单类型") + private OrderTypeEnum orderType; + + @ApiModelProperty("订单金额(元)") + private BigDecimal orderAmount; + + @ApiModelProperty("订单状态") + private OrderStatusEnum orderStatus; + + @ApiModelProperty("散户id") + private String clientId; + + @ApiModelProperty("散户姓名") + private String clientName; + + @ApiModelProperty("散户手机号") + private String clientMobile; + + @ApiModelProperty("回收员id") + private String staffsId; + + @ApiModelProperty("小区地址信息") + private HousingEstateSimpleVO housingInfo; + + @ApiModelProperty("回收员信息") + private RecyclerSimpleVO recyclerInfo; + + @ApiModelProperty("订单明细详情") + private List orderDetails; + + + @ApiModelProperty("创建时间") + private LocalDateTime creatorTime; + + @ApiModelProperty("完成时间") + private LocalDateTime completeTime; + +} 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 index b6f15d4..75eb2cc 100644 --- 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 @@ -11,7 +11,7 @@ import java.math.BigDecimal; import java.time.LocalDateTime; -@ApiModel(description = "回收订单更新明细 Request VO") +@ApiModel(description = "回收订单更新/结算明细 Request VO") @Data public class RecycleOrderDetailUpdateVO { @@ -28,10 +28,11 @@ public class RecycleOrderDetailUpdateVO { @DecimalMin(value = "0.00", message = "废品实际重量数值错误") private Double productActualWeight; + @ApiModelProperty(value = "当前回收单价", required = true, example = "100.00") +// @NotBlank(message = "当前回收单价不能为空") + @DecimalMin(value = "0.01", message = "当前回收单价数值错误") + private BigDecimal recoveryPrice; -// @ApiModelProperty(value = "实际回收单价", required = true, example = "100.00") -// @NotBlank(message = "实际回收单价不能为空") -// @DecimalMin(value = "0.01", message = "实际回收单价数值错误") @ApiModelProperty(value = "实际回收单价", hidden = true) private BigDecimal actualRecoveryPrice; diff --git a/nxhs-service/src/main/java/cc/yunxi/service/IClientService.java b/nxhs-service/src/main/java/cc/yunxi/service/IClientService.java index 239575f..86e2d8f 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/IClientService.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/IClientService.java @@ -48,12 +48,19 @@ public interface IClientService extends IService { Client getClientByOpenid(String openid); /** - * 根据keyId获取散户信息 + * 根据id或openId获取散户信息 * @param keyId * @return Client */ Client getClientByKeyId(String keyId); + /** + * 根据手机号获取散户信息 + * @param mobile + * @return Client + */ + Client getClientByMobile(String mobile); + /** * 根据手机号注册散户信息 * @param phoneNumber diff --git a/nxhs-service/src/main/java/cc/yunxi/service/IHousingEstateService.java b/nxhs-service/src/main/java/cc/yunxi/service/IHousingEstateService.java index 8c84fa0..a6dcfff 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/IHousingEstateService.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/IHousingEstateService.java @@ -26,6 +26,14 @@ public interface IHousingEstateService extends IService { List getNearbyHousingList(@Valid LocationDTO location); + /** + * 回收站下辖小区 + * @param stationId + * @return HousingEstate + */ + List getHousingListByStation(String stationId); + + /** * 小区详情 * @param housingEstateId 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 f642fbe..cb5ff69 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderService.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/IRecycleOrderService.java @@ -1,16 +1,14 @@ 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; -import cc.yunxi.domain.vo.recycleorder.*; +import cc.yunxi.domain.vo.recycleorder.dzorder.DZRecycleOrderCreateVO; +import cc.yunxi.domain.vo.recycleorder.shorder.*; +import cc.yunxi.domain.vo.recycleorder.tmorder.TMRecycleOrderCreateVO; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import javax.validation.Valid; -import java.util.List; /** *

@@ -38,13 +36,29 @@ public interface IRecycleOrderService extends IService { /** - * 订单创建 + * 散户预约回收订单 * @param orderCreateVO * @return 订单主键ID */ String createOrder(@Valid RecycleOrderCreateVO orderCreateVO); + /** + * 散户定点小区回收订单 + * @param tmOrderCreateVO + * @return 订单主键ID + */ + String createOrderByHousing(@Valid TMRecycleOrderCreateVO tmOrderCreateVO); + + + /** + * 散户到回收站回收订单 + * @param dzOrderCreateVO + * @return 订单主键ID + */ + String createOrderByStation(@Valid DZRecycleOrderCreateVO dzOrderCreateVO); + + /** * 编辑订单 * @param orderUpdateVO @@ -71,8 +85,9 @@ public interface IRecycleOrderService extends IService { */ void reachOrder(@Valid RecycleOrderReachVO orderReachVO); + /** - * 完成订单 + * 完成预约、定点订单 * @param orderFinishVO */ void finishOrder(@Valid RecycleOrderFinishVO orderFinishVO); diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/ClientServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/ClientServiceImpl.java index ea0b832..83e80f4 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/impl/ClientServiceImpl.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/ClientServiceImpl.java @@ -119,6 +119,17 @@ public class ClientServiceImpl extends ServiceImpl impleme return client; } + @Override + public Client getClientByMobile(String mobile) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Client::getMobilePhone, mobile); + Client client = this.getOne(wrapper); + if (client == null) { + throw new BizIllegalException("散户不存在"); + } + return client; + } + @Override @Transactional diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/HousingEstateServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/HousingEstateServiceImpl.java index e52f42b..5344826 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/impl/HousingEstateServiceImpl.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/HousingEstateServiceImpl.java @@ -1,5 +1,6 @@ package cc.yunxi.service.impl; +import cc.yunxi.common.domain.LambdaQueryWrapperX; import cc.yunxi.common.exception.BizIllegalException; import cc.yunxi.domain.dto.LocationDTO; import cc.yunxi.domain.po.HousingEstate; @@ -7,6 +8,7 @@ import cc.yunxi.domain.po.RecycleOrder; import cc.yunxi.mapper.HousingEstateMapper; import cc.yunxi.service.IHousingEstateService; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -36,6 +38,13 @@ public class HousingEstateServiceImpl extends ServiceImpl getHousingListByStation(String stationId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(HousingEstate::getStationId, stationId); + return this.list(wrapper); + } + @Override public HousingEstate getHousingInfo(String housingEstateId) { if (StrUtil.isEmpty(housingEstateId)) { 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 59e76e0..65acf57 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 @@ -1,14 +1,16 @@ package cc.yunxi.service.impl; +import cc.yunxi.common.domain.LambdaQueryWrapperX; import cc.yunxi.common.exception.BizIllegalException; -import cc.yunxi.common.exception.DbException; import cc.yunxi.common.exception.ForbiddenException; import cc.yunxi.common.utils.BeanUtils; import cc.yunxi.common.utils.CommonUtil; import cc.yunxi.domain.dto.LocationDTO; import cc.yunxi.domain.po.*; import cc.yunxi.domain.query.RecycleOrderQuery; -import cc.yunxi.domain.vo.recycleorder.*; +import cc.yunxi.domain.vo.recycleorder.dzorder.DZRecycleOrderCreateVO; +import cc.yunxi.domain.vo.recycleorder.shorder.*; +import cc.yunxi.domain.vo.recycleorder.tmorder.TMRecycleOrderCreateVO; import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailCreateVO; import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailUpdateVO; import cc.yunxi.enums.*; @@ -16,7 +18,6 @@ import cc.yunxi.mapper.RecycleOrderMapper; import cc.yunxi.service.*; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; @@ -55,29 +56,49 @@ public class RecycleOrderServiceImpl extends ServiceImpl queryOrderByPage(RecycleOrderQuery recycleOrderQuery) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + LambdaQueryWrapperX wrapper = new LambdaQueryWrapperX<>(); + // 订单类型首要条件 + wrapper.eq(RecycleOrder::getOrderType, recycleOrderQuery.getOrderType()); if (recycleOrderQuery.getUserType().equals(UserTypeEnum.CLIENT)) { // 散户查询 wrapper.eq(RecycleOrder::getClientId, recycleOrderQuery.getUserId()); - wrapper.eq(ObjectUtil.isNotEmpty(recycleOrderQuery.getStatus()), RecycleOrder::getOrderStatus, recycleOrderQuery.getStatus()); + wrapper.eqIfPresent(RecycleOrder::getOrderStatus, recycleOrderQuery.getStatus()); } else { // 回收员查询 if (StrUtil.isEmpty(recycleOrderQuery.getStationId())) { throw new ForbiddenException("请先联系管理员绑定回收站点!"); } // 只查回收员所在回收站下的订单 wrapper.eq(RecycleOrder::getRecycleStationId, recycleOrderQuery.getStationId()); - // 不为待接单状态时, 只查自己的订单 - if (!OrderStatusEnum.PENDING.equals(recycleOrderQuery.getStatus())) { - wrapper.eq(RecycleOrder::getStaffsId, recycleOrderQuery.getUserId()); - } - // 订单状态查询 - if (OrderStatusEnum.UNPROCESSED.equals(recycleOrderQuery.getStatus())) { // 进行中 - wrapper.in(RecycleOrder::getOrderStatus, OrderStatusEnum.UNPROCESSED.getCode(), OrderStatusEnum.RECYCLING.getCode()); - } else { - wrapper.eq(RecycleOrder::getOrderStatus, recycleOrderQuery.getStatus()); + switch (recycleOrderQuery.getOrderType()) { + case SH_ORDER: + // 不为待接单状态时, 只查自己的订单 + if (!OrderStatusEnum.PENDING.equals(recycleOrderQuery.getStatus())) { + wrapper.eq(RecycleOrder::getStaffsId, recycleOrderQuery.getUserId()); + } + // 订单状态查询 + if (OrderStatusEnum.UNPROCESSED.equals(recycleOrderQuery.getStatus())) { // 进行中 + wrapper.in(RecycleOrder::getOrderStatus, OrderStatusEnum.UNPROCESSED.getCode(), OrderStatusEnum.RECYCLING.getCode()); + } else { + wrapper.eq(RecycleOrder::getOrderStatus, recycleOrderQuery.getStatus()); + } + break; + case TM_RECOVERY: + // 根据小区id查询 + wrapper.eq(RecycleOrder::getHousingEstateId, recycleOrderQuery.getHousingEstateId()); + // 散户手机号查询 + wrapper.likeIfPresent(RecycleOrder::getClientMobile, recycleOrderQuery.getMobile()); + break; + case DZ_RECOVERY: + // 散户手机号查询 + wrapper.likeIfPresent(RecycleOrder::getClientMobile, recycleOrderQuery.getMobile()); + break; } } - wrapper.eq(StrUtil.isNotEmpty(recycleOrderQuery.getId()), RecycleOrder::getId, recycleOrderQuery.getId()); + // 订单id查询 + wrapper.eqIfPresent(RecycleOrder::getId, recycleOrderQuery.getId()); // 默认按创建时间倒序、已完成则按结算时间倒序 if (OrderStatusEnum.FINISHED.equals(recycleOrderQuery.getStatus())) { recycleOrderQuery.addOrderItem(RecycleOrder::getCompleteTime, false); @@ -105,9 +126,6 @@ public class RecycleOrderServiceImpl extends ServiceImpl { target.setLatitude(source.getLocation().getLatitude()); @@ -130,7 +149,7 @@ public class RecycleOrderServiceImpl extends ServiceImpl recycleOrderProductVOList = orderCreateVO.getOrderDetails(); recycleOrderProductVOList.forEach(rp -> { rp.setRecycleOrderId(orderId); - rp.setCreatorTime(LocalDateTime.now()); + rp.setCreatorTime(now); }); List recycleOrderProducts = BeanUtils.copyList(recycleOrderProductVOList, RecycleOrderProduct.class); this.recycleOrderProductService.createOrderProducts(recycleOrderProducts); @@ -147,6 +166,86 @@ public class RecycleOrderServiceImpl extends ServiceImpl recycleOrderProductVOList = dzOrderCreateVO.getOrderDetails(); + List recycleOrderProducts = BeanUtils.copyList(recycleOrderProductVOList, RecycleOrderProduct.class); + recycleOrderProducts.forEach(rp -> { + rp.setRecycleOrderId(orderId); + rp.setCreatorTime(now); + rp.setUpdateTime(now); + PriceProduct latestPriceProduct = this.recycleOrderProductService.getLatestPriceProduct(rp.getProductId()); + log.info("latest price product: {}", latestPriceProduct); + if (ObjectUtil.isEmpty(latestPriceProduct)) { + throw new BizIllegalException("产品价格信息未公布,请联系商户!"); + } + BigDecimal recoveryPrice = Optional.ofNullable(latestPriceProduct.getRecoveryPrice()).orElse(new BigDecimal("0.00")); + rp.setActualRecoveryPrice(recoveryPrice); + }); + this.recycleOrderProductService.createOrderProducts(recycleOrderProducts); + + // 订单结算 + BigDecimal totalAmount = new BigDecimal("0.00"); + for (RecycleOrderProduct recycleOrderProduct : recycleOrderProducts) { + BigDecimal weight = BigDecimal.valueOf(recycleOrderProduct.getProductActualWeight()); + BigDecimal price = recycleOrderProduct.getActualRecoveryPrice(); + totalAmount = totalAmount.add(weight.multiply(price)); + } + recycleOrder.setOrderAmount(totalAmount); + this.updateById(recycleOrder); + + // 增加收入余额 异步? todo + clientService.addBalance(client.getId(), totalAmount, orderNo, recycler.getStationId()); + return orderId; + } + @Override @Transactional(rollbackFor = Exception.class) @@ -233,7 +332,6 @@ public class RecycleOrderServiceImpl extends ServiceImpl recycleOrderProductVOList = orderFinishVO.getOrderDetails(); recycleOrderProductVOList.forEach(rp -> { @@ -280,6 +378,8 @@ public class RecycleOrderServiceImpl extends ServiceImpl