Sfoglia il codice sorgente

申诉功能完成一半

Huanyi 2 settimane fa
parent
commit
36ef00533e

+ 99 - 0
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/controller/SysSubOrderAppealController.java

@@ -0,0 +1,99 @@
+package org.dromara.order.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.order.domain.vo.SysSubOrderAppealVo;
+import org.dromara.order.domain.bo.SysSubOrderAppealBo;
+import org.dromara.order.service.ISysSubOrderAppealService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 子订单申诉
+ * 前端访问路由地址为:/order/subOrderAppeal
+ *
+ * @author Huanyi
+ * @date 2026-03-31
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/subOrderAppeal")
+public class SysSubOrderAppealController extends BaseController {
+
+    private final ISysSubOrderAppealService sysSubOrderAppealService;
+
+    /**
+     * 查询子订单申诉列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo<SysSubOrderAppealVo> list(SysSubOrderAppealBo bo, PageQuery pageQuery) {
+        return sysSubOrderAppealService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出子订单申诉列表
+     */
+    @Log(title = "子订单申诉", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(SysSubOrderAppealBo bo, HttpServletResponse response) {
+        List<SysSubOrderAppealVo> list = sysSubOrderAppealService.queryList(bo);
+        ExcelUtil.exportExcel(list, "子订单申诉", SysSubOrderAppealVo.class, response);
+    }
+
+    /**
+     * 获取子订单申诉详细信息
+     *
+     * @param id 主键
+     */
+    @GetMapping("/{id}")
+    public R<SysSubOrderAppealVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(sysSubOrderAppealService.queryById(id));
+    }
+
+    /**
+     * 新增子订单申诉
+     */
+    @Log(title = "子订单申诉", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody SysSubOrderAppealBo bo) {
+        return toAjax(sysSubOrderAppealService.insertByBo(bo));
+    }
+
+    /**
+     * 修改子订单申诉
+     */
+    @Log(title = "子订单申诉", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysSubOrderAppealBo bo) {
+        return toAjax(sysSubOrderAppealService.updateByBo(bo));
+    }
+
+    /**
+     * 删除子订单申诉
+     *
+     * @param ids 主键串
+     */
+    @Log(title = "子订单申诉", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(sysSubOrderAppealService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 5 - 0
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/domain/SysSubOrder.java

@@ -170,4 +170,9 @@ public class SysSubOrder extends TenantEntity {
      */
     private Long orderCommission;
 
+    /**
+     * 是否可以服务
+     */
+    private Boolean serviceFlag;
+
 }

+ 61 - 0
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/domain/SysSubOrderAppeal.java

@@ -0,0 +1,61 @@
+package org.dromara.order.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 子订单申诉对象 sys_sub_order_appeal
+ *
+ * @author Huanyi
+ * @date 2026-03-31
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("sys_sub_order_appeal")
+public class SysSubOrderAppeal extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 序号
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 所属订单
+     */
+    private Long orderId;
+
+    /**
+     * 实际服务
+     */
+    private Long service;
+
+    /**
+     * 图片
+     */
+    private String photos;
+
+    /**
+     * 履约佣金
+     */
+    private Long fulfillmentCommission;
+
+    /**
+     * 申诉理由
+     */
+    private String reason;
+
+    /**
+     * 删除标志(0代表存在 1代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+}

+ 57 - 0
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/domain/bo/SysSubOrderAppealBo.java

@@ -0,0 +1,57 @@
+package org.dromara.order.domain.bo;
+
+import org.dromara.order.domain.SysSubOrderAppeal;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 子订单申诉业务对象 sys_sub_order_appeal
+ *
+ * @author Huanyi
+ * @date 2026-03-31
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = SysSubOrderAppeal.class, reverseConvertGenerate = false)
+public class SysSubOrderAppealBo extends BaseEntity {
+
+    /**
+     * 序号
+     */
+    @NotNull(message = "序号不能为空", groups = { EditGroup.class })
+    private Long id;
+
+    /**
+     * 所属订单
+     */
+    @NotNull(message = "所属订单不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long orderId;
+
+    /**
+     * 实际服务
+     */
+    @NotNull(message = "实际服务不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long service;
+
+    /**
+     * 图片
+     */
+    private String photos;
+
+    /**
+     * 履约佣金
+     */
+    @NotNull(message = "履约佣金不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long fulfillmentCommission;
+
+    /**
+     * 申诉理由
+     */
+    private String reason;
+
+}

+ 68 - 0
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/domain/vo/SysSubOrderAppealVo.java

@@ -0,0 +1,68 @@
+package org.dromara.order.domain.vo;
+
+import org.dromara.order.domain.SysSubOrderAppeal;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 子订单申诉视图对象 sys_sub_order_appeal
+ *
+ * @author Huanyi
+ * @date 2026-03-31
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = SysSubOrderAppeal.class)
+public class SysSubOrderAppealVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 序号
+     */
+    @ExcelProperty(value = "序号")
+    private Long id;
+
+    /**
+     * 所属订单
+     */
+    @ExcelProperty(value = "所属订单")
+    private Long orderId;
+
+    /**
+     * 实际服务
+     */
+    @ExcelProperty(value = "实际服务")
+    private Long service;
+
+    /**
+     * 图片
+     */
+    @ExcelProperty(value = "图片")
+    private String photos;
+
+    /**
+     * 履约佣金
+     */
+    @ExcelProperty(value = "履约佣金")
+    private Long fulfillmentCommission;
+
+    /**
+     * 申诉理由
+     */
+    @ExcelProperty(value = "申诉理由")
+    private String reason;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+}

+ 5 - 0
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/domain/vo/SysSubOrderListOnMyOrderPageVo.java

@@ -56,4 +56,9 @@ public class SysSubOrderListOnMyOrderPageVo implements Serializable {
 
     private Integer status;
 
+    /**
+     * 是否可以服务
+     */
+    private Boolean serviceFlag;
+
 }

+ 15 - 0
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/mapper/SysSubOrderAppealMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.order.mapper;
+
+import org.dromara.order.domain.SysSubOrderAppeal;
+import org.dromara.order.domain.vo.SysSubOrderAppealVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 子订单申诉Mapper接口
+ *
+ * @author Huanyi
+ * @date 2026-03-31
+ */
+public interface SysSubOrderAppealMapper extends BaseMapperPlus<SysSubOrderAppeal, SysSubOrderAppealVo> {
+
+}

+ 48 - 0
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/service/ISysSubOrderAppealService.java

@@ -0,0 +1,48 @@
+package org.dromara.order.service;
+
+import org.dromara.order.domain.vo.SysSubOrderAppealVo;
+import org.dromara.order.domain.bo.SysSubOrderAppealBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 子订单申诉Service接口
+ *
+ * @author Huanyi
+ * @date 2026-03-31
+ */
+public interface ISysSubOrderAppealService {
+
+    /**
+     * 查询子订单申诉
+     */
+    SysSubOrderAppealVo queryById(Long id);
+
+    /**
+     * 查询子订单申诉列表
+     */
+    TableDataInfo<SysSubOrderAppealVo> queryPageList(SysSubOrderAppealBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询子订单申诉列表
+     */
+    List<SysSubOrderAppealVo> queryList(SysSubOrderAppealBo bo);
+
+    /**
+     * 新增子订单申诉
+     */
+    Boolean insertByBo(SysSubOrderAppealBo bo);
+
+    /**
+     * 修改子订单申诉
+     */
+    Boolean updateByBo(SysSubOrderAppealBo bo);
+
+    /**
+     * 校验并批量删除子订单申诉信息
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 130 - 0
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/service/impl/SysSubOrderAppealServiceImpl.java

@@ -0,0 +1,130 @@
+package org.dromara.order.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.dromara.order.domain.SysSubOrder;
+import org.dromara.order.mapper.SysSubOrderMapper;
+import org.springframework.stereotype.Service;
+import org.dromara.order.domain.bo.SysSubOrderAppealBo;
+import org.dromara.order.domain.vo.SysSubOrderAppealVo;
+import org.dromara.order.domain.SysSubOrderAppeal;
+import org.dromara.order.mapper.SysSubOrderAppealMapper;
+import org.dromara.order.service.ISysSubOrderAppealService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 子订单申诉Service业务层处理
+ *
+ * @author Huanyi
+ * @date 2026-03-31
+ */
+@RequiredArgsConstructor
+@Service
+public class SysSubOrderAppealServiceImpl implements ISysSubOrderAppealService {
+
+    private final SysSubOrderAppealMapper baseMapper;
+    private final SysSubOrderMapper subOrderMapper;
+
+    /**
+     * 查询子订单申诉
+     */
+    @Override
+    public SysSubOrderAppealVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 查询子订单申诉列表
+     */
+    @Override
+    public TableDataInfo<SysSubOrderAppealVo> queryPageList(SysSubOrderAppealBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<SysSubOrderAppeal> lqw = buildQueryWrapper(bo);
+        Page<SysSubOrderAppealVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询子订单申诉列表
+     */
+    @Override
+    public List<SysSubOrderAppealVo> queryList(SysSubOrderAppealBo bo) {
+        LambdaQueryWrapper<SysSubOrderAppeal> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<SysSubOrderAppeal> buildQueryWrapper(SysSubOrderAppealBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<SysSubOrderAppeal> lqw = Wrappers.lambdaQuery();
+        lqw.orderByDesc(SysSubOrderAppeal::getId);
+        lqw.eq(bo.getOrderId() != null, SysSubOrderAppeal::getOrderId, bo.getOrderId());
+        lqw.eq(bo.getService() != null, SysSubOrderAppeal::getService, bo.getService());
+        lqw.eq(StringUtils.isNotBlank(bo.getPhotos()), SysSubOrderAppeal::getPhotos, bo.getPhotos());
+        lqw.eq(bo.getFulfillmentCommission() != null, SysSubOrderAppeal::getFulfillmentCommission, bo.getFulfillmentCommission());
+        lqw.eq(StringUtils.isNotBlank(bo.getReason()), SysSubOrderAppeal::getReason, bo.getReason());
+        return lqw;
+    }
+
+    /**
+     * 新增子订单申诉
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Boolean insertByBo(SysSubOrderAppealBo bo) {
+        SysSubOrderAppeal add = MapstructUtils.convert(bo, SysSubOrderAppeal.class);
+        validEntityBeforeSave(add);
+
+        SysSubOrder subOrder = subOrderMapper.selectById(bo.getOrderId());
+
+        add.setTenantId(subOrder.getTenantId());
+        boolean appealFlag = baseMapper.insert(add) == 0;
+        if (appealFlag) {
+            throw new RuntimeException("新增申诉项失败");
+        }
+
+        subOrder.setServiceFlag(false);
+        boolean orderFlag = subOrderMapper.updateById(subOrder) == 0;
+        if (orderFlag) {
+            throw new RuntimeException("订单状态修改失败");
+        }
+
+        return true;
+    }
+
+    /**
+     * 修改子订单申诉
+     */
+    @Override
+    public Boolean updateByBo(SysSubOrderAppealBo bo) {
+        SysSubOrderAppeal update = MapstructUtils.convert(bo, SysSubOrderAppeal.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(SysSubOrderAppeal entity){
+        // TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 批量删除子订单申诉
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            // TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 1 - 0
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/service/impl/SysSubOrderServiceImpl.java

@@ -564,6 +564,7 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
             vo.setToAddress(e.getToAddress());
             vo.setRemark(e.getRemark());
             vo.setStatus(e.getStatus());
+            vo.setServiceFlag(e.getServiceFlag());
             return vo;
         }));
     }

+ 26 - 10
script/sql/business/v2/create.sql

@@ -1,12 +1,28 @@
-CREATE TABLE `pet_system`.`sys_service_classification`
+CREATE TABLE pet_system.sys_service_classification
 (
-    `id`          bigint PRIMARY KEY NOT NULL COMMENT '序号',
-    `name`        varchar(128)       NOT NULL COMMENT '类型名称',
-    `sort`        int                NOT NULL DEFAULT 0 COMMENT '排序',
-    `remark`      varchar(512) COMMENT '备注',
-    `create_dept` bigint(20) COMMENT '创建部门',
-    `create_by`   bigint(20) COMMENT '创建者',
-    `create_time` datetime COMMENT '创建时间',
-    `update_by`   bigint(20) COMMENT '更新者',
-    `update_time` datetime COMMENT '更新时间'
+    id          bigint PRIMARY KEY NOT NULL COMMENT '序号',
+    name        varchar(128)       NOT NULL COMMENT '类型名称',
+    sort        int                NOT NULL DEFAULT 0 COMMENT '排序',
+    remark      varchar(512) COMMENT '备注',
+    create_dept bigint(20) COMMENT '创建部门',
+    create_by   bigint(20) COMMENT '创建者',
+    create_time datetime COMMENT '创建时间',
+    update_by   bigint(20) COMMENT '更新者',
+    update_time datetime COMMENT '更新时间'
+) ENGINE = innoDB COMMENT = '服务分类信息表';
+
+CREATE TABLE pet_system.sys_sub_order_appeal
+(
+    id                     bigint PRIMARY KEY NOT NULL COMMENT '序号',
+    order_id               bigint             NOT NULL COMMENT '订单ID',
+    service                bigint             NOT NULL COMMENT '实际服务',
+    photos                 varchar(255) COMMENT '图片',
+    fulfillment_commission bigint             NOT NULL COMMENT '履约佣金',
+    reason                 varchar(512) COMMENT '申诉理由',
+    tenant_id              varchar(20)        NOT NULL COMMENT '租户编号',
+    create_dept            bigint(20) COMMENT '创建部门',
+    create_by              bigint(20) COMMENT '创建者',
+    create_time            datetime COMMENT '创建时间',
+    update_by              bigint(20) COMMENT '更新者',
+    update_time            datetime COMMENT '更新时间'
 ) ENGINE = innoDB COMMENT = '服务分类信息表';

+ 2 - 0
script/sql/business/v2/update.sql

@@ -26,3 +26,5 @@ ALTER TABLE pet_system.sys_service ADD COLUMN price bigint COMMENT '订单服务
 
 ALTER TABLE pet_system.sys_sub_order ADD COLUMN order_commission bigint COMMENT '订单佣金';
 ALTER TABLE pet_system.sys_sub_order CHANGE price fulfillment_commission bigint COMMENT '履约佣金';
+
+ALTER TABLE pet_system.sys_sub_order ADD COLUMN service_flag boolean DEFAULT true COMMENT '是否可以服务';