package cn.lili.controller.order; import cn.lili.common.aop.annotation.PreventDuplicateSubmissions; import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.OperationalJudgment; import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.aftersale.entity.dos.AfterSaleLog; import cn.lili.modules.order.aftersale.entity.dos.AfterSaleReason; import cn.lili.modules.order.aftersale.entity.dto.AfterSaleDTO; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleApplyVO; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO; import cn.lili.modules.order.aftersale.service.AfterSaleLogService; import cn.lili.modules.order.aftersale.service.AfterSaleReasonService; import cn.lili.modules.order.aftersale.service.AfterSaleService; import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import cn.lili.utils.COSUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; import javax.validation.constraints.NotNull; import java.util.Date; import java.util.List; /** * 买家端,售后管理接口 * * @author Chopper * @since 2020/11/16 10:02 下午 */ @RestController @Api(tags = "买家端,售后管理接口") @RequestMapping("/buyer/order/afterSale") public class AfterSaleBuyerController { /** * 售后 */ @Autowired private AfterSaleService afterSaleService; /** * 售后原因 */ @Autowired private AfterSaleReasonService afterSaleReasonService; /** * 售后日志 */ @Autowired private AfterSaleLogService afterSaleLogService; @Autowired private COSUtil cosUtil; @ApiOperation(value = "查看售后服务详情") @ApiImplicitParam(name = "sn", value = "售后单号", required = true, paramType = "path") @GetMapping(value = "/get/{sn}") public ResultMessage get(@NotNull(message = "售后单号") @PathVariable("sn") String sn) { AfterSaleVO afterSale = OperationalJudgment.judgment(afterSaleService.getAfterSale(sn)); return ResultUtil.data(afterSale); } @ApiOperation(value = "分页获取售后服务") @GetMapping(value = "/page") public ResultMessage> getByPage(AfterSaleSearchParams searchParams) { IPage afterSalePages = afterSaleService.getAfterSalePages(searchParams); afterSalePages.getRecords().forEach(item->{ String goodsImage = item.getGoodsImage(); if (StringUtils.isNotBlank(goodsImage)&&!goodsImage.contains("http")) { item.setGoodsImage(cosUtil.getPreviewUrl(goodsImage)); } }); return ResultUtil.data(afterSalePages); } @ApiOperation(value = "获取申请售后页面信息") @ApiImplicitParams({ @ApiImplicitParam(name = "sn", value = "订单货物编号", required = true, dataType = "String", paramType = "path") }) @GetMapping(value = "/applyAfterSaleInfo/{sn}") public ResultMessage applyAfterSaleInfo(@PathVariable String sn) { return ResultUtil.data(afterSaleService.getAfterSaleVO(sn)); } @PreventDuplicateSubmissions @PostMapping(value = "/save/{orderItemSn}") @ApiImplicitParam(name = "orderItemSn", value = "订单货物编号", required = true, paramType = "query") @ApiOperation(value = "申请售后") public ResultMessage save(AfterSaleDTO afterSaleDTO) { return ResultUtil.data(afterSaleService.saveAfterSale(afterSaleDTO)); } @ApiOperation(value = "买家 退回 物流信息") @ApiImplicitParams({ @ApiImplicitParam(name = "afterSaleSn", value = "售后sn", required = true, dataType = "String", paramType = "path"), @ApiImplicitParam(name = "logisticsNo", value = "发货单号", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "logisticsId", value = "物流公司id", required = true, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "mDeliverTime", value = "买家发货时间", required = true, dataType = "date", paramType = "query") }) @PostMapping(value = "/delivery/{afterSaleSn}") public ResultMessage delivery(@NotNull(message = "售后编号不能为空") @PathVariable("afterSaleSn") String afterSaleSn, @NotNull(message = "发货单号不能为空") @RequestParam String logisticsNo, @NotNull(message = "请选择物流公司") @RequestParam String logisticsId, @NotNull(message = "请选择发货时间") @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date mDeliverTime) { return ResultUtil.data(afterSaleService.buyerDelivery(afterSaleSn, logisticsNo, logisticsId, mDeliverTime)); } @PreventDuplicateSubmissions @ApiOperation(value = "售后,取消售后") @ApiImplicitParams({ @ApiImplicitParam(name = "afterSaleSn", value = "售后sn", required = true, dataType = "String", paramType = "path") }) @PostMapping(value = "/cancel/{afterSaleSn}") public ResultMessage cancel(@NotNull(message = "参数非法") @PathVariable("afterSaleSn") String afterSaleSn) { return ResultUtil.data(afterSaleService.cancel(afterSaleSn)); } @ApiOperation(value = "获取商家售后收件地址") @ApiImplicitParam(name = "sn", value = "售后单号", required = true, paramType = "path") @GetMapping(value = "/getStoreAfterSaleAddress/{sn}") public ResultMessage getStoreAfterSaleAddress(@NotNull(message = "售后单号") @PathVariable("sn") String sn) { return ResultUtil.data(afterSaleService.getStoreAfterSaleAddressDTO(sn)); } @ApiOperation(value = "获取售后原因") @ApiImplicitParam(name = "serviceType", value = "售后类型", required = true, paramType = "path", allowableValues = "CANCEL,RETURN_GOODS,RETURN_MONEY,COMPLAIN") @GetMapping(value = "/get/afterSaleReason/{serviceType}") public ResultMessage> getAfterSaleReason(@PathVariable String serviceType) { return ResultUtil.data(afterSaleReasonService.afterSaleReasonList(serviceType)); } @ApiOperation(value = "获取售后日志") @ApiImplicitParam(name = "sn", value = "售后编号", required = true, paramType = "path") @GetMapping(value = "/get/getAfterSaleLog/{sn}") public ResultMessage> getAfterSaleLog(@PathVariable String sn) { return ResultUtil.data(afterSaleLogService.getAfterSaleLog(sn)); } }