yangdamao 2 years ago
parent
commit
5b5cfb887a
41 changed files with 1754 additions and 37 deletions
  1. 17 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/common/CommonController.java
  2. 52 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderController.java
  3. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/Order.java
  4. 28 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopFinishOrderBo.java
  5. 4 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderAddBo.java
  6. 45 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderCheckLogAddBo.java
  7. 53 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderCheckLogEditBo.java
  8. 57 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderCheckLogQueryBo.java
  9. 5 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderEditBo.java
  10. 2 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderGoodsAddBo.java
  11. 2 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderGoodsEditBo.java
  12. 5 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderQueryBo.java
  13. 76 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderRefundAddBo.java
  14. 94 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderRefundEditBo.java
  15. 88 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderRefundQueryBo.java
  16. 47 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOrderRefundApplyBo.java
  17. 31 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopRefundOrderCheckBo.java
  18. 28 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopUpdateRemarkBo.java
  19. 5 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrder.java
  20. 4 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrderCheck.java
  21. 48 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrderCheckLog.java
  22. 3 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrderGoods.java
  23. 69 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrderRefund.java
  24. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/mapper/TopOldOrderCheckLogMapper.java
  25. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/mapper/TopOldOrderMapper.java
  26. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/mapper/TopOldOrderRefundMapper.java
  27. 53 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/ITopOldOrderCheckLogService.java
  28. 53 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/ITopOldOrderRefundService.java
  29. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/ITopOldOrderService.java
  30. 104 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderCheckLogServiceImpl.java
  31. 115 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderRefundServiceImpl.java
  32. 310 18
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java
  33. 53 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderCheckLogVo.java
  34. 2 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderGoodsVo.java
  35. 92 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderRefundVo.java
  36. 7 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderVo.java
  37. 47 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOrderStatisticsVo.java
  38. 38 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopRefundOrderDetailVo.java
  39. 20 0
      zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderCheckLogMapper.xml
  40. 15 0
      zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderMapper.xml
  41. 30 0
      zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderRefundMapper.xml

+ 17 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/common/CommonController.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.zhongzheng.common.annotation.Log;
 import com.zhongzheng.common.core.controller.BaseController;
 import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
 import com.zhongzheng.common.core.page.TableDataInfo;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.enums.BusinessType;
@@ -41,6 +42,9 @@ import com.zhongzheng.modules.sdk.service.NuonuoService;
 import com.zhongzheng.modules.system.bo.SysTenantQueryBo;
 import com.zhongzheng.modules.system.service.ISysConfigService;
 import com.zhongzheng.modules.system.service.ISysTenantService;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderCheckBo;
+import com.zhongzheng.modules.top.goods.bo.TopOrderRefundApplyBo;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
 import com.zhongzheng.modules.wx.bo.WxInfoBo;
 import com.zhongzheng.modules.wx.bo.WxInfoQuery;
 import com.zhongzheng.modules.wx.bo.WxServerBody;
