package com.mzl.flower.web.customer; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mzl.flower.base.BaseController; import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; import com.mzl.flower.dto.PriceDTO; import com.mzl.flower.dto.request.flower.*; import com.mzl.flower.dto.request.payment.CartCommitDTO; import com.mzl.flower.dto.request.payment.CartDeleteDTO; import com.mzl.flower.dto.request.payment.CartSaveDTO; import com.mzl.flower.dto.request.payment.OrderCommitDTO; import com.mzl.flower.dto.request.transport.TransportGetDTO; import com.mzl.flower.dto.response.flower.*; import com.mzl.flower.dto.response.payment.PreOrderDTO; import com.mzl.flower.dto.response.transport.TransportOrderDTO; import com.mzl.flower.service.flower.FlowerCategoryService; import com.mzl.flower.service.flower.FlowerParamService; import com.mzl.flower.service.flower.FlowerService; import com.mzl.flower.service.payment.OrderService; import com.mzl.flower.service.transport.TransportService; import com.wechat.pay.java.service.payments.jsapi.model.PrepayResponse; import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.ValidationException; import javax.validation.constraints.NotBlank; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("/api/customer/flower") @Api(value = "交易大厅-花店", tags = "交易大厅-花店") @Validated @Slf4j public class FlowerCustomerController extends BaseController { @Autowired private FlowerService flowerService; @Autowired private FlowerParamService paramService; @Autowired private FlowerCategoryService categoryService; @Autowired private OrderService orderService; @Autowired private TransportService transportService; @GetMapping("/category/tree") @ApiOperation(value = "获取商品分类树") public ResponseEntity>> selectCategoryTree(FlowerCategoryQueryDTO dto){ return returnData(R.SUCCESS.getCode(), categoryService.selectCustomerCategoryTree(dto)); } @GetMapping("/category/tree/view") @ApiOperation(value = "查询商品分类详情") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "商品分类id", required = true, dataType = "String", paramType = "query") }) public ResponseEntity> getCategoryShow(@NotBlank(message = "id不能为空") String id){ return returnData(R.SUCCESS.getCode(), categoryService.getCategoryShow(id)); } @GetMapping("/params") @ApiOperation(value = "获取分类参数列表") @ApiImplicitParams({ @ApiImplicitParam(name = "categoryId", value = "商品分类id", required = true, dataType = "Long", paramType = "query") }) public ResponseEntity>> getParamItemListByCategoryId(Long categoryId){ return returnData(R.SUCCESS.getCode(), paramService.getParamItemListByCategoryId(categoryId)); } @PostMapping("/list") @ApiOperation(value = "商品列表") public ResponseEntity>> selectShowFlowerList(@RequestBody FlowerShowQueryDTO dto){ Page page = new Page(dto.getCurrent(), dto.getSize()); return returnData(R.SUCCESS.getCode(), flowerService.selectShowFlowerList(page, dto)); } @GetMapping("/list/view") @ApiOperation(value = "商品详情") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "商品id", required = true, dataType = "Long", paramType = "query"), @ApiImplicitParam(name = "partnerId", value = "合伙人id", required = true, dataType = "Long", paramType = "query"), }) public ResponseEntity> getShowFlowerDetail(Long id, Long partnerId) { return returnData(R.SUCCESS.getCode(), flowerService.getShowFlowerDetail(id, partnerId)); } @GetMapping("/up/stock") @ApiOperation(value = "在售商品数量") public ResponseEntity> getUpFlowerStock() { return returnData(R.SUCCESS.getCode(), flowerService.getUpFlowerStock()); } @PostMapping("/cart/change-num") @ApiOperation(value = "添加/编辑购物车商品(如果已存在,进行增量的更新)") public ResponseEntity> changeFlower2Cart(@RequestBody CartSaveDTO dto){ orderService.changeFlower2Cart(dto); return returnData(R.SUCCESS.getCode(), null); } @PostMapping("/cart/save") @ApiOperation(value = "添加/编辑购物车商品") public ResponseEntity> saveFlower2Cart(@RequestBody CartSaveDTO dto){ orderService.saveFlower2Cart(dto); return returnData(R.SUCCESS.getCode(), null); } @GetMapping("/cart/delete") @ApiOperation(value = "删除购物车商品") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "商品id", required = true, dataType = "Long", paramType = "query") }) public ResponseEntity> deleteFlower4Cart(Long id){ orderService.deleteFlower4Cart(id); return returnData(R.SUCCESS.getCode(), null); } @PostMapping("/cart/delete/batch") @ApiOperation(value = "批量删除购物车商品") public ResponseEntity> deleteBatchFlower4Cart(CartDeleteDTO dto){ if(dto == null || CollectionUtils.isEmpty(dto.getIds())){ throw new ValidationException("ids不能为空"); } orderService.deleteBatchFlower4Cart(dto.getIds()); return returnData(R.SUCCESS.getCode(), null); } @GetMapping("/cart/list") @ApiOperation(value = "查询购物车商品") public ResponseEntity>> getFlowerCartList(){ return returnData(R.SUCCESS.getCode(), orderService.getFlowerCartList()); } @GetMapping("/cart/flower/count") @ApiOperation(value = "获取购物车商品数量") public ResponseEntity> getCartFlowerCount(String flowerId){ return returnData(R.SUCCESS.getCode(), orderService.getCartFlowerCount(flowerId)); } @PostMapping("/order/confirm/info") @ApiOperation(value = "订单确认信息(购物车选择商品和数量后提交调用)") public ResponseEntity> getPreOrderInfo(@RequestBody CartCommitDTO dto){ return returnData(R.SUCCESS.getCode(), orderService.getPreOrderInfo(dto.getFlowers())); } @PostMapping("/order/confirm/transports") @ApiOperation(value = "订单确认信息页面-获取物流") public ResponseEntity>> getPreOrderTransportList(@RequestBody TransportGetDTO dto){ return returnData(R.SUCCESS.getCode(), transportService.getPreOrderTransportList(dto.getAddressId(), dto.getWeight())); } @PostMapping("/order/commit") @ApiOperation(value = "提交订单") public ResponseEntity> commitOrder(@RequestBody OrderCommitDTO dto){ Map priceMap = new HashMap<>(); PreOrderDTO p = orderService.processPreOrderInfo(dto.getFlowers(), priceMap); Map map; try { map = orderService.commitOrder(dto, p, priceMap); } catch (ValidationException e) { orderService.revertFlowerStock(dto.getFlowers()); throw e; } catch (Exception e) { orderService.revertFlowerStock(dto.getFlowers()); throw e; } return returnData(R.SUCCESS.getCode(), map); } }