Browse Source

用户退款

weifanli 3 năm trước cách đây
mục cha
commit
414a0cb223
39 tập tin đã thay đổi với 1017 bổ sung478 xóa
  1. 63 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundController.java
  2. 0 86
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundsController.java
  3. 38 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundDao.java
  4. 30 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundPaymentDao.java
  5. 0 30
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundsDao.java
  6. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserOrderRefundDto.java
  7. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserOrderRefundPaymentDto.java
  8. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/AuthOperaReq.java
  9. 29 15
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderRefundReq.java
  10. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TotalReq.java
  11. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserOrderRefundPaymentSearch.java
  12. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserOrderRefundSearch.java
  13. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Subject.java
  14. 64 60
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefund.java
  15. 146 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefundPayment.java
  16. 7 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java
  17. 0 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/HomeService.java
  18. 29 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundPaymentService.java
  19. 49 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundService.java
  20. 0 38
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundsService.java
  21. 1 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderService.java
  22. 15 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  23. 29 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundPaymentServiceImpl.java
  24. 186 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundServiceImpl.java
  25. 0 88
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundsServiceImpl.java
  26. 1 41
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  27. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundPaymentVo.java
  28. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundVo.java
  29. 0 14
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundsVo.java
  30. 0 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/RefundCreateRes.java
  31. 4 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml
  32. 4 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  33. 58 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderRefundDao.xml
  34. 45 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderRefundPaymentMapper.xml
  35. 0 47
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderRefundsMapper.xml
  36. 0 1
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/TeacherController.java
  37. 0 20
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java
  38. 76 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderRefundController.java
  39. 24 0
      toolset/utils/src/main/java/com/yonge/toolset/utils/string/StringUtil.java

+ 63 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundController.java

@@ -0,0 +1,63 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.req.AuthOperaReq;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.page.PageInfo;
+import io.swagger.annotations.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import com.yonge.cooleshow.biz.dal.service.UserOrderRefundService;
+
+@RestController
+@RequestMapping("/userOrderRefunds")
+@Api(value = "用户退款表", tags = "用户退款表")
+public class UserOrderRefundController extends BaseController {
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private UserOrderRefundService userOrderRefundService;
+
+	/**
+     * 查询单条
+     */
+    @GetMapping("/detail/{id}")
+    @ApiOperation(value = "详情", notes = "传入id")
+	@PreAuthorize("@pcs.hasPermissions('userOrderRefunds/detail')")
+	public HttpResponseResult<UserOrderRefundVo> detail(@PathVariable("id") Long id) {
+    	return succeed(userOrderRefundService.detail(id));
+	}
+    
+    /**
+     * 查询分页
+     */
+    @PostMapping("/page")
+    @ApiOperation(value = "查询分页", notes = "传入orderRefundsSearch")
+	@PreAuthorize("@pcs.hasPermissions('userOrderRefunds/page')")
+	public HttpResponseResult<PageInfo<UserOrderRefundVo>> page(@RequestBody UserOrderRefundSearch query) {
+		IPage<UserOrderRefundVo> pages = userOrderRefundService.selectPage(PageUtil.getPage(query), query);
+        return succeed(PageUtil.pageInfo(pages));
+	}
+
+	@PostMapping("/doAuth")
+	@ApiOperation(value = "审核", notes = "传入authOperaReq")
+	@PreAuthorize("@pcs.hasPermissions('userOrderRefunds/doAuth')")
+	public HttpResponseResult<Boolean> doAuth(@Valid @RequestBody AuthOperaReq authOperaReq) throws Exception {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (user == null || null == user.getId()) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		return userOrderRefundService.doAuth(authOperaReq, user);
+	}
+}

+ 0 - 86
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundsController.java

@@ -1,86 +0,0 @@
-package com.yonge.cooleshow.admin.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
-import com.yonge.cooleshow.common.controller.BaseController;
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.toolset.utils.string.StringUtil;
-import io.swagger.annotations.*;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-
-import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderRefundsSearch;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds;
-import com.yonge.cooleshow.biz.dal.service.UserOrderRefundsService;
-
-@RestController
-@RequestMapping("/UserOrderRefunds")
-@Api(value = "用户退款表", tags = "用户退款表")
-public class UserOrderRefundsController extends BaseController {
-
-    @Autowired
-    private UserOrderRefundsService userOrderRefundsService;
-
-	/**
-     * 查询单条
-     */
-    @GetMapping("/detail/{id}")
-    @ApiOperation(value = "详情", notes = "传入id")
-    public HttpResponseResult<UserOrderRefundsVo> detail(@PathVariable("id") Long id) {
-    	return succeed(userOrderRefundsService.detail(id));
-	}
-    
-    /**
-     * 查询分页
-     */
-    @PostMapping("/page")
-    @ApiOperation(value = "查询分页", notes = "传入orderRefundsSearch")
-    public HttpResponseResult<PageInfo<UserOrderRefundsVo>> page(@RequestBody OrderRefundsSearch query) {
-		IPage<UserOrderRefundsVo> pages = userOrderRefundsService.selectPage(PageUtil.getPage(query), query);
-        return succeed(PageUtil.pageInfo(pages));
-	}
-    
-    /**
-	 * 新增
-	 */
-	@PostMapping("/save")
-	@ApiOperation(value = "新增", notes = "传入orderRefunds")
-	public HttpResponseResult save(@Valid @RequestBody UserOrderRefunds userOrderRefunds) {
-    	return status(userOrderRefundsService.save(userOrderRefunds));
-	}
-    
-    /**
-	 * 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperation(value = "修改", notes = "传入orderRefunds")
-	public HttpResponseResult update(@Valid @RequestBody UserOrderRefunds userOrderRefunds) {
-        return status(userOrderRefundsService.updateById(userOrderRefunds));
-	}
-    
-    /**
-	 * 新增或修改
-	 */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入orderRefunds")
-	public HttpResponseResult submit(@Valid @RequestBody UserOrderRefunds userOrderRefunds) {
-        return status(userOrderRefundsService.saveOrUpdate(userOrderRefunds));
-    }
-
- 	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-			return failed("参数不能为空");
-		}
-		return status(userOrderRefundsService.removeByIds(StringUtil.toLongList(ids)));
-	}
-}

+ 38 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundDao.java

@@ -0,0 +1,38 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
+import org.apache.ibatis.annotations.Param;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
+
+
+public interface UserOrderRefundDao extends BaseMapper<UserOrderRefund>{
+	/**
+	 * 查询详情
+     * @author liweifan
+     * @date 2022-05-09 17:14:30
+     * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo
+	 */
+	UserOrderRefundVo detail(@Param("id") Long id);
+
+	/**
+	 * 分页查询
+     * @author liweifan
+     * @date 2022-05-09 17:14:30
+     * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo
+	 */
+	List<UserOrderRefundVo> selectPage(@Param("page") IPage page, @Param("param") UserOrderRefundSearch userOrderRefund);
+	/***
+	 * 查询订单中,未退费的商品
+	 * @author liweifan
+	 * @param: bizId
+	 * @updateTime 2022/5/9 18:05
+	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.UserOrderDetail>
+	 */
+    List<UserOrderDetail> selectOrderRefundDetils(@Param("orderId") Long orderId);
+}

+ 30 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundPaymentDao.java