@@ -72,6 +76,7 @@ public class CommonController extends BaseController {
 
     private final ITopNuoMplatformLogService iTopNuoMplatformLogService;
 
+    private final ITopOldOrderService iTopOldOrderService;
 
     /**
      * 新增诺税通开单记录
@@ -86,4 +91,16 @@ public class CommonController extends BaseController {
         }
         return AjaxResult.success(iTopNuoMplatformLogService.insertByAddBo(bo));
     }
+
+    /**
+     * B端订单退款申请
+     */
+    @ApiOperation("B端订单退款申请")
+    @PostMapping("/refund/apply")
+    public AjaxResult<Void> orderRefundApply(@RequestBody TopOrderRefundApplyBo bo) {
+        if(!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return toAjax(iTopOldOrderService.orderRefundApply(bo) ? 1 : 0);
+    }
 }

+ 52 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderController.java

@@ -13,6 +13,8 @@ import com.zhongzheng.modules.top.goods.bo.*;
 import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderGoodsListVo;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderVo;
+import com.zhongzheng.modules.top.goods.vo.TopOrderStatisticsVo;
+import com.zhongzheng.modules.top.goods.vo.TopRefundOrderDetailVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -114,4 +116,54 @@ public class TopOldOrderController extends BaseController {
         bo.setLoginId(loginUser.getUser().getUserId());
         return toAjax(iTopOldOrderService.checkOrder(bo) ? 1 : 0);
     }
+
+    /**
+     * 订单退款审核详情
+     */
+    @ApiOperation("订单退款审核详情")
+    @GetMapping("/refund/detail/{orderSn}")
+    public AjaxResult<TopRefundOrderDetailVo> refundOrderDetail(@PathVariable("orderSn") String orderSn) {
+        return AjaxResult.success(iTopOldOrderService.refundOrderDetail(orderSn));
+    }
+
+
+    /**
+     * 订单退款审核
+     */
+    @ApiOperation("订单退款审核")
+    @PostMapping("/refund/check")
+    public AjaxResult<Void> refundOrderCheck(@RequestBody TopRefundOrderCheckBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        return toAjax(iTopOldOrderService.refundOrderCheck(bo) ? 1 : 0);
+    }
+
+    /**
+     * 批量修改订单备注
+     */
+    @ApiOperation("批量修改订单备注")
+    @PostMapping("/update/remark")
+    public AjaxResult<Void> updateRemark(@RequestBody TopUpdateRemarkBo bo) {
+        return toAjax(iTopOldOrderService.updateRemark(bo) ? 1 : 0);
+    }
+
+    /**
+     * 批量完单
+     */
+    @ApiOperation("批量完单")
+    @PostMapping("/finish")
+    public AjaxResult<Void> finishOrder(@RequestBody TopFinishOrderBo bo) {
+        return toAjax(iTopOldOrderService.finishOrder(bo) ? 1 : 0);
+    }
+
+    /**
+     * 订单统计
+     */
+    @ApiOperation("订单统计")
+    @PostMapping("/statistics")
+    public AjaxResult<TopOrderStatisticsVo> statisticsOrder() {
+        return AjaxResult.success(iTopOldOrderService.statisticsOrder());
+    }
+
+
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/Order.java

@@ -93,6 +93,8 @@ private static final long serialVersionUID=1L;
     private Integer payStatus;
     /** 老业务系统红包活动邀请码 */
     private String shareActivityCode;
+    /** 备注*/
+    private String remark;
     /** 商户ID*/
     private Long tenantId;
 

+ 28 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopFinishOrderBo.java

@@ -0,0 +1,28 @@
+package com.zhongzheng.modules.top.goods.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 订单编辑对象 top_order
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Data
+@ApiModel("订单审核对象")
+public class TopFinishOrderBo {
+
+    @ApiModelProperty("$column.columnComment")
+    private List<Long> orderIdList;
+
+    @ApiModelProperty("订单编号")
+    private List<String> orderSnList;
+
+    @ApiModelProperty("完单状态:0未完单,1已完单")
+    private Integer finishStatus;
+
+}

+ 4 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderAddBo.java

@@ -85,7 +85,7 @@ public class TopOldOrderAddBo {
     @ApiModelProperty("审核状态:0待审核,1已通过,2未通过,3已撤销")
     private Integer checkStatus;
     /** 退款状态:0待审核,1未通过,2未退款,3已完成 */
-    @ApiModelProperty("退款状态:0待审核,1未通过,2未退款,3已完成")
+    @ApiModelProperty("退款状态:0待审核,1正常,2未退款,3已完成,4未通过")
     private Integer refundStatus;
     /** 账款状态:0未结清,1已结清 */
     @ApiModelProperty("账款状态:0未结清,1已结清")
@@ -93,6 +93,9 @@ public class TopOldOrderAddBo {
     /** 发票状态:0未开票,1已开票 */
     @ApiModelProperty("发票状态:0未开票,1已开票")
     private Integer invoiceStatus;
+    /** 完单状态:0未完单,1已完单 */
+    @ApiModelProperty("完单状态:0未完单,1已完单")
+    private Integer finishStatus;
     /** 盈亏(元) */
     @ApiModelProperty("盈亏(元)")
     private BigDecimal orderProfit;

+ 45 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderCheckLogAddBo.java

@@ -0,0 +1,45 @@
+package com.zhongzheng.modules.top.goods.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 订单退款审核记录添加对象 top_old_order_check_log
+ *
+ * @author ruoyi
+ * @date 2023-04-24
+ */
+@Data
+@ApiModel("订单退款审核记录添加对象")
+public class TopOldOrderCheckLogAddBo {
+
+    /** 退款单号 */
+    @ApiModelProperty("退款单号")
+    private String refundSn;
+    /** 角色ID */
+    @ApiModelProperty("角色ID")
+    private Long roleId;
+    /** 审核状态:0待审核,1已通过,-1未通过,(2待支付,3已支付) */
+    @ApiModelProperty("审核状态:0待审核,1已通过,-1未通过,(2待支付,3已支付)")
+    private Integer checkStatus;
+    /** 审核意见 */
+    @ApiModelProperty("审核意见")
+    private String checkReason;
+    /** 是否当前审核标记:0否,1是 */
+    @ApiModelProperty("是否当前审核标记:0否,1是")
+    private Integer checkSign;
+    /** 状态 1正常 0关闭 */
+    @ApiModelProperty("状态 1正常 0关闭")
+    private Integer status;
+    /** 添加时间 */
+    @ApiModelProperty("添加时间")
+    private Long createTime;
+    /** 修改时间 */
+    @ApiModelProperty("修改时间")
+    private Long updateTime;
+}

+ 53 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderCheckLogEditBo.java

@@ -0,0 +1,53 @@
+package com.zhongzheng.modules.top.goods.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+/**
+ * 订单退款审核记录编辑对象 top_old_order_check_log
+ *
+ * @author ruoyi
+ * @date 2023-04-24
+ */
+@Data
+@ApiModel("订单退款审核记录编辑对象")
+public class TopOldOrderCheckLogEditBo {
+
+    /** 主键 */
+    @ApiModelProperty("主键")
+    private Long id;
+
+    /** 退款单号 */
+    @ApiModelProperty("退款单号")
+    private String refundSn;
+
+    /** 角色ID */
+    @ApiModelProperty("角色ID")
+    private Long roleId;
+
+    /** 审核状态:0待审核,1已通过,-1未通过,(2待支付,3已支付) */
+    @ApiModelProperty("审核状态:0待审核,1已通过,-1未通过,(2待支付,3已支付)")
+    private Integer checkStatus;
+
+    /** 审核意见 */
+    @ApiModelProperty("审核意见")
+    private String checkReason;
+
+    /** 是否当前审核标记:0否,1是 */
+    @ApiModelProperty("是否当前审核标记:0否,1是")
+    private Integer checkSign;
+
+    /** 状态 1正常 0关闭 */
+    @ApiModelProperty("状态 1正常 0关闭")
+    private Integer status;
+
+    /** 修改时间 */
+    @ApiModelProperty("修改时间")
+    private Long updateTime;
+
+
+}

+ 57 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderCheckLogQueryBo.java

@@ -0,0 +1,57 @@
+package com.zhongzheng.modules.top.goods.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.HashMap;
+
+import com.zhongzheng.common.core.domain.BaseEntity;
+
+/**
+ * 订单退款审核记录分页查询对象 top_old_order_check_log
+ *
+ * @author ruoyi
+ * @date 2023-04-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("订单退款审核记录分页查询对象")
+public class TopOldOrderCheckLogQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 退款单号 */
+	@ApiModelProperty("退款单号")
+	private String refundSn;
+	/** 角色ID */
+	@ApiModelProperty("角色ID")
+	private Long roleId;
+	/** 审核状态:0待审核,1已通过,-1未通过,(2待支付,3已支付) */
+	@ApiModelProperty("审核状态:0待审核,1已通过,-1未通过,(2待支付,3已支付)")
+	private Integer checkStatus;
+	/** 审核意见 */
+	@ApiModelProperty("审核意见")
+	private String checkReason;
+	/** 是否当前审核标记:0否,1是 */
+	@ApiModelProperty("是否当前审核标记:0否,1是")
+	private Integer checkSign;
+	/** 状态 1正常 0关闭 */
+	@ApiModelProperty("状态 1正常 0关闭")
+	private Integer status;
+}

+ 5 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderEditBo.java

@@ -107,7 +107,7 @@ public class TopOldOrderEditBo {
     private Integer checkStatus;
 
     /** 退款状态:0待审核,1未通过,2未退款,3已完成 */
-    @ApiModelProperty("退款状态:0待审核,1未通过,2未退款,3已完成")
+    @ApiModelProperty("退款状态:0待审核,1正常,2未退款,3已完成,4未通过")
     private Integer refundStatus;
 
     /** 账款状态:0未结清,1已结清 */
@@ -118,6 +118,10 @@ public class TopOldOrderEditBo {
     @ApiModelProperty("发票状态:0未开票,1已开票")
     private Integer invoiceStatus;
 
+    /** 完单状态:0未完单,1已完单 */
+    @ApiModelProperty("完单状态:0未完单,1已完单")
+    private Integer finishStatus;
+
     /** 盈亏(元) */
     @ApiModelProperty("盈亏(元)")
     private BigDecimal orderProfit;

+ 2 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderGoodsAddBo.java

@@ -79,8 +79,8 @@ public class TopOldOrderGoodsAddBo {
     /** 学习状态:0未开始,1学习中,2已结束 */
     @ApiModelProperty("学习状态:0未开始,1学习中,2已结束")
     private Integer studyStatus;
-    @ApiModelProperty("学员ID")
-    private Long userId;
+    @ApiModelProperty("旧系统自增ID")
+    private Long signId;
     @ApiModelProperty("学员名称")
     private String userName;
     @ApiModelProperty("学员身份证")

+ 2 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderGoodsEditBo.java

@@ -101,8 +101,8 @@ public class TopOldOrderGoodsEditBo {
     @ApiModelProperty("学习状态:0未开始,1学习中,2已结束")
     private Integer studyStatus;
 
-    @ApiModelProperty("学员ID")
-    private Long userId;
+    @ApiModelProperty("旧系统自增ID")
+    private Long signId;
     @ApiModelProperty("学员名称")
     private String userName;
     @ApiModelProperty("学员身份证")

+ 5 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderQueryBo.java

@@ -42,9 +42,9 @@ public class TopOldOrderQueryBo extends BaseEntity {
 	@ApiModelProperty("审核状态:0待审核,1已通过,2未通过,3已撤销")
 	private Integer checkStatus;
 	/** 退款状态:0待审核,1未通过,2未退款,3已完成 */
-	@ApiModelProperty("退款状态:0待审核,1未通过,2未退款,3已完成")
+	@ApiModelProperty("退款状态:0待审核,1正常,2未退款,3已完成,4未通过")
 	private Integer refundStatus;
-	@ApiModelProperty("退款状态:0待审核,1未通过,2未退款,3已完成")
+	@ApiModelProperty("退款状态:0待审核,1正常,2未退款,3已完成,4未通过")
 	private List<Integer> refundStatusList;
 	/** 账款状态:0未结清,1已结清 */
 	@ApiModelProperty("账款状态:0未结清,1已结清")
@@ -52,6 +52,9 @@ public class TopOldOrderQueryBo extends BaseEntity {
 	/** 发票状态:0未开票,1已开票 */
 	@ApiModelProperty("发票状态:0未开票,1已开票")
 	private Integer invoiceStatus;
+	/** 完单状态:0未完单,1已完单 */
+	@ApiModelProperty("完单状态:0未完单,1已完单")
+	private Integer finishStatus;
 	@ApiModelProperty("业务名称")
 	private String businessFullName;
 	@ApiModelProperty("当前登入人员ID")

+ 76 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderRefundAddBo.java

@@ -0,0 +1,76 @@
+package com.zhongzheng.modules.top.goods.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+import java.math.BigDecimal;
+
+/**
+ * 订单商品退款添加对象 top_old_order_refund
+ *
+ * @author ruoyi
+ * @date 2023-04-24
+ */
+@Data
+@ApiModel("订单商品退款添加对象")
+public class TopOldOrderRefundAddBo {
+
+    /** 退款单号 */
+    @ApiModelProperty("退款单号")
+    private String refundSn;
+    /** 用户ID */
+    @ApiModelProperty("用户ID")
+    private Long userId;
+    /** 学员名称 */
+    @ApiModelProperty("学员名称")
+    private String userName;
+    /** 订单编号 */
+    @ApiModelProperty("订单编号")
+    private String orderSn;
+    /** 订单商品ID */
+    @ApiModelProperty("订单商品ID")
+    private Long orderGoodsId;
+    /** 商品id */
+    @ApiModelProperty("商品id")
+    private Long goodsId;
+    /** 商品名称 */
+    @ApiModelProperty("商品名称")
+    private String goodsName;
+    /** 退款金额 */
+    @ApiModelProperty("退款金额")
+    private BigDecimal refundFee;
+    /** 实际退款金额 */
+    @ApiModelProperty("实际退款金额")
+    private BigDecimal realRefundFee;
+    /** 添加时间 */
+    @ApiModelProperty("添加时间")
+    private Long createTime;
+    /** 修改时间 */
+    @ApiModelProperty("修改时间")
+    private Long updateTime;
+    /** 状态 1正常 0关闭 */
+    @ApiModelProperty("状态 1正常 0关闭")
+    private Integer status;
+    /** 微信退款单号 */
+    @ApiModelProperty("微信退款单号")
+    private String wxpayRefundId;
+    /** 申请退款原因 */
+    @ApiModelProperty("申请退款原因")
+    private String applyReason;
+    /** 申请图片地址 , 拼接 */
+    @ApiModelProperty("申请图片地址 , 拼接")
+    private String applyImgs;
+    /** 退款类型 1B端,2C端 */
+    @ApiModelProperty("退款类型 1B端,2C端")
+    private Integer type;
+    /** 审批状态 0 待审核 1初审通过 2复审通过待退款 1待审核,2待退款,3已完成,-1未通过 */
+    @ApiModelProperty("审批状态 0 待审核 1初审通过 2复审通过待退款 1待审核,2待退款,3已完成,-1未通过")
+    private Integer periodStatus;
+    /** 退款时间 */
+    @ApiModelProperty("退款时间")
+    private Long refundTime;
+}

+ 94 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderRefundEditBo.java

@@ -0,0 +1,94 @@
+package com.zhongzheng.modules.top.goods.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+import java.math.BigDecimal;
+
+/**
+ * 订单商品退款编辑对象 top_old_order_refund
+ *
+ * @author ruoyi
+ * @date 2023-04-24
+ */
+@Data
+@ApiModel("订单商品退款编辑对象")
+public class TopOldOrderRefundEditBo {
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long refundId;
+
+    /** 退款单号 */
+    @ApiModelProperty("退款单号")
+    private String refundSn;
+
+    /** 用户ID */
+    @ApiModelProperty("用户ID")
+    private Long userId;
+
+    /** 学员名称 */
+    @ApiModelProperty("学员名称")
+    private String userName;
+
+    /** 订单编号 */
+    @ApiModelProperty("订单编号")
+    private String orderSn;
+
+    /** 订单商品ID */
+    @ApiModelProperty("订单商品ID")
+    private Long orderGoodsId;
+
+    /** 商品id */
+    @ApiModelProperty("商品id")
+    private Long goodsId;
+
+    /** 商品名称 */
+    @ApiModelProperty("商品名称")
+    private String goodsName;
+
+    /** 退款金额 */
+    @ApiModelProperty("退款金额")
+    private BigDecimal refundFee;
+
+    /** 实际退款金额 */
+    @ApiModelProperty("实际退款金额")
+    private BigDecimal realRefundFee;
+
+    /** 修改时间 */
+    @ApiModelProperty("修改时间")
+    private Long updateTime;
+
+
+    /** 状态 1正常 0关闭 */
+    @ApiModelProperty("状态 1正常 0关闭")
+    private Integer status;
+
+    /** 微信退款单号 */
+    @ApiModelProperty("微信退款单号")
+    private String wxpayRefundId;
+
+    /** 申请退款原因 */
+    @ApiModelProperty("申请退款原因")
+    private String applyReason;
+
+    /** 申请图片地址 , 拼接 */
+    @ApiModelProperty("申请图片地址 , 拼接")
+    private String applyImgs;
+
+    /** 退款类型 1B端,2C端 */
+    @ApiModelProperty("退款类型 1B端,2C端")
+    private Integer type;
+
+    /** 审批状态 0 待审核 1初审通过 2复审通过待退款 1待审核,2待退款,3已完成,-1未通过 */
+    @ApiModelProperty("审批状态 0 待审核 1初审通过 2复审通过待退款 1待审核,2待退款,3已完成,-1未通过")
+    private Integer periodStatus;
+
+    /** 退款时间 */
+    @ApiModelProperty("退款时间")
+    private Long refundTime;
+
+}

+ 88 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderRefundQueryBo.java

@@ -0,0 +1,88 @@
+package com.zhongzheng.modules.top.goods.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.HashMap;
+
+import java.math.BigDecimal;
+import com.zhongzheng.common.core.domain.BaseEntity;
+
+/**
+ * 订单商品退款分页查询对象 top_old_order_refund
+ *
+ * @author ruoyi
+ * @date 2023-04-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("订单商品退款分页查询对象")
+public class TopOldOrderRefundQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 退款单号 */
+	@ApiModelProperty("退款单号")
+	private String refundSn;
+	/** 用户ID */
+	@ApiModelProperty("用户ID")
+	private Long userId;
+	/** 学员名称 */
+	@ApiModelProperty("学员名称")
+	private String userName;
+	/** 订单编号 */
+	@ApiModelProperty("订单编号")
+	private String orderSn;
+	/** 订单商品ID */
+	@ApiModelProperty("订单商品ID")
+	private Long orderGoodsId;
+	/** 商品id */
+	@ApiModelProperty("商品id")
+	private Long goodsId;
+	/** 商品名称 */
+	@ApiModelProperty("商品名称")
+	private String goodsName;
+	/** 退款金额 */
+	@ApiModelProperty("退款金额")
+	private BigDecimal refundFee;
+	/** 实际退款金额 */
+	@ApiModelProperty("实际退款金额")
+	private BigDecimal realRefundFee;
+	/** 状态 1正常 0关闭 */
+	@ApiModelProperty("状态 1正常 0关闭")
+	private Integer status;
+	/** 微信退款单号 */
+	@ApiModelProperty("微信退款单号")
+	private String wxpayRefundId;
+	/** 申请退款原因 */
+	@ApiModelProperty("申请退款原因")
+	private String applyReason;
+	/** 申请图片地址 , 拼接 */
+	@ApiModelProperty("申请图片地址 , 拼接")
+	private String applyImgs;
+	/** 退款类型 1B端,2C端 */
+	@ApiModelProperty("退款类型 1B端,2C端")
+	private Integer type;
+	/** 审批状态 0 待审核 1初审通过 2复审通过待退款 1待审核,2待退款,3已完成,-1未通过 */
+	@ApiModelProperty("审批状态 0 待审核 1初审通过 2复审通过待退款 1待审核,2待退款,3已完成,-1未通过")
+	private Integer periodStatus;
+	/** 退款时间 */
+	@ApiModelProperty("退款时间")
+	private Long refundTime;
+}

+ 47 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOrderRefundApplyBo.java

@@ -0,0 +1,47 @@
+package com.zhongzheng.modules.top.goods.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+/**
+ * 订单编辑对象 top_order
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Data
+@ApiModel("订单退款申请Bo")
+public class TopOrderRefundApplyBo {
+
+    @ApiModelProperty("当前时间戳")
+    @NotBlank(message = "当前时间戳不能为空")
+    private Long stamp;
+
+    @ApiModelProperty("签名")
+    @NotBlank(message = "签名不能为空")
+    private String sign;
+
+    /** 订单编号 */
+    @ApiModelProperty("订单编号")
+    private String orderSn;
+
+    @ApiModelProperty("订单商品标识ID")
+    private List<Long> signIds;
+
+    @ApiModelProperty("订单编号")
+    private String applyReason;
+
+    @ApiModelProperty("微信退款单号")
+    private String wxpayRefundId;
+
+    @ApiModelProperty("申请图片地址 , 拼接")
+    private String applyImgs;
+
+    @ApiModelProperty("退款类型 1B端,2C端")
+    private Integer type;
+
+}

+ 31 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopRefundOrderCheckBo.java

@@ -0,0 +1,31 @@
+package com.zhongzheng.modules.top.goods.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 订单编辑对象 top_order
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Data
+@ApiModel("订单审核对象")
+public class TopRefundOrderCheckBo {
+
+    @ApiModelProperty("$column.columnComment")
+    private Long orderId;
+
+    @ApiModelProperty("订单编号")
+    private String orderSn;
+
+    @ApiModelProperty("审核结果:1同意,2拒绝")
+    private Integer checkResult;
+
+    private Long loginId;
+
+    @ApiModelProperty("审核意见")
+    private String checkReason;
+
+}

+ 28 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopUpdateRemarkBo.java

@@ -0,0 +1,28 @@
+package com.zhongzheng.modules.top.goods.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 订单编辑对象 top_order
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Data
+@ApiModel("订单审核对象")
+public class TopUpdateRemarkBo {
+
+    @ApiModelProperty("$column.columnComment")
+    private List<Long> orderIdList;
+
+    @ApiModelProperty("订单编号")
+    private List<String> orderSnList;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+}

+ 5 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrder.java

@@ -76,12 +76,14 @@ private static final long serialVersionUID=1L;
     private Integer checkStatus;
     /** 审核意见 */
     private String checkReason;
-    /** 退款状态:0待审核,1未通过,2未退款,3已完成 */
+    /** 退款状态:0待审核,1正常,2未退款,3已完成,4未通过 */
     private Integer refundStatus;
     /** 账款状态:0未结清,1已结清 */
     private Integer creditStatus;
     /** 发票状态:0未开票,1已开票 */
     private Integer invoiceStatus;
+    /** 完单状态:0未完单,1已完单 */
+    private Integer finishStatus;
     /** 盈亏(元) */
     private BigDecimal orderProfit;
     /** 成本(元) */
@@ -109,4 +111,6 @@ private static final long serialVersionUID=1L;
     /** 预付款时间 */
     private Integer predictPayTime;
     private Long buyTime;
+
+    private Long tenantId;
 }

+ 4 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrderCheck.java

@@ -29,8 +29,8 @@ private static final long serialVersionUID=1L;
     private Long id;
     /** 审核类型:1B端订单审核 */
     private Integer checkType;
-    /** 审核角色key */
-    private String checkRole;
+    /** 审核角色Id */
+    private Long checkRole;
     /** 审核顺序 */
     private Integer checkSort;
     /**  状态 1正常 0关闭 */
@@ -39,4 +39,6 @@ private static final long serialVersionUID=1L;
     private Long createTime;
     /** 更新时间 */
     private Long updateTime;
+    /** 商户ID */
+    private Long tenantId;
 }

+ 48 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrderCheckLog.java

@@ -0,0 +1,48 @@
+package com.zhongzheng.modules.top.goods.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.zhongzheng.common.annotation.Excel;
+
+/**
+ * 订单退款审核记录对象 top_old_order_check_log
+ *
+ * @author ruoyi
+ * @date 2023-04-24
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("top_old_order_check_log")
+public class TopOldOrderCheckLog implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    /** 主键 */
+    @TableId(value = "id")
+    private Long id;
+    /** 退款单号 */
+    private String refundSn;
+    /** 角色ID */
+    private Long roleId;
+    /** 审核状态:0待审核,1已通过,-1未通过,(2待支付,3已支付) */
+    private Integer checkStatus;
+    /** 审核意见 */
+    private String checkReason;
+    /** 是否当前审核标记:0否,1是 */
+    private Integer checkSign;
+    /** 状态 1正常 0关闭 */
+    private Integer status;
+    /** 添加时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 修改时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    private Long tenantId;
+}

+ 3 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrderGoods.java

@@ -73,12 +73,13 @@ private static final long serialVersionUID=1L;
     private String businessFullName;
     /** 学习状态:0未开始,1学习中,2已结束 */
     private Integer studyStatus;
-    @ApiModelProperty("学员ID")
-    private Long userId;
+    @ApiModelProperty("旧系统自增ID")
+    private Long signId;
     @ApiModelProperty("学员名称")
     private String userName;
     @ApiModelProperty("学员身份证")
     private String userCard;
     @ApiModelProperty("学员手机号码")
     private String userPhone;
+    private Long tenantId;
 }

+ 69 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrderRefund.java

@@ -0,0 +1,69 @@
+package com.zhongzheng.modules.top.goods.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.zhongzheng.common.annotation.Excel;
+
+/**
+ * 订单商品退款对象 top_old_order_refund
+ *
+ * @author ruoyi
+ * @date 2023-04-24
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("top_old_order_refund")
+public class TopOldOrderRefund implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @TableId(value = "refund_id")
+    private Long refundId;
+    /** 退款单号 */
+    private String refundSn;
+    /** 用户ID */
+    private Long userId;
+    /** 学员名称 */
+    private String userName;
+    /** 订单编号 */
+    private String orderSn;
+    /** 订单商品ID */
+    private Long orderGoodsId;
+    /** 商品id */
+    private Long goodsId;
+    /** 商品名称 */
+    private String goodsName;
+    /** 退款金额 */
+    private BigDecimal refundFee;
+    /** 实际退款金额 */
+    private BigDecimal realRefundFee;
+    /** 添加时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 修改时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** 状态 1正常 0关闭 */
+    private Integer status;
+    /** 微信退款单号 */
+    private String wxpayRefundId;
+    /** 申请退款原因 */
+    private String applyReason;
+    /** 申请图片地址 , 拼接 */
+    private String applyImgs;
+    /** 退款类型 1B端,2C端 */
+    private Integer type;
+    /** 审批状态 0 待审核 1初审通过 2复审通过待退款 1待审核,2待退款,3已完成,-1未通过 */
+    private Integer periodStatus;
+    /** 退款时间 */
+    private Long refundTime;
+    /** 机构ID*/
+    private Long tenantId;
+}

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/mapper/TopOldOrderCheckLogMapper.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.top.goods.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.top.goods.domain.TopOldOrderCheckLog;
+
+/**
+ * 订单退款审核记录Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-04-24
+ */
+public interface TopOldOrderCheckLogMapper extends BaseMapper<TopOldOrderCheckLog> {
+
+}

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/mapper/TopOldOrderMapper.java

@@ -24,4 +24,9 @@ public interface TopOldOrderMapper extends BaseMapper<TopOldOrder> {
     List<String> queryBusinessBySn(@Param("orderSn") String orderSn);
 
     List<TopOldOrderVo> queryReceiveList(TopOldOrderQueryBo bo);
+
+    List<TopOldOrderVo> queryByOrderSns(@Param("orderSnList")List<String> orderSnList);
+
+    List<TopOldOrderVo> queryListAll();
+
 }

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/mapper/TopOldOrderRefundMapper.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.top.goods.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.top.goods.domain.TopOldOrderRefund;
+
+/**
+ * 订单商品退款Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-04-24
+ */
+public interface TopOldOrderRefundMapper extends BaseMapper<TopOldOrderRefund> {
+
+}

+ 53 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/ITopOldOrderCheckLogService.java

@@ -0,0 +1,53 @@
+package com.zhongzheng.modules.top.goods.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderCheckLogAddBo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderCheckLogEditBo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderCheckLogQueryBo;
+import com.zhongzheng.modules.top.goods.domain.TopOldOrderCheckLog;
+import com.zhongzheng.modules.top.goods.vo.TopOldOrderCheckLogVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 订单退款审核记录Service接口
+ *
+ * @author ruoyi
+ * @date 2023-04-24
+ */
+public interface ITopOldOrderCheckLogService extends IService<TopOldOrderCheckLog> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	TopOldOrderCheckLogVo queryById(Long id);
+
+	/**
+	 * 查询列表
+	 */
+	List<TopOldOrderCheckLogVo> queryList(TopOldOrderCheckLogQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入订单退款审核记录
+	 * @param bo 订单退款审核记录新增业务对象
+	 * @return
+	 */
+	Boolean insertByAddBo(TopOldOrderCheckLogAddBo bo);
+
+	/**
+	 * 根据编辑业务对象修改订单退款审核记录
+	 * @param bo 订单退款审核记录编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(TopOldOrderCheckLogEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 53 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/ITopOldOrderRefundService.java

@@ -0,0 +1,53 @@
+package com.zhongzheng.modules.top.goods.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderRefundAddBo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderRefundEditBo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderRefundQueryBo;
+import com.zhongzheng.modules.top.goods.domain.TopOldOrderRefund;
+import com.zhongzheng.modules.top.goods.vo.TopOldOrderRefundVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 订单商品退款Service接口
+ *
+ * @author ruoyi
+ * @date 2023-04-24
+ */
+public interface ITopOldOrderRefundService extends IService<TopOldOrderRefund> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	TopOldOrderRefundVo queryById(Long refundId);
+
+	/**
+	 * 查询列表
+	 */
+	List<TopOldOrderRefundVo> queryList(TopOldOrderRefundQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入订单商品退款
+	 * @param bo 订单商品退款新增业务对象
+	 * @return
+	 */
+	Boolean insertByAddBo(TopOldOrderRefundAddBo bo);
+
+	/**
+	 * 根据编辑业务对象修改订单商品退款
+	 * @param bo 订单商品退款编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(TopOldOrderRefundEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/ITopOldOrderService.java

@@ -6,7 +6,9 @@ import com.zhongzheng.modules.top.goods.bo.*;
 import com.zhongzheng.modules.top.goods.domain.TopOldOrder;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderGoodsListVo;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderVo;
+import com.zhongzheng.modules.top.goods.vo.TopOrderStatisticsVo;
 import com.zhongzheng.modules.top.order.vo.TopOldOrderExportVo;
+import com.zhongzheng.modules.top.goods.vo.TopRefundOrderDetailVo;
 
 import java.util.Collection;
 import java.util.List;
@@ -58,4 +60,17 @@ public interface ITopOldOrderService extends IService<TopOldOrder> {
 	List<TopOldOrderVo> queryReceiveList(TopOldOrderQueryBo bo);
 
 	List<TopOldOrderExportVo> queryReceiveListExport(TopOldOrderQueryBo bo);
+
+    boolean orderRefundApply(TopOrderRefundApplyBo bo);
+
+	TopRefundOrderDetailVo refundOrderDetail(String orderSn);
+
+	boolean refundOrderCheck(TopRefundOrderCheckBo bo);
+
+	boolean updateRemark(TopUpdateRemarkBo bo);
+
+	boolean finishOrder(TopFinishOrderBo bo);
+
+	TopOrderStatisticsVo statisticsOrder();
+
 }

+ 104 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderCheckLogServiceImpl.java

@@ -0,0 +1,104 @@
+package com.zhongzheng.modules.top.goods.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderCheckLogAddBo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderCheckLogEditBo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderCheckLogQueryBo;
+import com.zhongzheng.modules.top.goods.domain.TopOldOrderCheckLog;
+import com.zhongzheng.modules.top.goods.mapper.TopOldOrderCheckLogMapper;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderCheckLogService;
+import com.zhongzheng.modules.top.goods.vo.TopOldOrderCheckLogVo;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.Page;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 订单退款审核记录Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-04-24
+ */
+@Service
+public class TopOldOrderCheckLogServiceImpl extends ServiceImpl<TopOldOrderCheckLogMapper, TopOldOrderCheckLog> implements ITopOldOrderCheckLogService {
+
+    @Override
+    public TopOldOrderCheckLogVo queryById(Long id){
+        TopOldOrderCheckLog db = this.baseMapper.selectById(id);
+        return BeanUtil.toBean(db, TopOldOrderCheckLogVo.class);
+    }
+
+    @Override
+    public List<TopOldOrderCheckLogVo> queryList(TopOldOrderCheckLogQueryBo bo) {
+        LambdaQueryWrapper<TopOldOrderCheckLog> lqw = Wrappers.lambdaQuery();
+        lqw.eq(StrUtil.isNotBlank(bo.getRefundSn()), TopOldOrderCheckLog::getRefundSn, bo.getRefundSn());
+        lqw.eq(bo.getRoleId() != null, TopOldOrderCheckLog::getRoleId, bo.getRoleId());
+        lqw.eq(bo.getCheckStatus() != null, TopOldOrderCheckLog::getCheckStatus, bo.getCheckStatus());
+        lqw.eq(StrUtil.isNotBlank(bo.getCheckReason()), TopOldOrderCheckLog::getCheckReason, bo.getCheckReason());
+        lqw.eq(bo.getCheckSign() != null, TopOldOrderCheckLog::getCheckSign, bo.getCheckSign());
+        lqw.eq(bo.getStatus() != null, TopOldOrderCheckLog::getStatus, bo.getStatus());
+        return entity2Vo(this.list(lqw));
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<TopOldOrderCheckLogVo> entity2Vo(Collection<TopOldOrderCheckLog> collection) {
+        List<TopOldOrderCheckLogVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, TopOldOrderCheckLogVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<TopOldOrderCheckLog> page = (Page<TopOldOrderCheckLog>)collection;
+            Page<TopOldOrderCheckLogVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public Boolean insertByAddBo(TopOldOrderCheckLogAddBo bo) {
+        TopOldOrderCheckLog add = BeanUtil.toBean(bo, TopOldOrderCheckLog.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        return this.save(add);
+    }
+
+    @Override
+    public Boolean updateByEditBo(TopOldOrderCheckLogEditBo bo) {
+        TopOldOrderCheckLog update = BeanUtil.toBean(bo, TopOldOrderCheckLog.class);
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(TopOldOrderCheckLog entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+}

+ 115 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderRefundServiceImpl.java

@@ -0,0 +1,115 @@
+package com.zhongzheng.modules.top.goods.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderRefundAddBo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderRefundEditBo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderRefundQueryBo;
+import com.zhongzheng.modules.top.goods.domain.TopOldOrderRefund;
+import com.zhongzheng.modules.top.goods.mapper.TopOldOrderRefundMapper;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderRefundService;
+import com.zhongzheng.modules.top.goods.vo.TopOldOrderRefundVo;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.Page;
+
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 订单商品退款Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-04-24
+ */
+@Service
+public class TopOldOrderRefundServiceImpl extends ServiceImpl<TopOldOrderRefundMapper, TopOldOrderRefund> implements ITopOldOrderRefundService {
+
+    @Override
+    public TopOldOrderRefundVo queryById(Long refundId){
+        TopOldOrderRefund db = this.baseMapper.selectById(refundId);
+        return BeanUtil.toBean(db, TopOldOrderRefundVo.class);
+    }
+
+    @Override
+    public List<TopOldOrderRefundVo> queryList(TopOldOrderRefundQueryBo bo) {
+        LambdaQueryWrapper<TopOldOrderRefund> lqw = Wrappers.lambdaQuery();
+        lqw.eq(StrUtil.isNotBlank(bo.getRefundSn()), TopOldOrderRefund::getRefundSn, bo.getRefundSn());
+        lqw.eq(bo.getUserId() != null, TopOldOrderRefund::getUserId, bo.getUserId());
+        lqw.like(StrUtil.isNotBlank(bo.getUserName()), TopOldOrderRefund::getUserName, bo.getUserName());
+        lqw.eq(StrUtil.isNotBlank(bo.getOrderSn()), TopOldOrderRefund::getOrderSn, bo.getOrderSn());
+        lqw.eq(bo.getOrderGoodsId() != null, TopOldOrderRefund::getOrderGoodsId, bo.getOrderGoodsId());
+        lqw.eq(bo.getGoodsId() != null, TopOldOrderRefund::getGoodsId, bo.getGoodsId());
+        lqw.like(StrUtil.isNotBlank(bo.getGoodsName()), TopOldOrderRefund::getGoodsName, bo.getGoodsName());
+        lqw.eq(bo.getRefundFee() != null, TopOldOrderRefund::getRefundFee, bo.getRefundFee());
+        lqw.eq(bo.getRealRefundFee() != null, TopOldOrderRefund::getRealRefundFee, bo.getRealRefundFee());
+        lqw.eq(bo.getStatus() != null, TopOldOrderRefund::getStatus, bo.getStatus());
+        lqw.eq(StrUtil.isNotBlank(bo.getWxpayRefundId()), TopOldOrderRefund::getWxpayRefundId, bo.getWxpayRefundId());
+        lqw.eq(StrUtil.isNotBlank(bo.getApplyReason()), TopOldOrderRefund::getApplyReason, bo.getApplyReason());
+        lqw.eq(StrUtil.isNotBlank(bo.getApplyImgs()), TopOldOrderRefund::getApplyImgs, bo.getApplyImgs());
+        lqw.eq(bo.getType() != null, TopOldOrderRefund::getType, bo.getType());
+        lqw.eq(bo.getPeriodStatus() != null, TopOldOrderRefund::getPeriodStatus, bo.getPeriodStatus());
+        lqw.eq(bo.getRefundTime() != null, TopOldOrderRefund::getRefundTime, bo.getRefundTime());
+        return entity2Vo(this.list(lqw));
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<TopOldOrderRefundVo> entity2Vo(Collection<TopOldOrderRefund> collection) {
+        List<TopOldOrderRefundVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, TopOldOrderRefundVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<TopOldOrderRefund> page = (Page<TopOldOrderRefund>)collection;
+            Page<TopOldOrderRefundVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public Boolean insertByAddBo(TopOldOrderRefundAddBo bo) {
+        TopOldOrderRefund add = BeanUtil.toBean(bo, TopOldOrderRefund.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        return this.save(add);
+    }
+
+    @Override
+    public Boolean updateByEditBo(TopOldOrderRefundEditBo bo) {
+        TopOldOrderRefund update = BeanUtil.toBean(bo, TopOldOrderRefund.class);
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(TopOldOrderRefund entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+}

+ 310 - 18
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java

@@ -3,12 +3,14 @@ package com.zhongzheng.modules.top.goods.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Validator;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.Page;
 import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.modules.course.domain.CourseSubject;
 import com.zhongzheng.modules.course.service.ICourseSubjectService;
@@ -16,29 +18,29 @@ import com.zhongzheng.modules.grade.domain.ClassGradeUser;
 import com.zhongzheng.modules.grade.domain.UserPeriod;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.grade.service.IUserPeriodService;
+import com.zhongzheng.modules.order.domain.Order;
+import com.zhongzheng.modules.order.domain.OrderGoods;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
+import com.zhongzheng.modules.order.service.IOrderService;
 import com.zhongzheng.modules.top.goods.bo.*;
-import com.zhongzheng.modules.top.goods.domain.TopOldOrder;
-import com.zhongzheng.modules.top.goods.domain.TopOldOrderAttachment;
-import com.zhongzheng.modules.top.goods.domain.TopOldOrderCheck;
-import com.zhongzheng.modules.top.goods.domain.TopOldOrderGoods;
+import com.zhongzheng.modules.top.goods.domain.*;
 import com.zhongzheng.modules.top.goods.mapper.TopOldOrderMapper;
-import com.zhongzheng.modules.top.goods.service.ITopOldOrderAttachmentService;
-import com.zhongzheng.modules.top.goods.service.ITopOldOrderCheckService;
-import com.zhongzheng.modules.top.goods.service.ITopOldOrderGoodsService;
-import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
-import com.zhongzheng.modules.top.goods.vo.TopOldOrderAttachmentVo;
-import com.zhongzheng.modules.top.goods.vo.TopOldOrderGoodsListVo;
-import com.zhongzheng.modules.top.goods.vo.TopOldOrderVo;
+import com.zhongzheng.modules.top.goods.service.*;
+import com.zhongzheng.modules.top.goods.vo.*;
+import com.zhongzheng.modules.top.user.domain.TopSysRole;
+import com.zhongzheng.modules.top.user.domain.TopSysUserRole;
+import com.zhongzheng.modules.top.user.service.ITopSysRoleService;
+import com.zhongzheng.modules.top.user.service.ITopSysUserRoleService;
 import com.zhongzheng.modules.top.order.vo.TopOldOrderExportVo;
 import com.zhongzheng.modules.top.user.service.ITopSysUserService;
+import com.zhongzheng.modules.user.domain.User;
+import com.zhongzheng.modules.user.service.IUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -74,6 +76,27 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
     @Autowired
     private ITopSysUserService topSysUserService;
 
+    @Autowired
+    private ITopSysUserRoleService topSysUserRoleService;
+
+    @Autowired
+    private ITopOldOrderRefundService topOldOrderRefundService;
+
+    @Autowired
+    private IOrderService orderService;
+
+    @Autowired
+    private IUserService userService;
+
+    @Autowired
+    private ITopOldOrderCheckService topOldOrderCheckService;
+
+    @Autowired
+    private ITopOldOrderCheckLogService topOldOrderCheckLogService;
+
+    @Autowired
+    private ITopSysRoleService topSysRoleService;
+
     @Override
     public TopOldOrderVo queryById(String orderSn){
         //查询视图 v_top_order
@@ -135,7 +158,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
         validEntityBeforeSave(add);
         add.setCreateTime(DateUtils.getNowTime());
         add.setUpdateTime(DateUtils.getNowTime());
-        //根据默认业务分类计算订单盈亏
+        //TODO 根据默认业务分类计算订单盈亏
         this.save(add);
         //订单商品
         if (CollectionUtils.isNotEmpty(bo.getOrderGoodsList())){
@@ -225,7 +248,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
             if (CollectionUtils.isNotEmpty(goodsList)){
                 userCount = goodsList.stream().map(TopOldOrderGoods::getUserCard).collect(Collectors.toSet()).size();
             }
-            //老系统查询学习状态
+            //TODO 老系统查询学习状态
 
             //数据处理
             for (TopOldOrderGoodsListVo item : list) {
@@ -237,16 +260,285 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
 
     @Override
     public boolean checkOrder(TopOldOrderCheckBo bo) {
+        TopOldOrder oldOrder = getOne(new LambdaQueryWrapper<TopOldOrder>().eq(TopOldOrder::getOrderSn, bo.getOrderSn()).last("limit 1"));
+        if (ObjectUtils.isNull(oldOrder)){
+            throw new CustomException("订单号有误!请检查");
+        }
         //校验当前登入角色
-        List<String>  roleKeys = topSysUserService.getRoleKeyById(bo.getLoginId());
+        List<TopSysUserRole> userRoles = topSysUserRoleService.list(new LambdaQueryWrapper<TopSysUserRole>().eq(TopSysUserRole::getUserId, bo.getOrderId()));
+        if (CollectionUtils.isEmpty(userRoles)){
+            throw new CustomException("当前账号没有审核权限");
+        }
         List<TopOldOrderCheck> list = topOrderCheckService
                 .list(new LambdaQueryWrapper<TopOldOrderCheck>().eq(TopOldOrderCheck::getCheckType, 1));
         if (CollectionUtils.isEmpty(list)){
-            throw new CustomException("");
+            throw new CustomException("没有匹配的审核流程!请检查");
+        }
+        List<Long> roleIdList = userRoles.stream().map(TopSysUserRole::getRoleId).collect(Collectors.toList());
+        if (!list.stream().anyMatch(x -> roleIdList.contains(x.getCheckRole()))){
+            throw new CustomException("当前账号没有审核权限");
+        }
+        oldOrder.setCheckStatus(bo.getCheckStatus());
+        oldOrder.setCheckReason(bo.getCheckReason());
+        updateById(oldOrder);
+        //TODO 订单审核通知业务系统
+        return true;
+    }
+
+    @Override
+    public boolean orderRefundApply(TopOrderRefundApplyBo bo) {
+        //B端订单退款申请
+        TopOldOrder order = getOne(new LambdaQueryWrapper<TopOldOrder>().eq(TopOldOrder::getOrderSn, bo.getOrderSn()).eq(TopOldOrder::getStatus, 1));
+        if (ObjectUtils.isNull(order)){
+            throw new CustomException("订单号有误");
+        }
+        Long tenantId = order.getTenantId();
+        if (order.getRefundStatus() == 2 || order.getRefundStatus() == 0){
+            throw new CustomException("订单正在审核中!请先处理");
+        }
+        List<TopOldOrderGoods> orderGoods = topOrderGoodsService
+                .list(new LambdaQueryWrapper<TopOldOrderGoods>()
+                .eq(TopOldOrderGoods::getOrderSn, bo.getOrderSn())
+                .eq(TopOldOrderGoods::getStatus, 1)
+                .in(TopOldOrderGoods::getSignId, bo.getSignIds()));
+        if (CollectionUtils.isEmpty(orderGoods)){
+            throw new CustomException("订单学员课程信息获取有误");
         }
+        if (orderGoods.stream().allMatch(x -> x.getRefundStatus()!=0 || x.getRefundStatus()!=3)){
+            throw new CustomException("订单申请退款学员有误,请检查");
+        }
+
+        //创建退款申请
+        String refundSn = DateUtils.getDateOrderSn();//退款单号
+        List<TopOldOrderRefund> orderRefundRefund = orderGoods.stream().map(item -> {
+            TopOldOrderRefund orderRefund = new TopOldOrderRefund();
+            orderRefund.setRefundSn(refundSn);
+            orderRefund.setUserName(item.getUserName());
+            orderRefund.setOrderSn(order.getOrderSn());
+            orderRefund.setOrderGoodsId(item.getOrderGoodsId());
+            orderRefund.setGoodsId(item.getGoodsId());
+            orderRefund.setGoodsName(item.getGoodsName());
+            orderRefund.setRefundFee(item.getGoodsRealPrice());
+            orderRefund.setUpdateTime(DateUtils.getNowTime());
+            orderRefund.setCreateTime(DateUtils.getNowTime());
+            orderRefund.setTenantId(item.getTenantId());
+            orderRefund.setWxpayRefundId(bo.getWxpayRefundId());
+            orderRefund.setApplyReason(bo.getApplyReason());
+            orderRefund.setApplyImgs(bo.getApplyImgs());
+            orderRefund.setType(bo.getType());
+            orderRefund.setPeriodStatus(0);//待审核
+            orderRefund.setTenantId(tenantId);
+            return orderRefund;
+        }).collect(Collectors.toList());
+        topOldOrderRefundService.saveBatch(orderRefundRefund);
+        //修改订单状态
+        topOrderGoodsService.update(new LambdaUpdateWrapper<TopOldOrderGoods>()
+        .in(TopOldOrderGoods::getOrderGoodsId,orderGoods.stream().map(TopOldOrderGoods::getOrderGoodsId).collect(Collectors.toList()))
+        .set(TopOldOrderGoods::getRefundStatus,1));
+
+        order.setRefundStatus(0);//订单待审核
+        updateById(order);
+
+        //处理新系统订单
+        if (ObjectUtils.isNotNull(order.getInputOrderSn())){
+            orderGoods.forEach(item -> {
+                User user = userService.getOne(new LambdaQueryWrapper<User>()
+                        .eq(User::getIdCard, EncryptHandler.encrypt(item.getUserCard())));
+                if (ObjectUtils.isNotNull(user)){
+                    //处理新系统订单商品
+                    List<Order> list = orderService
+                            .list(new LambdaUpdateWrapper<Order>()
+                                    .eq(Order::getInputOrderSn, order.getInputOrderSn())
+                                    .eq(Order::getStatus, 1)
+                                    .eq(Order::getUserId,user.getUserId()));
+                    if (CollectionUtils.isNotEmpty(list)){
+                        List<OrderGoods> goodsList = orderGoodsService.list(new LambdaQueryWrapper<OrderGoods>()
+                                .in(OrderGoods::getOrderSn, list.stream().map(Order::getOrderSn).collect(Collectors.toList()))
+                                .eq(OrderGoods::getStatus, 1));
+                        //过滤找出要退款的商品
+                        List<OrderGoods> collect = goodsList.stream().filter(x -> x.getGoodsId().equals(item.getGoodsId())).collect(Collectors.toList());
+                        if (CollectionUtils.isNotEmpty(collect)){
+                            //修改订单状态
+                            List<Long> orderGoodsIds = collect.stream().map(OrderGoods::getOrderGoodsId).collect(Collectors.toList());
+                            orderGoodsService.update(new LambdaUpdateWrapper<OrderGoods>()
+                                            .set(OrderGoods::getRefundStatus,1)//申请退款
+                                            .in(OrderGoods::getOrderGoodsId,orderGoodsIds));
+                        }
+                    }
+                }
+            });
+        }
+
+        //创建订单退款审核流程
+        List<TopOldOrderCheck> checkList = topOldOrderCheckService
+                .list(new LambdaQueryWrapper<TopOldOrderCheck>().eq(TopOldOrderCheck::getCheckType, 2)
+                        .orderByAsc(TopOldOrderCheck::getCheckSort));
+        if (CollectionUtils.isNotEmpty(checkList)){
+            List<TopOldOrderCheckLog> logs = new ArrayList<>();
+            for (int i = 0; i < checkList.size(); i++) {
+                TopOldOrderCheck check = checkList.get(i);
+                TopOldOrderCheckLog log = new TopOldOrderCheckLog();
+                log.setRefundSn(refundSn);
+                log.setRoleId(check.getCheckRole());
+                log.setCheckStatus(0);
+                log.setUpdateTime(DateUtils.getNowTime());
+                log.setCreateTime(DateUtils.getNowTime());
+                log.setTenantId(tenantId);
+                log.setCheckSign(i>0?0:1);
+                logs.add(log);
+            }
+            topOldOrderCheckLogService.saveBatch(logs);
+        }
+        return true;
+    }
+
+    /**
+     * 订单退款审核详情
+     * @author change
+     * @date 2023/4/24 19:18
+     * @param orderSn
+     * @return com.zhongzheng.modules.top.goods.vo.TopRefundOrderDetailVo
+     */
+    @Override
+    public TopRefundOrderDetailVo refundOrderDetail(String orderSn) {
+        TopRefundOrderDetailVo vo = new TopRefundOrderDetailVo();
+        //查询视图 v_top_order
+        TopOldOrderVo orderVo = baseMapper.queryById(orderSn);
+        if (ObjectUtils.isNull(orderVo)){
+            throw new CustomException("订单号错误!");
+        }
+        List<TopOldOrderRefund> refunds = topOldOrderRefundService
+                .list(new LambdaQueryWrapper<TopOldOrderRefund>().eq(TopOldOrderRefund::getOrderSn, orderSn)
+                .eq(TopOldOrderRefund::getStatus,1));
+        if (CollectionUtils.isEmpty(refunds)){
+            return vo;
+        }
+        vo.setOrderId(orderVo.getOrderId());
+        vo.setOrderSn(orderVo.getOrderSn());
+        Map<String, List<TopOldOrderRefund>> map = refunds.stream().collect(Collectors.groupingBy(TopOldOrderRefund::getRefundSn));
+        if (map.keySet().size() > 1){
+            //订单多次提交申请
+            map.forEach((k,v) -> {
+                if (v.get(0).getPeriodStatus() == 0 || v.get(0).getPeriodStatus() == 1 || v.get(0).getPeriodStatus() == 2){
+                    vo.setRefundSn(k);
+                    BigDecimal reduce = v.stream().map(TopOldOrderRefund::getRefundFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    vo.setRefundFee(reduce);
+                    vo.setRefundReason(v.get(0).getApplyReason());
+                }
+            });
+        }else {
+            vo.setRefundSn(refunds.get(0).getRefundSn());
+            BigDecimal reduce = refunds.stream().map(TopOldOrderRefund::getRefundFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+            vo.setRefundFee(reduce);
+            vo.setRefundReason(refunds.get(0).getApplyReason());
+        }
+        //审核进度
+        List<TopOldOrderCheckLog> checkLogs = topOldOrderCheckLogService
+                .list(new LambdaQueryWrapper<TopOldOrderCheckLog>().eq(TopOldOrderCheckLog::getRefundSn, vo.getRefundSn()).eq(TopOldOrderCheckLog::getStatus, 1));
+        if (CollectionUtils.isNotEmpty(checkLogs)){
+            List<TopOldOrderCheckLogVo> checkLogVoList = checkLogs.stream().map(item -> {
+                TopOldOrderCheckLogVo logVo = BeanUtil.toBean(item, TopOldOrderCheckLogVo.class);
+                //角色名称
+                TopSysRole role = topSysRoleService.getById(logVo.getRoleId());
+                logVo.setRoleName(role.getRoleName());
+                return logVo;
+            }).collect(Collectors.toList());
+            vo.setCheckLogVos(checkLogVoList);
+        }
+        return vo;
+    }
+
+    /**
+     * 订单退款审核
+     * @author change
+     * @date 2023/4/24 20:05
+     * @param bo
+     * @return boolean
+     */
+    @Override
+    public boolean refundOrderCheck(TopRefundOrderCheckBo bo) {
+
         return false;
     }
 
+    @Override
+    public boolean updateRemark(TopUpdateRemarkBo bo) {
+        //查询视图 v_top_order
+        List<TopOldOrderVo> orderVos = baseMapper.queryByOrderSns(bo.getOrderSnList());
+        if (CollectionUtils.isEmpty(orderVos)){
+            return false;
+        }
+        Map<Integer, List<TopOldOrderVo>> map = orderVos.stream().collect(Collectors.groupingBy(TopOldOrderVo::getOrderFrom));
+        map.forEach((k,v) -> {
+            if (k == 1){
+                //新系统订单
+                orderService.update(new LambdaUpdateWrapper<Order>()
+                .set(Order::getRemark,bo.getRemark())
+                .in(Order::getOrderSn,v.stream().map(TopOldOrderVo::getOrderSn).collect(Collectors.toList())));
+            }else {
+                update(new LambdaUpdateWrapper<TopOldOrder>()
+                        .set(TopOldOrder::getRemark,bo.getRemark())
+                        .in(TopOldOrder::getOrderSn,v.stream().map(TopOldOrderVo::getOrderSn).collect(Collectors.toList())));
+            }
+        });
+        return true;
+    }
+
+    @Override
+    public boolean finishOrder(TopFinishOrderBo bo) {
+        //todo 完单角色校验
+
+        return update(new LambdaUpdateWrapper<TopOldOrder>()
+        .set(TopOldOrder::getFinishStatus,bo.getFinishStatus())
+        .in(TopOldOrder::getOrderSn,bo.getOrderSnList()));
+    }
+
+    @Override
+    public TopOrderStatisticsVo statisticsOrder() {
+        TopOrderStatisticsVo vo = new TopOrderStatisticsVo();
+        //订单统计
+        //查询视图 v_top_order
+        List<TopOldOrderVo> vos = baseMapper.queryListAll();
+        if (CollectionUtils.isEmpty(vos)){
+            return vo;
+        }
+        BigDecimal profit = vos.stream().filter(x -> ObjectUtils.isNotNull(x.getOrderProfit())).map(TopOldOrderVo::getOrderProfit).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal price = vos.stream().filter(x -> ObjectUtils.isNotNull(x.getOrderPrice())).map(TopOldOrderVo::getOrderPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal received = vos.stream().filter(x -> ObjectUtils.isNotNull(x.getOrderReceived())).map(TopOldOrderVo::getOrderReceived).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal refunded = vos.stream().filter(x -> ObjectUtils.isNotNull(x.getOrderRefunded())).map(TopOldOrderVo::getOrderRefunded).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal uncollected = vos.stream().filter(x -> ObjectUtils.isNotNull(x.getOrderUncollected())).map(TopOldOrderVo::getOrderUncollected).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal practical = received.subtract(refunded);
+        BigDecimal cost = vos.stream().filter(x -> ObjectUtils.isNotNull(x.getOrderCost())).map(TopOldOrderVo::getOrderCost).reduce(BigDecimal.ZERO, BigDecimal::add);
+        //订单学员数
+        Integer orderUserNum = 0;
+        for (TopOldOrderVo orderVo : vos) {
+            if (orderVo.getOrderFrom() == 2){
+                //业务系统B端订单
+                List<TopOldOrderGoods> list = topOrderGoodsService
+                        .list(new LambdaQueryWrapper<TopOldOrderGoods>().eq(TopOldOrderGoods::getOrderSn, orderVo.getOrderSn()).eq(TopOldOrderGoods::getStatus, 1));
+                if (CollectionUtils.isNotEmpty(list)){
+                    Set<String> collect = list.stream().map(TopOldOrderGoods::getUserCard).collect(Collectors.toSet());
+                    orderUserNum += collect.size();
+                }
+            }else {
+                //C端  一单一人
+                orderUserNum += 1;
+            }
+        }
+        Integer orderNum = vos.size();
+
+        vo.setOrderProfitTotal(profit);
+        vo.setOrderPriceTotal(price);
+        vo.setOrderReceivedTotal(received);
+        vo.setOrderRefundedTotal(refunded);
+        vo.setOrderUncollectedTotal(uncollected);
+        vo.setPracticalPriceTotal(practical);
+        vo.setOrderCostTotal(cost);
+        vo.setOrderUserNum(orderUserNum);
+        vo.setOrderNum(orderNum);
+        return vo;
+    }
+
     @Override
     public List<TopOldOrderVo> queryReceiveList(TopOldOrderQueryBo bo) {
         List<TopOldOrderVo> list = this.baseMapper.queryReceiveList(bo);

+ 53 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderCheckLogVo.java

@@ -0,0 +1,53 @@
+package com.zhongzheng.modules.top.goods.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 订单退款审核记录视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2023-04-24
+ */
+@Data
+@ApiModel("订单退款审核记录视图对象")
+public class TopOldOrderCheckLogVo {
+	private static final long serialVersionUID = 1L;
+
+	/** 主键 */
+	@ApiModelProperty("主键")
+	private Long id;
+
+	/** 退款单号 */
+	@Excel(name = "退款单号")
+	@ApiModelProperty("退款单号")
+	private String refundSn;
+	/** 角色ID */
+	@Excel(name = "角色ID")
+	@ApiModelProperty("角色ID")
+	private Long roleId;
+	@ApiModelProperty("角色名称")
+	private String roleName;
+	/** 审核状态:0待审核,1已通过,-1未通过,(2待支付,3已支付) */
+	@Excel(name = "审核状态:0待审核,1已通过,-1未通过," , readConverterExp = "2=待支付,3已支付")
+	@ApiModelProperty("审核状态:0待审核,1已通过,-1未通过,(2待支付,3已支付)")
+	private Integer checkStatus;
+	/** 审核意见 */
+	@Excel(name = "审核意见")
+	@ApiModelProperty("审核意见")
+	private String checkReason;
+	/** 是否当前审核标记:0否,1是 */
+	@Excel(name = "是否当前审核标记:0否,1是")
+	@ApiModelProperty("是否当前审核标记:0否,1是")
+	private Integer checkSign;
+	/** 状态 1正常 0关闭 */
+	@Excel(name = "状态 1正常 0关闭")
+	@ApiModelProperty("状态 1正常 0关闭")
+	private Integer status;
+}

+ 2 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderGoodsVo.java

@@ -98,8 +98,8 @@ public class TopOldOrderGoodsVo {
 	@Excel(name = "学习状态:0未开始,1学习中,2已结束")
 	@ApiModelProperty("学习状态:0未开始,1学习中,2已结束")
 	private Integer studyStatus;
-	@ApiModelProperty("学员ID")
-	private Long userId;
+	@ApiModelProperty("旧系统自增ID")
+	private Long signId;
 	@ApiModelProperty("学员名称")
 	private String userName;
 	@ApiModelProperty("学员身份证")

+ 92 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderRefundVo.java

@@ -0,0 +1,92 @@
+package com.zhongzheng.modules.top.goods.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.math.BigDecimal;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 订单商品退款视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2023-04-24
+ */
+@Data
+@ApiModel("订单商品退款视图对象")
+public class TopOldOrderRefundVo {
+	private static final long serialVersionUID = 1L;
+
+	/** $pkColumn.columnComment */
+	@ApiModelProperty("$pkColumn.columnComment")
+	private Long refundId;
+
+	/** 退款单号 */
+	@Excel(name = "退款单号")
+	@ApiModelProperty("退款单号")
+	private String refundSn;
+	/** 用户ID */
+	@Excel(name = "用户ID")
+	@ApiModelProperty("用户ID")
+	private Long userId;
+	/** 学员名称 */
+	@Excel(name = "学员名称")
+	@ApiModelProperty("学员名称")
+	private String userName;
+	/** 订单编号 */
+	@Excel(name = "订单编号")
+	@ApiModelProperty("订单编号")
+	private String orderSn;
+	/** 订单商品ID */
+	@Excel(name = "订单商品ID")
+	@ApiModelProperty("订单商品ID")
+	private Long orderGoodsId;
+	/** 商品id */
+	@Excel(name = "商品id")
+	@ApiModelProperty("商品id")
+	private Long goodsId;
+	/** 商品名称 */
+	@Excel(name = "商品名称")
+	@ApiModelProperty("商品名称")
+	private String goodsName;
+	/** 退款金额 */
+	@Excel(name = "退款金额")
+	@ApiModelProperty("退款金额")
+	private BigDecimal refundFee;
+	/** 实际退款金额 */
+	@Excel(name = "实际退款金额")
+	@ApiModelProperty("实际退款金额")
+	private BigDecimal realRefundFee;
+	/** 状态 1正常 0关闭 */
+	@Excel(name = "状态 1正常 0关闭")
+	@ApiModelProperty("状态 1正常 0关闭")
+	private Integer status;
+	/** 微信退款单号 */
+	@Excel(name = "微信退款单号")
+	@ApiModelProperty("微信退款单号")
+	private String wxpayRefundId;
+	/** 申请退款原因 */
+	@Excel(name = "申请退款原因")
+	@ApiModelProperty("申请退款原因")
+	private String applyReason;
+	/** 申请图片地址 , 拼接 */
+	@Excel(name = "申请图片地址 , 拼接")
+	@ApiModelProperty("申请图片地址 , 拼接")
+	private String applyImgs;
+	/** 退款类型 1B端,2C端 */
+	@Excel(name = "退款类型 1B端,2C端")
+	@ApiModelProperty("退款类型 1B端,2C端")
+	private Integer type;
+	/** 审批状态 0 待审核 1初审通过 2复审通过待退款 1待审核,2待退款,3已完成,-1未通过 */
+	@Excel(name = "审批状态 0 待审核 1初审通过 2复审通过待退款 1待审核,2待退款,3已完成,-1未通过")
+	@ApiModelProperty("审批状态 0 待审核 1初审通过 2复审通过待退款 1待审核,2待退款,3已完成,-1未通过")
+	private Integer periodStatus;
+	/** 退款时间 */
+	@Excel(name = "退款时间")
+	@ApiModelProperty("退款时间")
+	private Long refundTime;
+}

+ 7 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderVo.java

@@ -108,8 +108,8 @@ public class TopOldOrderVo {
 	@ApiModelProperty("审核意见")
 	private String checkReason;
 	/** 退款状态:0待审核,1未通过,2未退款,3已完成 */
-	@Excel(name = "退款状态:0待审核,1未通过,2未退款,3已完成")
-	@ApiModelProperty("退款状态:0待审核,1未通过,2未退款,3已完成")
+	@Excel(name = "退款状态:0待审核,1正常,2未退款,3已完成,4未通过")
+	@ApiModelProperty("退款状态:0待审核,1正常,2未退款,3已完成,4未通过")
 	private Integer refundStatus;
 	/** 账款状态:0未结清,1已结清 */
 	@Excel(name = "账款状态:0未结清,1已结清")
@@ -119,6 +119,9 @@ public class TopOldOrderVo {
 	@Excel(name = "发票状态:0未开票,1已开票")
 	@ApiModelProperty("发票状态:0未开票,1已开票")
 	private Integer invoiceStatus;
+	/** 完单状态:0未完单,1已完单 */
+	@ApiModelProperty("完单状态:0未完单,1已完单")
+	private Integer finishStatus;
 	/** 盈亏(元) */
 	@Excel(name = "盈亏" , readConverterExp = "元=")
 	@ApiModelProperty("盈亏(元)")
@@ -140,8 +143,8 @@ public class TopOldOrderVo {
 	@ApiModelProperty("未收账款(元)")
 	private BigDecimal orderUncollected;
 	/** 实收账款(元) */
-	@Excel(name = "收账款" , readConverterExp = "元=")
-	@ApiModelProperty("收账款(元)")
+	@Excel(name = "收账款" , readConverterExp = "元=")
+	@ApiModelProperty("收账款(元)")
 	private BigDecimal orderReceived;
 	/** 备注 */
 	@Excel(name = "备注")

+ 47 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOrderStatisticsVo.java

@@ -0,0 +1,47 @@
+package com.zhongzheng.modules.top.goods.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 订单编辑对象 top_order
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Data
+@ApiModel("订单统计对象")
+public class TopOrderStatisticsVo {
+
+    @ApiModelProperty("盈亏")
+    private BigDecimal orderProfitTotal;
+
+    @ApiModelProperty("合同金额")
+    private BigDecimal orderPriceTotal;
+
+    @ApiModelProperty("已收账款")
+    private BigDecimal orderReceivedTotal;
+
+    @ApiModelProperty("已退账款")
+    private BigDecimal orderRefundedTotal;
+
+    @ApiModelProperty("未收账款")
+    private BigDecimal orderUncollectedTotal;
+
+    @ApiModelProperty("实际账款")
+    private BigDecimal practicalPriceTotal;
+
+    @ApiModelProperty("成本金额")
+    private BigDecimal orderCostTotal;
+
+    @ApiModelProperty("订单人数")
+    private Integer orderUserNum;
+
+    @ApiModelProperty("订单数")
+    private Integer orderNum;
+
+}

+ 38 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopRefundOrderDetailVo.java

@@ -0,0 +1,38 @@
+package com.zhongzheng.modules.top.goods.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 订单编辑对象 top_order
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Data
+@ApiModel("订单退款对象")
+public class TopRefundOrderDetailVo {
+
+    @ApiModelProperty("$column.columnComment")
+    private Long orderId;
+
+    @ApiModelProperty("订单编号")
+    private String orderSn;
+
+    @ApiModelProperty("退款金额")
+    private BigDecimal refundFee;
+
+    @ApiModelProperty("退款理由")
+    private String refundReason;
+
+    @ApiModelProperty("退款单号")
+    private String refundSn;
+
+    @ApiModelProperty("审核进度")
+    private List<TopOldOrderCheckLogVo> checkLogVos;
+
+}

+ 20 - 0
zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderCheckLogMapper.xml

@@ -0,0 +1,20 @@
+<?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.zhongzheng.modules.top.goods.mapper.TopOldOrderCheckLogMapper">
+
+    <resultMap type="com.zhongzheng.modules.top.goods.domain.TopOldOrderCheckLog" id="TopOldOrderCheckLogResult">
+        <result property="id" column="id"/>
+        <result property="refundSn" column="refund_sn"/>
+        <result property="roleId" column="role_id"/>
+        <result property="checkStatus" column="check_status"/>
+        <result property="checkReason" column="check_reason"/>
+        <result property="checkSign" column="check_sign"/>
+        <result property="status" column="status"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+
+</mapper>

+ 15 - 0
zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderMapper.xml

@@ -111,6 +111,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         SELECT business_name FROM v_top_order_business WHERE order_sn = #{orderSn}
     </select>
 
+    <select id="queryByOrderSns" parameterType="java.lang.String" resultType="com.zhongzheng.modules.top.goods.vo.TopOldOrderVo">
+        SELECT business_name FROM v_top_order_business WHERE 1 =1
+        <if test="orderSnList != null and orderSnList.size()!=0 ">
+            AND order_sn in
+            <foreach collection="orderSnList" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+    </select>
+
     <select id="queryReceiveList" parameterType="com.zhongzheng.modules.top.goods.bo.TopOldOrderQueryBo" resultType="com.zhongzheng.modules.top.goods.vo.TopOldOrderVo">
         SELECT
             too.*,
@@ -140,4 +150,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
         ORDER BY too.order_id DESC
     </select>
+
+    <select id="queryListAll" resultType="com.zhongzheng.modules.top.goods.vo.TopOldOrderVo">
+        SELECT * FROM v_top_order
+    </select>
+
 </mapper>

+ 30 - 0
zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderRefundMapper.xml

@@ -0,0 +1,30 @@
+<?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.zhongzheng.modules.top.goods.mapper.TopOldOrderRefundMapper">
+
+    <resultMap type="com.zhongzheng.modules.top.goods.domain.TopOldOrderRefund" id="TopOldOrderRefundResult">
+        <result property="refundId" column="refund_id"/>
+        <result property="refundSn" column="refund_sn"/>
+        <result property="userId" column="user_id"/>
+        <result property="userName" column="user_name"/>
+        <result property="orderSn" column="order_sn"/>
+        <result property="orderGoodsId" column="order_goods_id"/>
+        <result property="goodsId" column="goods_id"/>
+        <result property="goodsName" column="goods_name"/>
+        <result property="refundFee" column="refund_fee"/>
+        <result property="realRefundFee" column="real_refund_fee"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="status" column="status"/>
+        <result property="wxpayRefundId" column="wxpay_refund_id"/>
+        <result property="applyReason" column="apply_reason"/>
+        <result property="applyImgs" column="apply_imgs"/>
+        <result property="type" column="type"/>
+        <result property="periodStatus" column="period_status"/>
+        <result property="refundTime" column="refund_time"/>
+    </resultMap>
+
+
+</mapper>