package com.ylx.order.controller; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.ylx.common.core.domain.R; import com.ylx.common.core.domain.entity.SysDictData; import com.ylx.common.utils.DictUtils; import com.ylx.order.domain.dto.AfterSalesServiceDTO; import com.ylx.order.domain.vo.RefundCalculationVO; import com.ylx.order.domain.vo.RegulationConfigVO; import com.ylx.order.enums.AfterSaleServiceDictTypeEnum; import com.ylx.order.service.IAfterSalesServiceService; import com.ylx.order.service.RegulationService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Collections; import java.util.List; @RestController @RequestMapping("/order/after/sale") @Api(tags = {"订单售后模块"}) @Slf4j public class AfterSalesServiceController { @Resource private RegulationService regulationService; @Resource private IAfterSalesServiceService afterSalesServiceService; @PreAuthorize("@customerAuth.isCustomer()") @ApiOperation("客户端获取售后原因接口:退款=1, 取消订单=2") @GetMapping("/dict/{type}/reason") public R> getReasonList(@PathVariable("type") Integer type) { String dictType = AfterSaleServiceDictTypeEnum.getDictTypeByCode(type); if (ObjectUtil.isNull(dictType)) { return R.fail("无效的type类型参数"); } List reasonDictDataList = DictUtils.getSortedDictCache(dictType); if (CollUtil.isEmpty(reasonDictDataList)) { return R.ok(Collections.emptyList()); } List list = new ArrayList<>(reasonDictDataList.size()); for (SysDictData data : reasonDictDataList) { list.add(data.getDictValue()); } return R.ok(list); } @PreAuthorize("@customerAuth.isCustomer()") @ApiOperation("客户端用户提交退款") @PostMapping("/submit") public R submitAfterSale(@Validated @RequestBody AfterSalesServiceDTO dto) { this.afterSalesServiceService.submitAfterSale(dto); return R.ok(); } @PreAuthorize("@customerAuth.isCustomer()") @ApiOperation("客户端发起售后计算退款金额") @PostMapping("/calculate/refund") public R calculateRefund(@Validated @RequestBody AfterSalesServiceDTO dto) { RefundCalculationVO vo = this.afterSalesServiceService.calculateRefund(dto); return R.ok(vo); } @ApiOperation("根据商户履约状态获取退款描述") @GetMapping("/desc/list") public R> getDescList(Integer execStatus) { List list = this.regulationService.getDescListByExecStatus(execStatus); return R.ok(list); } }