@@ -0,0 +1,30 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundPayment;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundPaymentSearch;
+
+
+public interface UserOrderRefundPaymentDao extends BaseMapper<UserOrderRefundPayment>{
+	/**
+	 * 查询详情
+     * @author liweifan
+     * @date 2022-05-09 17:14:30
+     * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo
+	 */
+	UserOrderRefundPaymentVo detail(@Param("id") Long id);
+
+	/**
+	 * 分页查询
+     * @author liweifan
+     * @date 2022-05-09 17:14:30
+     * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo
+	 */
+	List<UserOrderRefundPaymentVo> selectPage(@Param("page") IPage page, @Param("param") UserOrderRefundPaymentSearch userOrderRefundPayment);
+	
+}

+ 0 - 30
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundsDao.java

@@ -1,30 +0,0 @@
-package com.yonge.cooleshow.biz.dal.dao;
-
-import java.util.List;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.apache.ibatis.annotations.Param;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderRefundsSearch;
-
-
-public interface UserOrderRefundsDao extends BaseMapper<UserOrderRefunds>{
-	/**
-	 * 查询详情
-     * @author liweifan
-     * @date 2022-03-30 13:53:51
-     * @return: com.yonge.cooleshow.biz.dal.vo.OrderRefundsVo
-	 */
-	UserOrderRefundsVo detail(@Param("id") Long id);
-
-	/**
-	 * 分页查询
-     * @author liweifan
-     * @date 2022-03-30 13:53:51
-     * @return: com.yonge.cooleshow.biz.dal.vo.OrderRefundsVo
-	 */
-	List<UserOrderRefundsVo> selectPage(@Param("page") IPage page, @Param("param") OrderRefundsSearch orderRefunds);
-	
-}

