Browse Source

c2c取消订单原因

30262728@qq.com 4 days ago
parent
commit
ad53b08775

+ 28 - 2
qnfhq-api/src/main/java/com/qnfhq/modules/c2c/controller/C2cOrderController.java

@@ -5,6 +5,7 @@ import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 import com.qnfhq.annotation.RepeatSubmit;
 import com.qnfhq.annotation.RepeatSubmit;
 import com.qnfhq.common.ApiBaseController;
 import com.qnfhq.common.ApiBaseController;
 import com.qnfhq.common.constant.Constant;
 import com.qnfhq.common.constant.Constant;
@@ -17,6 +18,8 @@ import com.qnfhq.common.utils.Result;
 import com.qnfhq.common.validator.ValidatorUtils;
 import com.qnfhq.common.validator.ValidatorUtils;
 import com.qnfhq.constant.CacheConstants;
 import com.qnfhq.constant.CacheConstants;
 import com.qnfhq.modules.c2c.dto.*;
 import com.qnfhq.modules.c2c.dto.*;
+import com.qnfhq.modules.c2c.dto.setting.CancelReasonSetting;
+import com.qnfhq.modules.c2c.dto.setting.ReviewSetting;
 import com.qnfhq.modules.c2c.entity.*;
 import com.qnfhq.modules.c2c.entity.*;
 import com.qnfhq.modules.c2c.enums.AdStatusEnum;
 import com.qnfhq.modules.c2c.enums.AdStatusEnum;
 import com.qnfhq.modules.c2c.enums.C2cOrderFlowEnum;
 import com.qnfhq.modules.c2c.enums.C2cOrderFlowEnum;
@@ -26,15 +29,19 @@ import com.qnfhq.modules.c2c.service.*;
 import com.qnfhq.modules.user.entity.AppAssetEntity;
 import com.qnfhq.modules.user.entity.AppAssetEntity;
 import com.qnfhq.modules.user.entity.AppUserDetailEntity;
 import com.qnfhq.modules.user.entity.AppUserDetailEntity;
 import com.qnfhq.modules.user.entity.AppUserEntity;
 import com.qnfhq.modules.user.entity.AppUserEntity;
+import com.qnfhq.modules.user.entity.SettingEntity;
 import com.qnfhq.modules.user.enums.AssetEnum;
 import com.qnfhq.modules.user.enums.AssetEnum;
 import com.qnfhq.modules.user.enums.AuditStatusEnum;
 import com.qnfhq.modules.user.enums.AuditStatusEnum;
+import com.qnfhq.modules.user.enums.SettingEnum;
 import com.qnfhq.modules.user.service.AppAssetService;
 import com.qnfhq.modules.user.service.AppAssetService;
 import com.qnfhq.modules.user.service.AppUserDetailService;
 import com.qnfhq.modules.user.service.AppUserDetailService;
 import com.qnfhq.modules.user.service.AppUserService;
 import com.qnfhq.modules.user.service.AppUserService;
+import com.qnfhq.modules.user.service.SettingService;
 import com.qnfhq.utils.DistributedRedisLock;
 import com.qnfhq.utils.DistributedRedisLock;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
 import jakarta.annotation.Resource;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.math.RoundingMode;
