Explorar o código

售后费用添加接口实现

wangzhijun hai 6 días
pai
achega
a1bee22124

+ 35 - 0
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/AfterSaleOrderController.java

@@ -0,0 +1,35 @@
+package com.ylx.web.controller.massage;
+
+import com.ylx.common.annotation.Log;
+import com.ylx.common.core.domain.R;
+import com.ylx.common.enums.BusinessType;
+import com.ylx.massage.domain.dto.AfterSaleOrderFeeBatchDTO;
+import com.ylx.massage.service.IAfterSaleOrderFeeService;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@Slf4j
+@RestController
+@RequestMapping("/after/sale/order")
+public class AfterSaleOrderController {
+
+    @Resource
+    private IAfterSaleOrderFeeService afterSaleOrderFeeService;
+
+
+    @ApiOperation("批量添加售后费用")
+    @Log(title = "批量添加售后费用", businessType = BusinessType.INSERT)
+    @PostMapping("/fee/batch")
+    public R add(@Validated @RequestBody AfterSaleOrderFeeBatchDTO batchDTO) {
+        this.afterSaleOrderFeeService.batchSaveFees(batchDTO);
+        return R.ok();
+    }
+
+}

+ 4 - 14
nightFragrance-massage/src/main/java/com/ylx/massage/domain/AfterSaleOrderFee.java

@@ -1,15 +1,17 @@
 package com.ylx.massage.domain;
 
 import com.baomidou.mybatisplus.annotation.*;
+import com.ylx.common.core.domain.BaseEntity;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
+@EqualsAndHashCode(callSuper = true)
 @Data
-@TableName("after_sale_order")
-public class AfterSaleOrderFee implements Serializable {
+public class AfterSaleOrderFee extends BaseEntity {
 
     @TableId(type = IdType.ASSIGN_ID)
     private Long id;
@@ -29,16 +31,4 @@ public class AfterSaleOrderFee implements Serializable {
     /** 描述 */
     private String remark;
 
-    /**
-     * 创建时间
-     */
-    @TableField(fill = FieldFill.INSERT)
-    private LocalDateTime createTime;
-
-    /**
-     * 更新时间
-     */
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private LocalDateTime updateTime;
-
 }

+ 22 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/dto/AfterSaleOrderFeeBatchDTO.java

@@ -0,0 +1,22 @@
+package com.ylx.massage.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+@Data
+@ApiModel(description = "售后订单费用批量添加请求")
+public class AfterSaleOrderFeeBatchDTO {
+
+    @ApiModelProperty("售后单ID")
+    private Long afterSaleOrderId;
+
+    @NotEmpty(message = "费用明细不能为空")
+    @Valid // 开启嵌套校验
+    @ApiModelProperty("费用明细列表")
+    private List<AfterSaleOrderFeeDTO> feeList;
+}

+ 9 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/dto/AfterSaleOrderFeeDTO.java

@@ -4,15 +4,24 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Positive;
 import java.math.BigDecimal;
 
 @Data
 @ApiModel("售后费用详情dto")
 public class AfterSaleOrderFeeDTO {
 
+    @ApiModelProperty("费用ID(新增不传,更新传)")
+    private Long id;
+
+    @NotBlank(message = "费用类型不能为空")
     @ApiModelProperty("费用类型")
     private String type;
 
+    @NotNull(message = "金额不能为空")
+    @Positive(message = "金额必须大于0")
     @ApiModelProperty("金额")
     private BigDecimal fee;
 

+ 2 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/IAfterSaleOrderFeeService.java

@@ -2,6 +2,8 @@ package com.ylx.massage.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ylx.massage.domain.AfterSaleOrderFee;
+import com.ylx.massage.domain.dto.AfterSaleOrderFeeBatchDTO;
 
 public interface IAfterSaleOrderFeeService extends IService<AfterSaleOrderFee> {
+    void batchSaveFees(AfterSaleOrderFeeBatchDTO batchDTO);
 }

+ 61 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/AfterSaleOrderFeeServiceImpl.java

@@ -1,12 +1,23 @@
 package com.ylx.massage.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ylx.common.utils.DateUtils;
+import com.ylx.common.utils.SecurityUtils;
 import com.ylx.massage.domain.AfterSaleOrderFee;
+import com.ylx.massage.domain.dto.AfterSaleOrderFeeBatchDTO;
+import com.ylx.massage.domain.dto.AfterSaleOrderFeeDTO;
 import com.ylx.massage.mapper.AfterSaleOrderFeeMapper;
 import com.ylx.massage.service.IAfterSaleOrderFeeService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class AfterSaleOrderFeeServiceImpl extends ServiceImpl<AfterSaleOrderFeeMapper, AfterSaleOrderFee> implements IAfterSaleOrderFeeService {
@@ -14,4 +25,54 @@ public class AfterSaleOrderFeeServiceImpl extends ServiceImpl<AfterSaleOrderFeeM
     @Resource
     private AfterSaleOrderFeeMapper afterSaleOrderFeeMapper;
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void batchSaveFees(AfterSaleOrderFeeBatchDTO batchDTO) {
+        Long afterSaleOrderId = batchDTO.getAfterSaleOrderId();
+        List<AfterSaleOrderFeeDTO> feeList = batchDTO.getFeeList();
+
+        if (CollUtil.isEmpty(feeList)) {
+            return;
+        }
+
+        // 拆分:新增列表、更新列表
+        List<AfterSaleOrderFeeDTO> insertList = new ArrayList<>();
+        List<AfterSaleOrderFeeDTO> updateList = new ArrayList<>();
+
+        for (AfterSaleOrderFeeDTO dto : feeList) {
+            if (dto.getId() == null) {
+                insertList.add(dto);
+            } else {
+                updateList.add(dto);
+            }
+        }
+
+        // 1. 批量新增:无 ID 的
+        if (CollUtil.isNotEmpty(insertList)) {
+            List<AfterSaleOrderFee> insertEntities = insertList.stream()
+                    .map(dto -> {
+                        AfterSaleOrderFee entity = BeanUtil.copyProperties(dto, AfterSaleOrderFee.class);
+                        entity.setAfterSaleOrderId(afterSaleOrderId);
+                        entity.setCreateBy(SecurityUtils.getUsername());
+                        entity.setCreateTime(DateUtils.getNowDate());
+                        return entity;
+                    })
+                    .collect(Collectors.toList());
+            super.saveBatch(insertEntities);
+        }
+
+        // 2. 批量更新:有 ID 的
+        if (CollUtil.isNotEmpty(updateList)) {
+            List<AfterSaleOrderFee> updateEntities = updateList.stream()
+                    .map(dto -> {
+                        AfterSaleOrderFee entity = BeanUtil.copyProperties(dto, AfterSaleOrderFee.class);
+                        entity.setAfterSaleOrderId(afterSaleOrderId);
+                        entity.setUpdateBy(SecurityUtils.getUsername());
+                        entity.setUpdateTime(DateUtils.getNowDate());
+                        return entity;
+                    })
+                    .collect(Collectors.toList());
+            super.updateBatchById(updateEntities);
+        }
+    }
 }