+ 24 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserOrderRefundDto.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
+import io.swagger.annotations.ApiModel;
+import org.apache.commons.beanutils.BeanUtils;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-05-09 17:14:30
+ */
+@ApiModel(value = "UserOrderRefundDto对象", description = "退款申请表数据传输对象")
+public class UserOrderRefundDto extends UserOrderRefund{
+	private static final long serialVersionUID = 1L;
+    
+    public UserOrderRefundDto buildDto(UserOrderRefund userOrderRefund){
+        try {
+            BeanUtils.copyProperties(this,userOrderRefund);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return this;
+    }
+
+}

+ 24 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserOrderRefundPaymentDto.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundPayment;
+import io.swagger.annotations.ApiModel;
+import org.apache.commons.beanutils.BeanUtils;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-05-09 17:14:30
+ */
+@ApiModel(value = "UserOrderRefundPaymentDto对象", description = "退款单表数据传输对象")
+public class UserOrderRefundPaymentDto extends UserOrderRefundPayment{
+	private static final long serialVersionUID = 1L;
+    
+    public UserOrderRefundPaymentDto buildDto(UserOrderRefundPayment userOrderRefundPayment){
+        try {
+            BeanUtils.copyProperties(this,userOrderRefundPayment);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return this;
+    }
+
+}

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/AuthOperaReq.java

@@ -14,8 +14,8 @@ import javax.validation.constraints.NotNull;
  */
 @ApiModel(value = "AuthOperaReq", description = "审核操作对象")
 public class AuthOperaReq {
-    @NotNull(message = "审核单id不能为空")
-    @ApiModelProperty(value = "审核单id", required = true)
+    @NotNull(message = "id不能为空")
+    @ApiModelProperty(value = "id", required = true)
     private Long id;
     @NotNull(message = "请说明审核是否通过")
     @ApiModelProperty(value = "审核是否通过", required = true)

+ 29 - 15
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderRefundReq.java

@@ -1,9 +1,11 @@
 package com.yonge.cooleshow.biz.dal.dto.req;
 
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
-import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * 退款请求
@@ -13,31 +15,35 @@ import javax.validation.constraints.NotBlank;
  */
 @ApiModel(value = "OrderRefundReq对象", description = "退款请求")
 public class OrderRefundReq {
-    @NotBlank(message = "订单号不能为空")
-    @ApiModelProperty(value = "订单号 ", required = true)
-    private String orderNo;
-    @NotBlank(message = "详情id不能为空")
-    @ApiModelProperty(value = "订单详情id ", required = true)
-    private Long orderDetilId;
+
+    @ApiModelProperty("订单ID ")
+    @NotNull(message = "订单id不能为空")
+    private Long orderId;
+
+    @ApiModelProperty("订单详情ids ")
+    private List<Long> oredrDetilIds;
+
     @ApiModelProperty(value = "退款说明 ")
     private String reason;
 
     private Long userId;
 
-    public String getOrderNo() {
-        return orderNo;
+    private UserOrderDetailVo oredrDetil;
+
+    public Long getOrderId() {
+        return orderId;
     }
 
-    public void setOrderNo(String orderNo) {
-        this.orderNo = orderNo;
+    public void setOrderId(Long orderId) {
+        this.orderId = orderId;
     }
 
-    public Long getOrderDetilId() {
-        return orderDetilId;
+    public List<Long> getOredrDetilIds() {
+        return oredrDetilIds;
     }
 
-    public void setOrderDetilId(Long orderDetilId) {
-        this.orderDetilId = orderDetilId;
+    public void setOredrDetilIds(List<Long> oredrDetilIds) {
+        this.oredrDetilIds = oredrDetilIds;
     }
 
     public String getReason() {
@@ -55,4 +61,12 @@ public class OrderRefundReq {
     public void setUserId(Long userId) {
         this.userId = userId;
     }
+
+    public UserOrderDetailVo getOredrDetil() {
+        return oredrDetil;
+    }
+
+    public void setOredrDetil(UserOrderDetailVo oredrDetil) {
+        this.oredrDetil = oredrDetil;
+    }
 }

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TotalReq.java

@@ -109,7 +109,7 @@ public class TotalReq {
                 } else {
                     paramDate = LocalDate.of(Integer.parseInt(dateTime), 1, 1);
                 }
-                lastDay = LocalDateTime.of(paramDate.with(TemporalAdjusters.firstDayOfYear()), LocalTime.MAX);
+                lastDay = LocalDateTime.of(paramDate.with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
             } else {
                 LocalDate paramDate;
                 if (StringUtil.isEmpty(dateTime)) {
@@ -118,7 +118,7 @@ public class TotalReq {
                     String[] classDateSp = dateTime.split("-");
                     paramDate = LocalDate.of(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1);
                 }
-                lastDay = LocalDateTime.of(paramDate.with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MAX);
+                lastDay = LocalDateTime.of(paramDate.with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
             }
             return lastDay;
         }

+ 14 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserOrderRefundPaymentSearch.java

@@ -0,0 +1,14 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-05-09 17:14:30
+ */
+@ApiModel(value = "UserOrderRefundPaymentSearch对象", description = "退款单表查询对象")
+public class UserOrderRefundPaymentSearch extends QueryInfo {
+	private static final long serialVersionUID = 1L;
+
+}

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/OrderRefundsSearch.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserOrderRefundSearch.java

@@ -5,10 +5,10 @@ import io.swagger.annotations.ApiModel;
 
 /**
  * @Author: liweifan
- * @Data: 2022-03-30 13:53:51
+ * @Data: 2022-05-09 17:14:30
  */
-@ApiModel(value = "OrderRefundsSearch对象", description = "用户退款表查询对象")
-public class OrderRefundsSearch extends QueryInfo{
+@ApiModel(value = "UserOrderRefundSearch对象", description = "退款申请表查询对象")
+public class UserOrderRefundSearch extends QueryInfo {
 	private static final long serialVersionUID = 1L;
 
 }

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Subject.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.entity;
 
 import io.swagger.annotations.ApiModelProperty;
 
+import java.io.Serializable;
 import java.util.List;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -9,7 +10,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
 /**
  * 对应数据库表(subject):
  */
-public class Subject {
+public class Subject implements Serializable {
 
 	/**  */
 	private Long id;

+ 64 - 60
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefunds.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefund.java

@@ -10,83 +10,87 @@ import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
 import java.util.Date;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
+
 import java.math.BigDecimal;
 
 /**
- * 用户退款表
+ * 退款申请
  */
-@TableName("user_order_refunds")
-@ApiModel(value = "UserOrderRefunds对象", description = "用户退款表")
-public class UserOrderRefunds implements Serializable {
-	private static final long serialVersionUID = 1L;
+@TableName("user_order_refund")
+@ApiModel(value = "UserOrderRefund对象", description = "退款申请表")
+public class UserOrderRefund implements Serializable {
+    private static final long serialVersionUID = 1L;
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
-	@TableField(value = "user_id_")
+    @ApiModelProperty("用户id ")
+    @TableField(value = "user_id_")
     private Long userId;
-    @ApiModelProperty("订单")
-	@TableField(value = "order_no_")
-    private String orderNo;
-    @ApiModelProperty("订单详情id ")
-    @TableField(value = "order_detil_id_")
-    private Long orderDetilId;
-    @ApiModelProperty("状态 DOING、审核中 PASS、通过 UNPASS、不通过")
-	@TableField(value = "status_")
+    @ApiModelProperty("订单id")
+    @TableField(value = "order_id_")
+    private Long orderId;
+    @ApiModelProperty("订单详情id(多个详情,分割) ")
+    @TableField(value = "oredr_detil_ids_")
+    private String oredrDetilIds;
+    @ApiModelProperty("状态 DOING、审核中 PASS、通过 UNPASS、不通过 ")
+    @TableField(value = "status_")
     private AuthStatusEnum status;
     @ApiModelProperty("申请退费金额 ")
-	@TableField(value = "apply_amount_")
+    @TableField(value = "apply_amount_")
     private BigDecimal applyAmount;
     @ApiModelProperty("实际退费金额 ")
-	@TableField(value = "actual_amount_")
+    @TableField(value = "actual_amount_")
     private BigDecimal actualAmount;
     @ApiModelProperty("退款描述 ")
-	@TableField(value = "reason_")
+    @TableField(value = "reason_")
     private String reason;
-    @ApiModelProperty("操作人 ")
-	@TableField(value = "operate_user_id_")
-    private Long operateUserId;
-	@TableField(value = "create_time_")
+    @ApiModelProperty("审核人 ")
+    @TableField(value = "operate_id_")
+    private Long operateId;
+    @ApiModelProperty("审核描述 ")
+    @TableField(value = "operate_reason_")
+    private String operateReason;
+    @TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
-	@TableField(value = "update_time_")
+    @TableField(value = "update_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
-	@TableField(value = "remark_")
-    private String remark;
 
-	public Long getId() {
+    public Long getId() {
         return id;
     }
 
     public void setId(Long id) {
         this.id = id;
     }
-    
-	public Long getUserId() {
+
+    public Long getUserId() {
         return userId;
     }
 
     public void setUserId(Long userId) {
         this.userId = userId;
     }
-    
-	public String getOrderNo() {
-        return orderNo;
+
+    public Long getOrderId() {
+        return orderId;
     }
 
-    public void setOrderNo(String orderNo) {
-        this.orderNo = orderNo;
+    public void setOrderId(Long orderId) {
+        this.orderId = orderId;
     }
 
-    public Long getOrderDetilId() {
-        return orderDetilId;
+    public String getOredrDetilIds() {
+        return oredrDetilIds;
     }
 
-    public void setOrderDetilId(Long orderDetilId) {
-        this.orderDetilId = orderDetilId;
+    public void setOredrDetilIds(String oredrDetilIds) {
+        this.oredrDetilIds = oredrDetilIds;
     }
 
     public AuthStatusEnum getStatus() {
@@ -96,8 +100,8 @@ public class UserOrderRefunds implements Serializable {
     public void setStatus(AuthStatusEnum status) {
         this.status = status;
     }
-    
-	public BigDecimal getApplyAmount() {
+
+    public BigDecimal getApplyAmount() {
         return applyAmount;
     }
 
@@ -105,52 +109,52 @@ public class UserOrderRefunds implements Serializable {
         this.applyAmount = applyAmount;
     }
 
-	public BigDecimal getActualAmount() {
+    public BigDecimal getActualAmount() {
         return actualAmount;
     }
 
     public void setActualAmount(BigDecimal actualAmount) {
         this.actualAmount = actualAmount;
     }
-    
-	public String getReason() {
+
+    public String getReason() {
         return reason;
     }
 
     public void setReason(String reason) {
         this.reason = reason;
     }
-    
-	public Long getOperateUserId() {
-        return operateUserId;
+
+    public Long getOperateId() {
+        return operateId;
     }
 
-    public void setOperateUserId(Long operateUserId) {
-        this.operateUserId = operateUserId;
+    public void setOperateId(Long operateId) {
+        this.operateId = operateId;
     }
-    
-	public Date getCreateTime() {
+
+    public String getOperateReason() {
+        return operateReason;
+    }
+
+    public void setOperateReason(String operateReason) {
+        this.operateReason = operateReason;
+    }
+
+    public Date getCreateTime() {
         return createTime;
     }
 
     public void setCreateTime(Date createTime) {
         this.createTime = createTime;
     }
-    
-	public Date getUpdateTime() {
+
+    public Date getUpdateTime() {
         return updateTime;
     }
 
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
-    
-	public String getRemark() {
-        return remark;
-    }
 
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-    
 }

+ 146 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefundPayment.java

@@ -0,0 +1,146 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.math.BigDecimal;
+
+/**
+ * 退款单表
+ */
+@TableName("user_order_refund_payment")
+@ApiModel(value = "UserOrderRefundPayment对象", description = "退款单表")
+public class UserOrderRefundPayment implements Serializable {
+	private static final long serialVersionUID = 1L;
+    @TableId(value = "id_", type = IdType.AUTO)
+    private Long id;
+    @ApiModelProperty("退款申请单号 ")
+	@TableField(value = "refund_id_")
+    private String refundId;
+    @ApiModelProperty("汇付退款订单号 ")
+	@TableField(value = "adapay_no_")
+    private String adapayNo;
+    @ApiModelProperty("交易流水号(支付对象id) ")
+	@TableField(value = "trans_no_")
+    private String transNo;
+    @ApiModelProperty("交易金额 ")
+	@TableField(value = "refund_amt_")
+    private BigDecimal refundAmt;
+    @ApiModelProperty("回调交易金额 ")
+	@TableField(value = "back_refund_amt_")
+    private BigDecimal backRefundAmt;
+    @ApiModelProperty("汇付收取的服务费 ")
+	@TableField(value = "fee_amt_")
+    private BigDecimal feeAmt;
+    @ApiModelProperty("交易状态 pending 交易处理中 succeeded 交易成功 failed 交易失败 close 交易关闭 ")
+	@TableField(value = "status_")
+    private String status;
+    @ApiModelProperty("失败信息 ")
+	@TableField(value = "pay_fail_msg_")
+    private String payFailMsg;
+	@TableField(value = "create_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date createTime;
+	@TableField(value = "update_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date updateTime;
+
+	public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    
+	public String getRefundId() {
+        return refundId;
+    }
+
+    public void setRefundId(String refundId) {
+        this.refundId = refundId;
+    }
+    
+	public String getAdapayNo() {
+        return adapayNo;
+    }
+
+    public void setAdapayNo(String adapayNo) {
+        this.adapayNo = adapayNo;
+    }
+    
+	public String getTransNo() {
+        return transNo;
+    }
+
+    public void setTransNo(String transNo) {
+        this.transNo = transNo;
+    }
+    
+	public BigDecimal getRefundAmt() {
+        return refundAmt;
+    }
+
+    public void setRefundAmt(BigDecimal refundAmt) {
+        this.refundAmt = refundAmt;
+    }
+    
+	public BigDecimal getBackRefundAmt() {
+        return backRefundAmt;
+    }
+
+    public void setBackRefundAmt(BigDecimal backRefundAmt) {
+        this.backRefundAmt = backRefundAmt;
+    }
+    
+	public BigDecimal getFeeAmt() {
+        return feeAmt;
+    }
+
+    public void setFeeAmt(BigDecimal feeAmt) {
+        this.feeAmt = feeAmt;
+    }
+    
+	public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+    
+	public String getPayFailMsg() {
+        return payFailMsg;
+    }
+
+    public void setPayFailMsg(String payFailMsg) {
+        this.payFailMsg = payFailMsg;
+    }
+    
+	public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+    
+	public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+    
+}

+ 7 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java

@@ -12,6 +12,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentCourseSearch
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
 import com.yonge.cooleshow.biz.dal.entity.CourseTimeEntity;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes;
@@ -153,24 +154,24 @@ public interface CourseGroupService extends IService<CourseGroup> {
     HttpResponseResult<RefundCreateRes> refundCreate(OrderRefundReq refundReq);
     /***
      * 直播课退款单-创建后
-     * @param: refundReq
+     * @param: userOrderRefund
      * @updateTime 2022/5/9 15:11
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes>
      */
-    void refundAfter(UserOrderRefundsVo userOrderRefundsVo);
+    void refundAfter(UserOrderDetailVo userOrderDetailVo);
     /***
      * 直播课退款单-退款成功
-     * @param: refundReq
+     * @param: userOrderRefund
      * @updateTime 2022/5/9 15:11
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes>
      */
-    void refundSuccess(UserOrderRefundsVo userOrderRefundsVo);
+    void refundSuccess(UserOrderDetailVo userOrderDetailVo);
     /***
      * 直播课退款单-退款失败
-     * @param: refundReq
+     * @param: userOrderRefund
      * @updateTime 2022/5/9 15:11
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes>
      */
-    void refundCancel(UserOrderRefundsVo userOrderRefundsVo);
+    void refundCancel(UserOrderDetailVo userOrderDetailVo);
 }
 

+ 0 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/HomeService.java

@@ -18,7 +18,6 @@ public interface HomeService {
      * @return: com.yonge.cooleshow.biz.dal.vo.HomeTotalVo
      */
     HomeUserToDoNum getUserToDoNum();
-
     /***
      * 统计老师数据
      * @author liweifan

+ 29 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundPaymentService.java

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundPaymentSearch;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundPayment;
+
+/**
+ * 退款单表 服务类
+ * @author liweifan
+ * @date 2022-05-09
+ */
+public interface UserOrderRefundPaymentService extends IService<UserOrderRefundPayment>  {
+
+	/**
+     * 查询详情
+     * @author liweifan
+ 	 * @date 2022-05-09
+     */
+	UserOrderRefundPaymentVo detail(Long id);
+
+    /**
+     * 分页查询
+     * @author liweifan
+ 	 * @date 2022-05-09
+     */
+    IPage<UserOrderRefundPaymentVo> selectPage(IPage<UserOrderRefundPaymentVo> page, UserOrderRefundPaymentSearch query);
+}

+ 49 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundService.java

@@ -0,0 +1,49 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.req.AuthOperaReq;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+
+/**
+ * 用户退款表 服务类
+ * @author liweifan
+ * @date 2022-03-30
+ */
+public interface UserOrderRefundService extends IService<UserOrderRefund>  {
+	/**
+     * 查询详情
+     * @author liweifan
+ 	 * @date 2022-03-30
+     */
+	UserOrderRefundVo detail(Long id);
+
+    /**
+     * 分页查询
+     * @author liweifan
+ 	 * @date 2022-03-30
+     */
+    IPage<UserOrderRefundVo> selectPage(IPage<UserOrderRefundVo> page, UserOrderRefundSearch query);
+	/***
+	 * 订单退款
+	 * @author liweifan
+	 * @param: payReq
+	 * @updateTime 2022/4/21 19:39
+	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
+	 */
+	HttpResponseResult<Boolean> orderRefund(OrderRefundReq refundReq);
+	/***
+	 * 审批退款申请
+	 * @author liweifan
+	 * @param: authOperaReq
+	 * @param: user
+	 * @updateTime 2022/5/9 16:25
+	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
+	 */
+    HttpResponseResult<Boolean> doAuth(AuthOperaReq authOperaReq, SysUser user);
+}

+ 0 - 38
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundsService.java

@@ -1,38 +0,0 @@
-package com.yonge.cooleshow.biz.dal.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderRefundsSearch;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds;
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
-
-/**
- * 用户退款表 服务类
- * @author liweifan
- * @date 2022-03-30
- */
-public interface UserOrderRefundsService extends IService<UserOrderRefunds>  {
-	/**
-     * 查询详情
-     * @author liweifan
- 	 * @date 2022-03-30
-     */
-	UserOrderRefundsVo detail(Long id);
-
-    /**
-     * 分页查询
-     * @author liweifan
- 	 * @date 2022-03-30
-     */
-    IPage<UserOrderRefundsVo> selectPage(IPage<UserOrderRefundsVo> page, OrderRefundsSearch query);
-	/***
-	 * 订单退款
-	 * @author liweifan
-	 * @param: refundReq
-	 * @updateTime 2022/5/9 14:29
-	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
-	 */
-	HttpResponseResult<Boolean> orderRefund(OrderRefundReq refundReq);
-}

+ 1 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderService.java

@@ -116,14 +116,7 @@ public interface UserOrderService extends IService<UserOrder> {
      */
     HttpResponseResult<Boolean> orderCancel(OrderPayReq payReq);
 
-    /***
-     * 订单退款
-     * @author liweifan
-     * @param: payReq
-     * @updateTime 2022/4/21 19:39
-     * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
-     */
-    HttpResponseResult<Boolean> orderRefund(OrderRefundReq refundReq);
+
 
     /***
      * 取消订单(未判断付款单状态)

+ 15 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java

@@ -839,11 +839,25 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     @Override
     public HttpResponseResult<RefundCreateRes> refundCreate(OrderRefundReq refundReq) {
         RefundCreateRes refundCreateRes = new RefundCreateRes();
-        refundCreateRes.setRes(true);
         refundCreateRes.setActualPrice(BigDecimal.ZERO);
         return HttpResponseResult.succeed(refundCreateRes);
     }
 
+    @Override
+    public void refundAfter(UserOrderDetailVo userOrderDetailVo) {
+
+    }
+
+    @Override
+    public void refundSuccess(UserOrderDetailVo userOrderDetailVo) {
+
+    }
+
+    @Override
+    public void refundCancel(UserOrderDetailVo userOrderDetailVo) {
+
+    }
+
     /**
      * 定时将符合开售日期的未开售的直播课课程组修改为报名中状态
      */

+ 29 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundPaymentServiceImpl.java

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundPayment;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundPaymentSearch;
+import com.yonge.cooleshow.biz.dal.dao.UserOrderRefundPaymentDao;
+import com.yonge.cooleshow.biz.dal.service.UserOrderRefundPaymentService;
+
+
+@Service
+public class UserOrderRefundPaymentServiceImpl extends ServiceImpl<UserOrderRefundPaymentDao, UserOrderRefundPayment> implements UserOrderRefundPaymentService {
+    private final static Logger log = LoggerFactory.getLogger(UserOrderRefundPaymentServiceImpl.class);
+
+	@Override
+    public UserOrderRefundPaymentVo detail(Long id) {
+        return baseMapper.detail(id);
+    }
+    
+     @Override
+    public IPage<UserOrderRefundPaymentVo> selectPage(IPage<UserOrderRefundPaymentVo> page, UserOrderRefundPaymentSearch query){
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+	
+}

+ 186 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundServiceImpl.java

@@ -0,0 +1,186 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dao.UserOrderRefundDao;
+import com.yonge.cooleshow.biz.dal.dto.req.AuthOperaReq;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.TradeStatusEnum;
+import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
+import com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.utils.string.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.PostConstruct;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import static java.util.stream.Collectors.joining;
+
+
+@Service
+public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao, UserOrderRefund> implements UserOrderRefundService {
+    @Autowired
+    private UserOrderService orderService;
+    @Autowired
+    private UserOrderPaymentService orderPaymentService;
+    @Autowired
+    private UserOrderDetailService orderDetailService;
+    @Autowired
+    private CourseGroupService courseGroupService;
+
+    //验证是否可以退款,获取退款金额信息
+    private static final Map<GoodTypeEnum, Function<OrderRefundReq, HttpResponseResult<RefundCreateRes>>> refundCreate = new HashMap<>();
+    //插入退款后执行
+    private static final Map<GoodTypeEnum, Consumer<UserOrderDetailVo>> refundAfter = new HashMap<>();
+    //退款完成后执行
+    private static final Map<GoodTypeEnum, Consumer<UserOrderDetailVo>> refundSuccess = new HashMap<>();
+    //退款未通过后执行
+    private static final Map<GoodTypeEnum, Consumer<UserOrderDetailVo>> refundCancel = new HashMap<>();
+
+    @PostConstruct
+    private void init() {
+        /**********退费单生成前******************/
+        //直播课退费
+        refundCreate.put(GoodTypeEnum.LIVE, courseGroupService::refundCreate);
+
+        refundSuccess.put(GoodTypeEnum.LIVE, courseGroupService::refundSuccess);
+    }
+
+    @Override
+    public UserOrderRefundVo detail(Long id) {
+        UserOrderRefundVo detail = baseMapper.detail(id);
+        return detail;
+    }
+
+    @Override
+    public IPage<UserOrderRefundVo> selectPage(IPage<UserOrderRefundVo> page, UserOrderRefundSearch query) {
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResponseResult<Boolean> orderRefund(OrderRefundReq refundReq) {
+        UserOrderVo detail = orderService.detail(refundReq.getOrderId());
+        if (null == detail || CollectionUtils.isEmpty(detail.getOrderDetailList())) {
+            return HttpResponseResult.failed("未找到订单信息");
+        }
+        if (!OrderStatusEnum.PAID.equals(detail.getStatus())) {
+            return HttpResponseResult.failed("订单状态异常");
+        }
+        if (StringUtil.isEmpty(detail.getTransNo())) {
+            return HttpResponseResult.failed("未找到订单付款信息");
+        }
+        UserOrderPayment orderPayment = orderPaymentService.detailByTransNo(detail.getTransNo());
+        if (null == orderPayment || !TradeStatusEnum.succeeded.equals(orderPayment.getStatus())) {
+            return HttpResponseResult.failed("订单付款状态异常");
+        }
+        if (CollectionUtils.isEmpty(refundReq.getOredrDetilIds())) {
+            //查询订单下未退款的所有详情订单
+            List<UserOrderDetail> orderDetails = baseMapper.selectOrderRefundDetils(refundReq.getOrderId());
+
+            refundReq.setOredrDetilIds(orderDetails.stream().map(UserOrderDetail::getId).collect(Collectors.toList()));
+        }
+        //退款的详情id
+        List<Long> detilIds = new ArrayList<>();
+        //退款金额
+        BigDecimal actualPrice = BigDecimal.ZERO;
+        for (UserOrderDetailVo vo : detail.getOrderDetailList()) {
+            List<Long> collect = refundReq.getOredrDetilIds().stream().filter(o -> o.equals(vo.getId())).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(collect)) {
+
+                Function<OrderRefundReq, HttpResponseResult<RefundCreateRes>> refundCreateFunction = refundCreate.get(vo.getGoodType());
+                if (Objects.isNull(refundCreateFunction)) {
+                    refundReq.setOredrDetil(vo);
+                    HttpResponseResult<RefundCreateRes> apply = refundCreateFunction.apply(refundReq);
+                    if (apply.getStatus()) {
+                        detilIds.add(vo.getId());
+                        actualPrice.add(apply.getData().getActualPrice());
+                    }
+                } else {
+                    detilIds.add(vo.getId());
+                    actualPrice.add(vo.getActualPrice());
+                }
+            }
+        }
+        String join = StringUtil.join(detilIds, ",");
+
+        UserOrderRefund orderRefunds = new UserOrderRefund();
+        orderRefunds.setUserId(refundReq.getUserId());
+        orderRefunds.setOrderId(refundReq.getOrderId());
+        orderRefunds.setOredrDetilIds(join);
+        orderRefunds.setStatus(AuthStatusEnum.DOING);
+        orderRefunds.setApplyAmount(actualPrice);
+        orderRefunds.setReason(refundReq.getReason());
+        save(orderRefunds);
+
+        for (UserOrderDetailVo vo : detail.getOrderDetailList()) {
+            List<Long> collect = refundReq.getOredrDetilIds().stream().filter(o -> o.equals(vo.getId())).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(collect)) {
+                Consumer<UserOrderDetailVo> refundAfterConsumer = refundAfter.get(vo.getGoodType());
+                if (Objects.isNull(refundAfterConsumer)) {
+                    refundAfterConsumer.accept(vo);
+                }
+            }
+        }
+        return HttpResponseResult.succeed(true);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResponseResult<Boolean> doAuth(AuthOperaReq authOperaReq, SysUser user) {
+        UserOrderRefund orderRefund = baseMapper.selectById(authOperaReq.getId());
+        if (!AuthStatusEnum.DOING.equals(orderRefund.getStatus())) {
+            return HttpResponseResult.failed("退款单已审核");
+        }
+        String oredrDetilIds = orderRefund.getOredrDetilIds();
+        if (StringUtil.isEmpty(oredrDetilIds)) {
+            return HttpResponseResult.succeed(true);
+        }
+
+        orderRefund.setStatus(authOperaReq.getPass() ? AuthStatusEnum.PASS : AuthStatusEnum.UNPASS);
+        orderRefund.setActualAmount(orderRefund.getApplyAmount());
+        orderRefund.setOperateId(user.getId());
+        orderRefund.setOperateReason(authOperaReq.getReason());
+        orderRefund.setUpdateTime(new Date());
+        updateById(orderRefund);
+
+        if (authOperaReq.getPass()) {
+            //通过调用
+
+        } else {
+            List<String> detilIds = Arrays.asList(oredrDetilIds.split(","));
+            for (String id : detilIds) {
+                UserOrderDetailVo detail = orderDetailService.detail(Long.parseLong(id));
+                if (null == detail) {
+                    continue;
+                }
+                //调用业务方法
+                Consumer<UserOrderDetailVo> refundCancelConsumer = refundCancel.get(detail.getGoodType());
+                if (Objects.isNull(refundCancelConsumer)) {
+                    refundCancelConsumer.accept(detail);
+                }
+            }
+        }
+        return HttpResponseResult.succeed(true);
+    }
+
+}

+ 0 - 88
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundsServiceImpl.java

@@ -1,88 +0,0 @@
-package com.yonge.cooleshow.biz.dal.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
-import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
-import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
-import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
-import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
-import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
-import com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes;
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderRefundsSearch;
-import com.yonge.cooleshow.biz.dal.dao.UserOrderRefundsDao;
-import com.yonge.cooleshow.biz.dal.service.UserOrderRefundsService;
-
-import javax.annotation.PostConstruct;
-import java.sql.Wrapper;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.function.Consumer;
-import java.util.function.Function;
-
-
-@Service
-public class UserOrderRefundsServiceImpl extends ServiceImpl<UserOrderRefundsDao, UserOrderRefunds> implements UserOrderRefundsService {
-    @Autowired
-    private CourseGroupService courseGroupService;
-
-    //验证是否可以退款,获取退款金额信息
-    private static final Map<GoodTypeEnum, Function<OrderRefundReq, HttpResponseResult<RefundCreateRes>>> refundCreate = new HashMap<>();
-    //插入退款后执行
-    private static final Map<GoodTypeEnum, Consumer<UserOrderRefundsVo>> refundAfter = new HashMap<>();
-    //退款完成后执行
-    private static final Map<GoodTypeEnum, Consumer<UserOrderRefundsVo>> refundSuccess = new HashMap<>();
-    //退款未通过后执行
-    private static final Map<GoodTypeEnum, Consumer<UserOrderRefundsVo>> refundCancel = new HashMap<>();
-
-    @PostConstruct
-    private void init() {
-        /**********退费单生成前******************/
-        //直播课退费
-        refundCreate.put(GoodTypeEnum.LIVE, courseGroupService::refundCreate);
-
-        refundAfter.put(GoodTypeEnum.LIVE, courseGroupService::refundAfter);
-
-        refundSuccess.put(GoodTypeEnum.LIVE, courseGroupService::refundSuccess);
-
-        refundCancel.put(GoodTypeEnum.LIVE, courseGroupService::refundCancel);
-    }
-
-	@Override
-    public UserOrderRefundsVo detail(Long id) {
-        UserOrderRefundsVo detail = baseMapper.detail(id);
-        return detail;
-    }
-    
-     @Override
-    public IPage<UserOrderRefundsVo> selectPage(IPage<UserOrderRefundsVo> page, OrderRefundsSearch query){
-        return page.setRecords(baseMapper.selectPage(page, query));
-    }
-
-    @Override
-    public HttpResponseResult<Boolean> orderRefund(OrderRefundReq refundReq) {
-        UserOrderRefunds old = baseMapper.selectOne(Wrappers.<UserOrderRefunds>lambdaQuery()
-                .eq(UserOrderRefunds::getUserId, refundReq.getUserId())
-                .eq(UserOrderRefunds::getOrderNo, refundReq.getOrderNo())
-                .eq(UserOrderRefunds::getOrderDetilId, refundReq.getOrderDetilId()));
-        if(null != old){
-            return HttpResponseResult.failed("已存在退款记录");
-        }
-        UserOrderRefunds orderRefunds = new UserOrderRefunds();
-        orderRefunds.setUserId(refundReq.getUserId());
-        orderRefunds.setOrderNo(refundReq.getOrderNo());
-        orderRefunds.setOrderDetilId(refundReq.getOrderDetilId());
-        orderRefunds.setReason(refundReq.getReason());
-        orderRefunds.setStatus(AuthStatusEnum.DOING);
-
-        return null;
-    }
-
-}

+ 1 - 41
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java

@@ -2,11 +2,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.yonge.cooleshow.biz.dal.config.HuifuConfiguration;
-import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.support.DistributedLock;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
@@ -16,8 +12,6 @@ import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
 import com.yonge.cooleshow.biz.dal.sdk.PaymentSdk;
-import com.yonge.cooleshow.biz.dal.sdk.req.DeviceInfo;
-import com.yonge.cooleshow.biz.dal.sdk.req.PaymentReq;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
@@ -31,19 +25,16 @@ import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.dao.UserOrderDao;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.PostConstruct;
-import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.util.*;
-import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Consumer;
 import java.util.function.Function;
@@ -61,7 +52,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     @Autowired
     private UserOrderPaymentService orderPaymentService;
     @Autowired
-    private UserOrderRefundsService orderRefundsService;
+    private UserOrderRefundService orderRefundsService;
     @Autowired
     private PaymentSdk paymentSdk;
     @Autowired
@@ -207,37 +198,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 
     }
 
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public HttpResponseResult<Boolean> orderRefund(OrderRefundReq refundReq) {
-        UserOrderVo detail = detail(refundReq.getOrderNo(), refundReq.getUserId());
-        if (null == detail || CollectionUtils.isEmpty(detail.getOrderDetailList())) {
-            return HttpResponseResult.failed("未找到订单信息");
-        }
-        if (!OrderStatusEnum.PAID.equals(detail.getStatus())) {
-            return HttpResponseResult.failed("订单状态异常");
-        }
-        UserOrderDetailVo orderDetail = null;
-        for (UserOrderDetailVo vo : detail.getOrderDetailList()) {
-            if(vo.getId().equals(refundReq.getOrderDetilId())){
-                orderDetail = vo;
-            }
-        }
 
-        if (null == orderDetail) {
-            return HttpResponseResult.failed("未找到订单信息");
-        }
-
-        if (StringUtil.isEmpty(detail.getTransNo())) {
-            return HttpResponseResult.failed("未找到订单付款信息");
-        }
-        UserOrderPayment orderPayment = orderPaymentService.detailByTransNo(detail.getTransNo());
-        if (null == orderPayment || !TradeStatusEnum.succeeded.equals(orderPayment.getStatus())) {
-            return HttpResponseResult.failed("订单付款状态异常");
-        }
-        //发起退款申请
-        return orderRefundsService.orderRefund(refundReq);
-    }
 
     @Override
     public void setSuccessStatus() {
@@ -604,7 +565,6 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
      * @updateTime 2022/3/31 16:49
      * @return: java.math.BigDecimal
      */
-
     private String getGoodUrlByType(GoodTypeEnum goodTypeEnum) {
         String configValue = "";
         if (GoodTypeEnum.VIP.equals(goodTypeEnum)) {

+ 24 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundPaymentVo.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundPayment;
+import io.swagger.annotations.ApiModel;
+import org.apache.commons.beanutils.BeanUtils;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-05-09 17:14:30
+ */
+@ApiModel(value = "UserOrderRefundPaymentVo对象", description = "退款单表查询视图对象")
+public class UserOrderRefundPaymentVo extends UserOrderRefundPayment{
+	private static final long serialVersionUID = 1L;
+    
+    public UserOrderRefundPaymentVo buildVo(UserOrderRefundPayment userOrderRefundPayment){
+        try {
+            BeanUtils.copyProperties(this,userOrderRefundPayment);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return this;
+    }
+
+}

+ 24 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundVo.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
+import io.swagger.annotations.ApiModel;
+import org.apache.commons.beanutils.BeanUtils;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-05-09 17:14:30
+ */
+@ApiModel(value = "UserOrderRefundVo对象", description = "退款申请表查询视图对象")
+public class UserOrderRefundVo extends UserOrderRefund{
+	private static final long serialVersionUID = 1L;
+    
+    public UserOrderRefundVo buildVo(UserOrderRefund userOrderRefund){
+        try {
+            BeanUtils.copyProperties(this,userOrderRefund);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return this;
+    }
+
+}

+ 0 - 14
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundsVo.java

@@ -1,14 +0,0 @@
-package com.yonge.cooleshow.biz.dal.vo;
-
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds;
-import io.swagger.annotations.ApiModel;
-
-/**
- * @Author: liweifan
- * @Data: 2022-03-30 13:53:51
- */
-@ApiModel(value = "UserOrderRefundsVo对象", description = "用户退款表查询视图对象")
-public class UserOrderRefundsVo extends UserOrderRefunds {
-	private static final long serialVersionUID = 1L;
-
-}

+ 0 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/RefundCreateRes.java

@@ -12,8 +12,6 @@ import java.math.BigDecimal;
  */
 @ApiModel(value = "OrderCheckRes", description = "退款创建业务返回对象")
 public class RefundCreateRes {
-    @ApiModelProperty("验证结果(必填)")
-    private Boolean res;
     @ApiModelProperty("实际价格(必填)")
     private BigDecimal actualPrice;
 
@@ -22,14 +20,6 @@ public class RefundCreateRes {
     @ApiModelProperty(value = "冗余字段,用于传递参数用")
     private Object bizParam;
 
-    public Boolean getRes() {
-        return res;
-    }
-
-    public void setRes(Boolean res) {
-        this.res = res;
-    }
-
     public BigDecimal getActualPrice() {
         return actualPrice;
     }

+ 4 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -99,14 +99,16 @@
     <select id="querySubjectItem" resultType="com.yonge.cooleshow.biz.dal.entity.Subject">
         select * from subject t
         where exists(
+            select 1 from student s where s.user_id_ = #{userId} and find_in_set(t.id_,s.subject_id_)
+            union all
             select 1 from music_sheet a
             left join music_sheet_purchase_record a1 on a.id_ = a1.music_sheet_id_
             where a1.student_id_ = #{userId} and a1.order_status_ = 'PAID' and find_in_set(t.id_,a.music_subject_)
-            union
+            union all
             select 1 from course_group b
             left join course_schedule_student_payment b1 on b.id_ = b1.course_group_id_
             where b1.user_id_ = #{userId} and find_in_set(t.id_,b.subject_id_)
-            union
+            union all
             select 1 from video_lesson_group c
             left join video_lesson_purchase_record c1 on c.id_ = c1.video_lesson_group_id_
             where c1.student_id_ = #{userId} and find_in_set(t.id_,c.lesson_subject_)

+ 4 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -144,10 +144,12 @@
     <select id="querySubjectItem" resultType="com.yonge.cooleshow.biz.dal.entity.Subject">
         select * from subject t
         where exists(
+            select 1 from teacher s where s.user_id_ = #{userId} and find_in_set(t.id_,s.subject_id_)
+            union all
             select 1 from music_sheet a where a.user_id_ = #{userId} and find_in_set(t.id_,a.music_subject_)
-            union
+            union all
             select 1 from course_group b where b.teacher_id_ = #{userId} and find_in_set(t.id_,b.subject_id_)
-            union
+            union all
             select 1 from video_lesson_group c where c.teacher_id_ = #{userId} and find_in_set(t.id_,c.lesson_subject_)
         )
     </select>

+ 58 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderRefundDao.xml

@@ -0,0 +1,58 @@
+<?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.yonge.cooleshow.biz.dal.dao.UserOrderRefundDao">
+    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserOrderRefund">
+        <result column="id_" property="id" />
+        <result column="user_id_" property="userId" />
+        <result column="order_id_" property="orderId" />
+        <result column="oredr_detil_ids_" property="oredrDetilIds" />
+        <result column="status_" property="status" />
+        <result column="apply_amount_" property="applyAmount" />
+        <result column="actual_amount_" property="actualAmount" />
+        <result column="reason_" property="reason" />
+        <result column="operate_id_" property="operateId" />
+        <result column="operate_reason_" property="operateReason" />
+        <result column="create_time_" property="createTime" />
+        <result column="update_time_" property="updateTime" />
+    </resultMap>
+
+    <!-- 表字段 -->
+    <sql id="baseColumns">
+         t.id_ as id
+        , t.user_id_ as userId
+        , t.order_id_ as orderId
+        , t.oredr_detil_ids_ as oredrDetilIds
+        , t.status_ as status
+        , t.apply_amount_ as applyAmount
+        , t.actual_amount_ as actualAmount
+        , t.reason_ as reason
+        , t.operate_id_ as operateId
+        , t.operate_reason_ as operateReason
+        , t.create_time_ as createTime
+        , t.update_time_ as updateTime
+        </sql>
+
+    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo">
+        SELECT
+        <include refid="baseColumns"/>
+        FROM user_order_refund t
+        where t.id_ = #{id}
+    </select>
+
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo">
+        SELECT
+        <include refid="baseColumns" />
+        FROM user_order_refund t
+    </select>
+
+    <select id="selectOrderRefundDetils" resultType="com.yonge.cooleshow.biz.dal.entity.UserOrderDetail">
+        select d.* from user_order o
+        left join user_order_detail d on o.order_no_ = d.order_no_
+        where o.id_ = {orderId} and o.status_ = 'PAID'
+        and not exists (
+            select 1 from user_order_refund r where r.biz_type_ = 'ORDER' and r.status_ in ('DOING','PASS') and r.biz_id_ = o.id_
+            union all
+            select 1 from user_order_refund r where r.biz_type_ = 'GOOD' and r.status_ in ('DOING','PASS') and r.biz_id_ = d.id_
+        )
+    </select>
+</mapper>

+ 45 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderRefundPaymentMapper.xml

@@ -0,0 +1,45 @@
+<?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.yonge.cooleshow.biz.dal.dao.UserOrderRefundPaymentDao">
+    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserOrderRefundPayment">
+        <result column="id_" property="id" />
+        <result column="refund_id_" property="refundId" />
+        <result column="adapay_no_" property="adapayNo" />
+        <result column="trans_no_" property="transNo" />
+        <result column="refund_amt_" property="refundAmt" />
+        <result column="back_refund_amt_" property="backRefundAmt" />
+        <result column="fee_amt_" property="feeAmt" />
+        <result column="status_" property="status" />
+        <result column="pay_fail_msg_" property="payFailMsg" />
+        <result column="create_time_" property="createTime" />
+        <result column="update_time_" property="updateTime" />
+    </resultMap>
+
+    <!-- 表字段 -->
+    <sql id="baseColumns">
+         t.id_ as id
+        , t.refund_id_ as refundId
+        , t.adapay_no_ as adapayNo
+        , t.trans_no_ as transNo
+        , t.refund_amt_ as refundAmt
+        , t.back_refund_amt_ as backRefundAmt
+        , t.fee_amt_ as feeAmt
+        , t.status_ as status
+        , t.pay_fail_msg_ as payFailMsg
+        , t.create_time_ as createTime
+        , t.update_time_ as updateTime
+        </sql>
+
+    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo">
+        SELECT
+        <include refid="baseColumns"/>
+        FROM user_order_refund_payment t
+        where t.id_ = #{id}
+    </select>
+
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo">
+        SELECT
+        <include refid="baseColumns" />
+        FROM user_order_refund_payment t
+    </select>
+</mapper>

+ 0 - 47
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderRefundsMapper.xml

@@ -1,47 +0,0 @@
-<?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.yonge.cooleshow.biz.dal.dao.UserOrderRefundsDao">
-	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds">
-            <result column="id_" property="id" />
-	        <result column="user_id_" property="userId" />
-	        <result column="order_no_" property="orderNo" />
-            <result column="order_detil_id_" property="orderDetilId" />
-            <result column="status_" property="status" />
-	        <result column="apply_amount_" property="applyAmount" />
-	        <result column="actual_amount_" property="actualAmount" />
-	        <result column="reason_" property="reason" />
-	        <result column="operate_user_id_" property="operateUserId" />
-	        <result column="create_time_" property="createTime" />
-	        <result column="update_time_" property="updateTime" />
-	        <result column="remark_" property="remark" />
-		</resultMap>
-
-    <!-- 表字段 -->
-    <sql id="baseColumns">
-         t.id_ as id
-        , t.user_id_ as userId
-        , t.order_no_ as orderNo
-        , t.order_detil_id_ as orderDetilId
-        , t.status_ as status
-        , t.apply_amount_ as applyAmount
-        , t.actual_amount_ as actualAmount
-        , t.reason_ as reason
-        , t.operate_user_id_ as operateUserId
-        , t.create_time_ as createTime
-        , t.update_time_ as updateTime
-        , t.remark_ as remark
-        </sql>
-
-    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo">
-        SELECT
-            <include refid="baseColumns"/>
-        FROM order_refunds t
-        where t.id_ = #{id}
-    </select>
-    
-    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo">
-		SELECT         
-        	<include refid="baseColumns" />
-		FROM order_refunds t
-	</select>
-</mapper>

+ 0 - 1
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/TeacherController.java

@@ -34,7 +34,6 @@ public class TeacherController extends BaseController {
     private TeacherService teacherService;
     @Autowired
     private StudentStarService studentStarService;
-
     @Autowired
     private AppVersionInfoService appVersionInfoService;
 

+ 0 - 20
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java

@@ -163,26 +163,6 @@ public class UserOrderController extends BaseController {
         }
     }
 
-    @ApiOperation(value = "订单退款")
-    @PostMapping("/orderRefund")
-    public HttpResponseResult<Boolean> orderRefund(@RequestBody OrderRefundReq refundReq) {
-        SysUser user = sysUserFeignService.queryUserInfo();
-        if (user == null || null == user.getId()) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        refundReq.setUserId(user.getId());
-        Future<HttpResponseResult<Boolean>> httpResponseResultFuture = DistributedLock.of(redissonClient)
-                .callIfLockCanGet(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey(user.getId())
-                        , () -> userOrderService.orderRefund(refundReq), 60L, TimeUnit.SECONDS);
-
-        try {
-            return httpResponseResultFuture.get();
-        } catch (Exception e) {
-            e.printStackTrace();
-            return HttpResponseResult.failed("订单退款失败");
-        }
-    }
-
     /**
      * 查询分页
      */

+ 76 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderRefundController.java

@@ -0,0 +1,76 @@
+package com.yonge.cooleshow.student.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
+import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
+import com.yonge.cooleshow.biz.dal.service.UserOrderRefundService;
+import com.yonge.cooleshow.biz.dal.support.DistributedLock;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
+@RestController
+@RequestMapping("/UserOrderRefunds")
+@Api(value = "用户退款表", tags = "用户退款表")
+public class UserOrderRefundController extends BaseController {
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+	@Autowired
+	private RedissonClient redissonClient;
+    @Autowired
+    private UserOrderRefundService userOrderRefundService;
+
+	/**
+     * 查询单条
+     */
+    @GetMapping("/detail/{id}")
+    @ApiOperation(value = "详情", notes = "传入id")
+    public HttpResponseResult<UserOrderRefundVo> detail(@PathVariable("id") Long id) {
+    	return succeed(userOrderRefundService.detail(id));
+	}
+    
+    /**
+     * 查询分页
+     */
+    @PostMapping("/page")
+    @ApiOperation(value = "查询分页", notes = "传入orderRefundsSearch")
+    public HttpResponseResult<PageInfo<UserOrderRefundVo>> page(@RequestBody UserOrderRefundSearch query) {
+		IPage<UserOrderRefundVo> pages = userOrderRefundService.selectPage(PageUtil.getPage(query), query);
+        return succeed(PageUtil.pageInfo(pages));
+	}
+
+	@ApiOperation(value = "订单退款")
+	@PostMapping("/orderRefund")
+	public HttpResponseResult<Boolean> orderRefund(@RequestBody OrderRefundReq refundReq) {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (user == null || null == user.getId()) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		refundReq.setUserId(user.getId());
+		Future<HttpResponseResult<Boolean>> httpResponseResultFuture = DistributedLock.of(redissonClient)
+				.callIfLockCanGet(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey(user.getId())
+						, () -> userOrderRefundService.orderRefund(refundReq), 60L, TimeUnit.SECONDS);
+
+		try {
+			return httpResponseResultFuture.get();
+		} catch (Exception e) {
+			e.printStackTrace();
+			return HttpResponseResult.failed("订单退款失败");
+		}
+	}
+}

+ 24 - 0
toolset/utils/src/main/java/com/yonge/toolset/utils/string/StringUtil.java

@@ -1,8 +1,11 @@
 package com.yonge.toolset.utils.string;
 
 import org.springframework.lang.Nullable;
+import org.springframework.util.CollectionUtils;
 
 import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -242,4 +245,25 @@ public class StringUtil {
             return defaultValue;
         }
     }
+
+    public static String join(Collection<?> coll, String delim){
+        return join(coll, delim, "", "");
+    }
+
+    public static String join(Collection<?> coll, String delim, String prefix, String suffix){
+        if (CollectionUtils.isEmpty(coll)) {
+            return "";
+        } else {
+            StringBuilder sb = new StringBuilder();
+            Iterator it = coll.iterator();
+
+            while(it.hasNext()) {
+                sb.append(prefix).append(it.next()).append(suffix);
+                if (it.hasNext()) {
+                    sb.append(delim);
+                }
+            }
+            return sb.toString();
+        }
+    }
 }