@@ -275,10 +282,16 @@ public class C2cOrderController extends ApiBaseController {
     @Operation(summary = "用户取消订单")
     @Operation(summary = "用户取消订单")
     @PostMapping("/cancelOrder")
     @PostMapping("/cancelOrder")
     @RepeatSubmit(interval = 3000, message = "请求过于频繁")
     @RepeatSubmit(interval = 3000, message = "请求过于频繁")
-    public Result cancelOrder(@RequestBody C2cOrderIdDTO dto)
+    public Result cancelOrder(@RequestBody C2cOrderCancelDTO dto)
     {
     {
         ValidatorUtils.validateEntity(dto);
         ValidatorUtils.validateEntity(dto);
 
 
+        if(dto.getReasonId().intValue()==5) {//买家取消原因=其他
+            if(StrUtil.isEmpty(dto.getOtherReason())) {
+                return error(MessageUtils.message("c2c.order.cancel.otherReason.NotEmpty"));//其他原因不能空
+            }
+        }
+
         C2cOrderEntity order = c2cOrderService.selectById(dto.getId());
         C2cOrderEntity order = c2cOrderService.selectById(dto.getId());
         if(order == null) {
         if(order == null) {
             return error(MessageUtils.message("c2c.order.not.exist"));//订单编号无效
             return error(MessageUtils.message("c2c.order.not.exist"));//订单编号无效
@@ -304,7 +317,7 @@ public class C2cOrderController extends ApiBaseController {
             int oldStatus = order.getStatus().intValue();
             int oldStatus = order.getStatus().intValue();
             try {
             try {
                 order.setRemark("用户主动取消订单");
                 order.setRemark("用户主动取消订单");
-                c2cOrderService.cancelC2cOrder(order, StpUtil.getLoginIdAsLong());
+                c2cOrderService.cancelC2cOrder(order, StpUtil.getLoginIdAsLong(), dto.getReasonId(), dto.getReasonType(), dto.getOtherReason());
             } catch (Exception e) {
             } catch (Exception e) {
                 log.error("cancelOrder,{},{}",order.getId(),e.getMessage());
                 log.error("cancelOrder,{},{}",order.getId(),e.getMessage());
                 return error("取消订单失败");
                 return error("取消订单失败");
@@ -839,5 +852,18 @@ public class C2cOrderController extends ApiBaseController {
         return success(data);
         return success(data);
     }
     }
 
 
+    @Resource
+    private SettingService settingService;
+
+    @PostMapping("/cancelReason")
+    @Operation(summary = "取消原因列表")
+    public Result cancelReason(){
+        SettingEntity setting = settingService.getSetting(SettingEnum.CANCEL_REASON_SETTING.name());
+        List<CancelReasonSetting> settingsList = JSONUtil.toList(JSONUtil.parseArray(setting.getSettingValue()), CancelReasonSetting.class);
+        if (CollectionUtils.isEmpty(settingsList)) {
+            return new Result().error(MessageUtils.message("c2c.order.cancel.reason.notset"));//"未配置取消原因"
+        }
+        return new Result().ok(settingsList);
+    }
 
 
 }
 }

+ 16 - 0
qnfhq-api/src/main/java/com/qnfhq/modules/c2c/dao/OrderCancelDao.java

@@ -0,0 +1,16 @@
+package com.qnfhq.modules.c2c.dao;
+
+import com.qnfhq.common.dao.BaseDao;
+import com.qnfhq.modules.c2c.entity.OrderCancelEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * c2c订单取消原因
+ *
+ * @author yelz 30262728@qq.com
+ * @since 1.0.0 2025-12-01
+ */
+@Mapper
+public interface OrderCancelDao extends BaseDao<OrderCancelEntity> {
+	
+}

+ 37 - 0
qnfhq-api/src/main/java/com/qnfhq/modules/c2c/dto/C2cOrderCancelDTO.java

@@ -0,0 +1,37 @@
+package com.qnfhq.modules.c2c.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.media.SchemaProperty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * c2c订单
+ *
+ * @author yelz 30262728@qq.com
+ * @since 1.0.0 2025-11-17
+ */
+@Data
+@Schema(name = "c2c订单取消")
+public class C2cOrderCancelDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	@SchemaProperty(name = "订单编号")
+    @NotNull(message="{NotNull.oId}")//订单编号不能为空
+	private Long id;
+
+
+    @SchemaProperty(name = "取消原因编号")
+    @NotNull(message="{NotNull.reasonId}")//取消原因编号不能为空
+    private Long reasonId;
+
+    @SchemaProperty(name = "取消原因类别")
+    @NotNull(message="{NotNull.reasonType}")//取消原因类别不能为空
+    private Long reasonType;
+
+    @SchemaProperty(name = "其他原因")
+    private String otherReason;
+
+}

+ 13 - 0
qnfhq-api/src/main/java/com/qnfhq/modules/c2c/dto/setting/CancelReasonSetting.java

@@ -0,0 +1,13 @@
+package com.qnfhq.modules.c2c.dto.setting;
+
+import lombok.Data;
+
+/**
+ * 取消原因配置
+ */
+@Data
+public class CancelReasonSetting {
+    private Integer reasonId;//编号
+    private Integer reasonType;//1买家原因2卖家原因
+    private String reasonName;//名称
+}

+ 50 - 0
qnfhq-api/src/main/java/com/qnfhq/modules/c2c/entity/OrderCancelEntity.java

@@ -0,0 +1,50 @@
+package com.qnfhq.modules.c2c.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * c2c订单取消原因
+ *
+ * @author yelz 30262728@qq.com
+ * @since 1.0.0 2025-12-01
+ */
+@Data
+@TableName("c2c_order_cancel")
+public class OrderCancelEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+
+    @TableId(type = IdType.AUTO)
+	private Long id;
+    /**
+     * 
+     */
+	private Long orderId;
+    /**
+     * 取消原因编号
+     */
+	private Long reasonId;
+
+    /**
+     * 原因类别 1买家原因 2卖家原因
+     */
+    private Long reasonType;
+    /**
+     * 其他原因
+     */
+	private String otherReason;
+    /**
+     * 操作人
+     */
+	private Long opUserId;
+    /**
+     * 
+     */
+	private Date createTime;
+}

+ 1 - 1
qnfhq-api/src/main/java/com/qnfhq/modules/c2c/service/C2cOrderService.java

@@ -76,7 +76,7 @@ public interface C2cOrderService extends BaseService<C2cOrderEntity> {
      * @return
      * @return
      * @throws Exception
      * @throws Exception
      */
      */
-    int cancelC2cOrder(C2cOrderEntity order,Long loginId) throws Exception;
+    int cancelC2cOrder(C2cOrderEntity order,Long loginId,Long reasonId, Long reasonType, String otherReason) throws Exception;
 
 
     /**
     /**
      * 客服取消订单
      * 客服取消订单

+ 14 - 0
qnfhq-api/src/main/java/com/qnfhq/modules/c2c/service/OrderCancelService.java

@@ -0,0 +1,14 @@
+package com.qnfhq.modules.c2c.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qnfhq.modules.c2c.entity.OrderCancelEntity;
+
+/**
+ * c2c订单取消原因
+ *
+ * @author yelz 30262728@qq.com
+ * @since 1.0.0 2025-12-01
+ */
+public interface OrderCancelService extends IService<OrderCancelEntity> {
+
+}

+ 12 - 1
qnfhq-api/src/main/java/com/qnfhq/modules/c2c/service/impl/C2cOrderServiceImpl.java

@@ -81,6 +81,9 @@ public class C2cOrderServiceImpl extends BaseServiceImpl<C2cOrderDao, C2cOrderEn
     @Resource
     @Resource
     private C2cMsgContentService c2cMsgContentService;
     private C2cMsgContentService c2cMsgContentService;
 
 
+    @Resource
+    private OrderCancelService orderCancelService;
+
 
 
     @Override
     @Override
     public PageData<C2cOrderEntity> page(Map<String, Object> params) {
     public PageData<C2cOrderEntity> page(Map<String, Object> params) {
@@ -408,7 +411,15 @@ public class C2cOrderServiceImpl extends BaseServiceImpl<C2cOrderDao, C2cOrderEn
      */
      */
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     @Override
     @Override
-    public int cancelC2cOrder(C2cOrderEntity order,Long loginId) throws Exception {
+    public int cancelC2cOrder(C2cOrderEntity order,Long loginId, Long reasonId, Long reasonType, String otherReason) throws Exception {
+        OrderCancelEntity orderCancel = new OrderCancelEntity();
+        orderCancel.setOrderId(order.getId());
+        orderCancel.setReasonId(reasonId);
+        orderCancel.setReasonType(reasonType);
+        orderCancel.setOtherReason(otherReason);
+        orderCancel.setOpUserId(loginId);
+        orderCancel.setCreateTime(new Date());
+        orderCancelService.save(orderCancel);
         return cancelOrder(order,loginId,"app");
         return cancelOrder(order,loginId,"app");
     }
     }
 
 

+ 20 - 0
qnfhq-api/src/main/java/com/qnfhq/modules/c2c/service/impl/OrderCancelServiceImpl.java

@@ -0,0 +1,20 @@
+package com.qnfhq.modules.c2c.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qnfhq.modules.c2c.dao.OrderCancelDao;
+import com.qnfhq.modules.c2c.entity.OrderCancelEntity;
+import com.qnfhq.modules.c2c.service.OrderCancelService;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * c2c订单取消原因
+ *
+ * @author yelz 30262728@qq.com
+ * @since 1.0.0 2025-12-01
+ */
+@Service
+public class OrderCancelServiceImpl extends ServiceImpl<OrderCancelDao, OrderCancelEntity> implements OrderCancelService {
+
+}

+ 3 - 1
qnfhq-api/src/main/java/com/qnfhq/modules/user/enums/SettingEnum.java

@@ -102,6 +102,8 @@ public enum SettingEnum {
     //验证码配置
     //验证码配置
     CAPTCHA_SETTING,
     CAPTCHA_SETTING,
     //评论标签设置
     //评论标签设置
-    REVIEW_SETTING
+    REVIEW_SETTING,
+    //c2c取消原因设置
+    CANCEL_REASON_SETTING
     ;
     ;
 }
 }

+ 2 - 1
qnfhq-api/src/main/resources/i18n/messages.properties

@@ -145,4 +145,5 @@ c2c.order.reviews.not.complete=Status pesanan "Selesai" diperlukan untuk memberi
 c2c.order.reviews.create.fail=Gagal membuat ulasan
 c2c.order.reviews.create.fail=Gagal membuat ulasan
 c2c.reviews.save.fail=Gagal menyimpan ulasan
 c2c.reviews.save.fail=Gagal menyimpan ulasan
 c2c.order.you.reviewed=Anda telah memberikan ulasan untuk pesanan ini
 c2c.order.you.reviewed=Anda telah memberikan ulasan untuk pesanan ini
-
+c2c.order.cancel.otherReason.NotEmpty=Sebab lain tidak boleh kosong
+c2c.order.cancel.reason.notset=Sebab pembatalan belum ditetapkan

+ 3 - 1
qnfhq-api/src/main/resources/i18n/messages_en.properties

@@ -144,4 +144,6 @@ c2c.order.reviews.not.tran.user=Only transaction parties of the order can post r
 c2c.order.reviews.not.complete=Order status must be "Completed" to post reviews
 c2c.order.reviews.not.complete=Order status must be "Completed" to post reviews
 c2c.order.reviews.create.fail=Failed to post review
 c2c.order.reviews.create.fail=Failed to post review
 c2c.reviews.save.fail=Failed to save review
 c2c.reviews.save.fail=Failed to save review
-c2c.order.you.reviewed=You have already reviewed this order
+c2c.order.you.reviewed=You have already reviewed this order
+c2c.order.cancel.otherReason.NotEmpty=Other reasons cannot be empty  
+c2c.order.cancel.reason.notset=Cancellation reason not set

+ 3 - 1
qnfhq-api/src/main/resources/i18n/messages_zh.properties

@@ -139,7 +139,6 @@ c2c.msg.msgType.err=\u6d88\u606f\u7c7b\u578b\u9519\u8bef
 c2c.msg.receptId.err=\u4e0d\u80fd\u7ed9\u81ea\u5df1\u53d1\u6d88\u606f
 c2c.msg.receptId.err=\u4e0d\u80fd\u7ed9\u81ea\u5df1\u53d1\u6d88\u606f
 user.verifyIntelligentCaptcha.err=\u9a8c\u8bc1\u7801\u6821\u9a8c\u63a5\u53e3\u62a5\u9519
 user.verifyIntelligentCaptcha.err=\u9a8c\u8bc1\u7801\u6821\u9a8c\u63a5\u53e3\u62a5\u9519
 609=\u667a\u80fd\u9a8c\u8bc1\u7801\u6821\u9a8c\u5931\u8d25
 609=\u667a\u80fd\u9a8c\u8bc1\u7801\u6821\u9a8c\u5931\u8d25
-
 c2c.follow.self=\u4e0d\u80fd\u5173\u6ce8\u81ea\u5df1
 c2c.follow.self=\u4e0d\u80fd\u5173\u6ce8\u81ea\u5df1
 c2c.follow.merchant.notexists=\u5546\u5bb6\u4e0d\u5b58\u5728
 c2c.follow.merchant.notexists=\u5546\u5bb6\u4e0d\u5b58\u5728
 c2c.reviews.lables.notset=\u672a\u914d\u7f6e\u8bc4\u4ef7\u6807\u7b7e
 c2c.reviews.lables.notset=\u672a\u914d\u7f6e\u8bc4\u4ef7\u6807\u7b7e
@@ -148,3 +147,6 @@ c2c.order.reviews.not.complete=\u8ba2\u5355\u72b6\u6001"\u5df2\u5b8c\u6210"\u624
 c2c.order.reviews.create.fail=\u53d1\u8868\u8bc4\u4ef7
 c2c.order.reviews.create.fail=\u53d1\u8868\u8bc4\u4ef7
 c2c.reviews.save.fail=\u8bc4\u4ef7\u4fdd\u5b58\u5931\u8d25
 c2c.reviews.save.fail=\u8bc4\u4ef7\u4fdd\u5b58\u5931\u8d25
 c2c.order.you.reviewed=\u8be5\u8ba2\u5355\u60a8\u5df2\u53d1\u8868\u8bc4\u4ef7
 c2c.order.you.reviewed=\u8be5\u8ba2\u5355\u60a8\u5df2\u53d1\u8868\u8bc4\u4ef7
+
+c2c.order.cancel.otherReason.NotEmpty=\u5176\u4ed6\u539f\u56e0\u4e0d\u80fd\u7a7a
+c2c.order.cancel.reason.notset=\u672a\u914d\u7f6e\u53d6\u6d88\u539f\u56e0

+ 3 - 1
qnfhq-api/src/main/resources/i18n/validation.properties

@@ -49,4 +49,6 @@ NotNull.followingId=ID yang diikuti tidak boleh kosong
 NotNull.rating=Penilaian tidak boleh kosong
 NotNull.rating=Penilaian tidak boleh kosong
 NotBlank.lables=Label tidak boleh kosong
 NotBlank.lables=Label tidak boleh kosong
 NotNull.isAnonymous=Adakah anonim tidak boleh kosong
 NotNull.isAnonymous=Adakah anonim tidak boleh kosong
-NotBlank.content=Kandungan tidak boleh kosong
+NotBlank.content=Kandungan tidak boleh kosong
+NotNull.reasonId=Nombor sebab pembatalan tidak boleh kosong  
+NotNull.reasonType=Jenis sebab pembatalan tidak boleh kosong

+ 3 - 1
qnfhq-api/src/main/resources/i18n/validation_en.properties

@@ -49,4 +49,6 @@ NotNull.followingId=Followed user ID cannot be empty
 NotNull.rating=Rating cannot be empty  
 NotNull.rating=Rating cannot be empty  
 NotBlank.lables=Labels cannot be empty  
 NotBlank.lables=Labels cannot be empty  
 NotNull.isAnonymous=Anonymous status cannot be empty  
 NotNull.isAnonymous=Anonymous status cannot be empty  
-NotBlank.content=Content cannot be empty
+NotBlank.content=Content cannot be empty
+NotNull.reasonId=Cancellation reason ID cannot be empty  
+NotNull.reasonType=Cancellation reason category cannot be empty

+ 3 - 2
qnfhq-api/src/main/resources/i18n/validation_zh.properties

@@ -36,7 +36,6 @@ NotBlank.remark=\u51ed\u8bc1\u63cf\u8ff0\u4e0d\u80fd\u4e3a\u7a7a
 NotBlank.img1=\u51ed\u8bc1\u622a\u56fe1\u4e0d\u80fd\u4e3a\u7a7a
 NotBlank.img1=\u51ed\u8bc1\u622a\u56fe1\u4e0d\u80fd\u4e3a\u7a7a
 NotNull.complainId=\u7533\u8bc9\u7f16\u53f7\u4e0d\u80fd\u4e3a\u7a7a
 NotNull.complainId=\u7533\u8bc9\u7f16\u53f7\u4e0d\u80fd\u4e3a\u7a7a
 NotBlank.country=\u56fd\u5bb6\u4e0d\u80fd\u4e3a\u7a7a
 NotBlank.country=\u56fd\u5bb6\u4e0d\u80fd\u4e3a\u7a7a
-
 NotNull.tag=\u6807\u7b7e\u4e0d\u80fd\u4e3a\u7a7a
 NotNull.tag=\u6807\u7b7e\u4e0d\u80fd\u4e3a\u7a7a
 NotNull.unit=\u4ea4\u6613\u5355\u4f4d\u4e0d\u80fd\u4e3a\u7a7a
 NotNull.unit=\u4ea4\u6613\u5355\u4f4d\u4e0d\u80fd\u4e3a\u7a7a
 NotBlank.senderId=\u53d1\u9001\u4eba\u4e0d\u80fd\u7a7a
 NotBlank.senderId=\u53d1\u9001\u4eba\u4e0d\u80fd\u7a7a
@@ -46,9 +45,11 @@ NotNull.ownerUid=\u7528\u6237\u7f16\u53f7\u4e0d\u80fd\u4e3a\u7a7a
 NotNull.otherUid=\u5bf9\u65b9\u7f16\u53f7\u4e0d\u80fd\u4e3a\u7a7a
 NotNull.otherUid=\u5bf9\u65b9\u7f16\u53f7\u4e0d\u80fd\u4e3a\u7a7a
 Length.content=\u6d88\u606f\u5185\u5bb9\u957f\u5ea6\u4e0d\u80fd\u8d85\u8fc71000
 Length.content=\u6d88\u606f\u5185\u5bb9\u957f\u5ea6\u4e0d\u80fd\u8d85\u8fc71000
 NotBlank.verifyParam=\u9a8c\u8bc1\u7801\u53c2\u6570\u4e0d\u80fd\u4e3a\u7a7a
 NotBlank.verifyParam=\u9a8c\u8bc1\u7801\u53c2\u6570\u4e0d\u80fd\u4e3a\u7a7a
-
 NotNull.followingId=\u88ab\u5173\u6ce8\u8005ID\u4e0d\u80fd\u7a7a
 NotNull.followingId=\u88ab\u5173\u6ce8\u8005ID\u4e0d\u80fd\u7a7a
 NotNull.rating=\u8bc4\u5206\u4e0d\u80fd\u4e3a\u7a7a
 NotNull.rating=\u8bc4\u5206\u4e0d\u80fd\u4e3a\u7a7a
 NotBlank.lables=\u6807\u7b7e\u4e0d\u80fd\u4e3a\u7a7a
 NotBlank.lables=\u6807\u7b7e\u4e0d\u80fd\u4e3a\u7a7a
 NotNull.isAnonymous=\u662f\u5426\u533f\u540d\u4e0d\u80fd\u4e3a\u7a7a
 NotNull.isAnonymous=\u662f\u5426\u533f\u540d\u4e0d\u80fd\u4e3a\u7a7a
 NotBlank.content=\u5185\u5bb9\u4e0d\u80fd\u7a7a
 NotBlank.content=\u5185\u5bb9\u4e0d\u80fd\u7a7a
+
+NotNull.reasonId=\u53d6\u6d88\u539f\u56e0\u7f16\u53f7\u4e0d\u80fd\u4e3a\u7a7a
+NotNull.reasonType=\u53d6\u6d88\u539f\u56e0\u7c7b\u522b\u4e0d\u80fd\u4e3a\u7a7a

+ 17 - 0
qnfhq-api/src/main/resources/mapper/c2c/OrderCancelDao.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.qnfhq.modules.c2c.dao.OrderCancelDao">
+
+    <resultMap type="com.qnfhq.modules.c2c.entity.OrderCancelEntity" id="orderCancelMap">
+        <result property="id" column="id"/>
+        <result property="orderId" column="order_id"/>
+        <result property="reasonId" column="reason_id"/>
+        <result property="reasonType" column="reason_type"/>
+        <result property="otherReason" column="other_reason"/>
+        <result property="opUserId" column="op_user_id"/>
+        <result property="createTime" column="create_time"/>
+    </resultMap>
+
+
+</mapper>