فهرست منبع

Merge remote-tracking branch 'origin/master'

zouxuan 3 سال پیش
والد
کامیت
54128cc364
16فایلهای تغییر یافته به همراه394 افزوده شده و 180 حذف شده
  1. 21 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java
  2. 2 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsCartItemServiceImpl.java
  3. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/config/ResourceServerConfig.java
  4. 6 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/PianoRoomSettingsController.java
  5. 154 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/open/UserOrderClient.java
  6. 8 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  7. 29 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  8. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveCourseGroupStudentVo.java
  9. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveCourseGroupVo.java
  10. 6 8
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml
  11. 1 1
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/config/ResourceServerConfig.java
  12. 0 14
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java
  13. 23 23
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/config/ResourceServerConfig.java
  14. 0 38
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/PianoRoomBuyRecordController.java
  15. 0 90
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserWithdrawalController.java
  16. 110 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/open/UserWithdrawalClient.java

+ 21 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java

@@ -150,4 +150,25 @@ public interface SysConfigConstant {
      * 琴房学员解绑未上课天数
      */
     String PIANO_ROOM_UNBIND_DAYS = "piano_room_unbind_days";
+    
+    /**
+     * @Description: 琴房课最大学员容量
+     * @Author: cy
+     * @Date: 2022/6/1
+     */
+    String PIANO_ROOM_MAX_STUDENTS = "piano_room_max_students";
+    
+    /**
+     * @Description: 提前XX分钟创建/进入琴房课房间时间
+     * @Author: cy
+     * @Date: 2022/6/1
+     */
+    String PRE_CREATE_PIANO_ROOM_MINUTE = "pre_create_piano_room_minute";
+    
+    /**
+     * @Description: 琴房课结束后,XX分钟关闭房间
+     * @Author: cy
+     * @Date: 2022/6/1
+     */
+    String DESTROY_EXPIRED_PIANO_ROOM_MINUTE = "destroy_expired_piano_room_minute";
 }

+ 2 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsCartItemServiceImpl.java

@@ -56,6 +56,7 @@ public class OmsCartItemServiceImpl implements OmsCartItemService {
             if (pmsProduct == null) {
                 throw new BizException("商品不存在");
             }
+            cartItem.setPrice(pmsProduct.getPrice());
             cartItem.setProductPic(pmsProduct.getPic());
             cartItem.setProductName(pmsProduct.getName());
             cartItem.setProductSubTitle(pmsProduct.getSubTitle());
@@ -70,6 +71,7 @@ public class OmsCartItemServiceImpl implements OmsCartItemService {
                 }
                 cartItem.setProductSkuCode(pmsSkuStock.getSkuCode());
                 cartItem.setProductAttr(pmsSkuStock.getSpData());
+                cartItem.setPrice(pmsSkuStock.getPrice());
             }
 
             cartItem.setCreateDate(new Date());

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/config/ResourceServerConfig.java

@@ -26,7 +26,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 	public void configure(HttpSecurity http) throws Exception {
 		http.csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and()
 				.authorizeRequests().antMatchers("/task/**").hasIpAddress("0.0.0.0/0")
-				.antMatchers("/v2/api-docs", "/code/*", "/api/*","/payment/callback", "/appVersionInfo/queryByPlatform", "/uploadFile","/userOrder/**").permitAll().anyRequest().authenticated()
+				.antMatchers("/v2/api-docs", "/code/*", "/api/*", "/appVersionInfo/queryByPlatform", "/uploadFile","/open/**").permitAll().anyRequest().authenticated()
 				.and().httpBasic();
 	}
 

+ 6 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/PianoRoomSettingsController.java

@@ -60,6 +60,12 @@ public class PianoRoomSettingsController extends BaseController {
     @PostMapping("/save")
     @ApiOperation(value = "新增", notes = "传入pianoRoomSettings")
     public HttpResponseResult save(@Valid @RequestBody PianoRoomSettings pianoRoomSettings) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || user.getId() == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        pianoRoomSettings.setCreateBy(user.getId());
+        pianoRoomSettings.setUpdateBy(user.getId());
         return status(pianoRoomSettingsService.save(pianoRoomSettings));
     }
     /**
@@ -104,7 +110,6 @@ public class PianoRoomSettingsController extends BaseController {
         if (StringUtil.isEmpty(ids)) {
             return failed("参数不能为空");
         }
-        List<PianoRoomSettings> list = pianoRoomSettingsService.list(Wrappers.emptyWrapper());
         return status(pianoRoomSettingsService.removeByIds(StringUtil.toLongList(ids)));
     }
 

+ 154 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/open/UserOrderClient.java

@@ -0,0 +1,154 @@
+package com.yonge.cooleshow.admin.open;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
+import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
+import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.service.UserOrderPaymentService;
+import com.yonge.cooleshow.biz.dal.service.UserOrderRefundService;
+import com.yonge.cooleshow.biz.dal.service.UserOrderService;
+import com.yonge.cooleshow.biz.dal.support.DistributedLock;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.payment.base.enums.MethodNameEnum;
+import com.yonge.toolset.payment.base.enums.OpenEnum;
+import com.yonge.toolset.payment.base.enums.PayChannelEnum;
+import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
+import com.yonge.toolset.payment.base.model.Payment;
+import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
+import com.yonge.toolset.payment.core.service.PaymentClient;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.concurrent.TimeUnit;
+
+@RestController
+@RequestMapping("/open/userOrder")
+@Api(value = "开放权限接口-订单", hidden = true)
+public class UserOrderClient extends BaseController {
+    private final static Logger log = LoggerFactory.getLogger(UserOrderClient.class);
+
+    @Autowired
+    private UserOrderPaymentService paymentService;
+    @Autowired
+    private UserOrderRefundService userOrderRefundService;
+    @Autowired
+    private UserOrderService userOrderService;
+    @Autowired
+    private PaymentClient paymentClient;
+    @Autowired
+    private RedissonClient redissonClient;
+
+    @ApiOperation(value = "查询付款单")
+    @GetMapping("/queryPayment")
+    public HttpResponseResult<Payment> queryPayment(String paymentNo) {
+        UserOrderPayment userOrderPayment = paymentService.getOne(Wrappers.<UserOrderPayment>lambdaQuery()
+                .eq(UserOrderPayment::getPaymentNo, paymentNo)
+        );
+        if (null == userOrderPayment) {
+            return HttpResponseResult.succeed();
+        }
+        Payment param = new Payment(userOrderPayment.getOpenType(),
+                PaymentClientEnum.valueOf(userOrderPayment.getPaymentClient()), userOrderPayment.getPayChannel());
+        param.setId(userOrderPayment.getTransNo());
+        param.setPaymentNo(userOrderPayment.getPaymentNo());
+        BaseResult<Payment> paymentBaseResult = paymentClient.queryPayment(param);
+        return HttpResponseResult.status(paymentBaseResult);
+    }
+
+    /***
+     * 支付回调
+     * @author liweifan
+     * @param: request
+     * @updateTime 2022/3/11 18:35
+     */
+    @PostMapping("/callback/{openType}/{client}/{payChannel}/{payMethod}")
+    public Object callback(
+            @PathVariable("openType") String openType,
+            @PathVariable("client") String client,
+            @PathVariable("payChannel") String payChannel,
+            @PathVariable("payMethod") String payMethod,
+            HttpServletRequest request
+    ) {
+        log.info("支付回调:openType is {} ,paymentClient is {},payChannel is {},payMethod is {}", openType, client, payChannel, payMethod);
+        BaseResult<PaymentCallBack> res = paymentClient.analysisNotice(
+                OpenEnum.valueOf(openType), PaymentClientEnum.valueOf(client),
+                PayChannelEnum.valueOf(payChannel), MethodNameEnum.valueOf(payMethod), request);
+        if (res.getStatus()) {
+            PaymentCallBack data = res.getData();
+            //查询到订单
+            UserOrderVo userOrderVo = userOrderService.getUserOrderByPaymentNoOrTransNo(data.getPaymentNo(), data.getId());
+            if (null == userOrderVo) {
+                return res.getData().getResMsg();
+            }
+            try {
+                DistributedLock.of(redissonClient)
+                        .runIfLockCanGet(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey(userOrderVo.getUserId())
+                                , () -> {
+                                    if (MethodNameEnum.executePayment.equals(data.getMethodName())) {
+                                        //支付交易
+                                        paymentService.executePaymentCallBack(data);
+                                    } else if (MethodNameEnum.closePayment.equals(data.getMethodName())) {
+                                        //关闭订单
+                                        paymentService.closePaymentCallBack(data);
+                                    } else if (MethodNameEnum.refundPayment.equals(data.getMethodName())) {
+                                        //退款
+                                        userOrderRefundService.refundPaymentCallBack(data);
+                                    }
+                                }, 60L, TimeUnit.SECONDS);
+            } catch (BizException e) {
+                log.error("回调业务异常,msg is {}", e.getMessage());
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return res.getData().getResMsg();
+    }
+
+
+    /***
+     * 支付回调
+     * @author liweifan
+     * @param: request
+     * @updateTime 2022/3/11 18:35
+     */
+    @PostMapping("/testCallback")
+    public void testCallback(@RequestBody PaymentCallBack data) {
+        if (MethodNameEnum.executePayment.equals(data.getMethodName())) {
+            //支付交易
+            paymentService.executePaymentCallBack(data);
+        } else if (MethodNameEnum.closePayment.equals(data.getMethodName())) {
+            //关闭订单
+            paymentService.closePaymentCallBack(data);
+        } else if (MethodNameEnum.refundPayment.equals(data.getMethodName())) {
+            //退款
+            userOrderRefundService.refundPaymentCallBack(data);
+        }
+    }
+
+
+    @GetMapping("/setSuccessStatus")
+    @ApiOperation(value = "完成所有订单(测试用)")
+    public HttpResponseResult<Boolean> setSuccessStatus() {
+        userOrderService.setSuccessStatus();
+        return succeed(true);
+    }
+
+    @GetMapping("/setOrderStatus")
+    @ApiOperation(value = "设置订单状态(测试用)")
+    public HttpResponseResult<Boolean> setOrderStatus(
+            @RequestParam("orderNo") String orderNo,
+            @RequestParam("orderStatus") OrderStatusEnum orderStatus) {
+        userOrderService.setOrderStatus(orderNo, orderStatus);
+        return succeed(true);
+    }
+}

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

@@ -540,8 +540,14 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
 
         // 获取课程组声部
         List<LiveCourseGroupVo> subjectList = baseMapper.selectCourseGroupSubject(courseGroupIdList);
-        for (int i = 0; i < records.size(); i++) {
-            records.get(i).setSubjectName(subjectList.get(i).getSubjectName());
+        Map<Long, List<LiveCourseGroupVo>> collect = subjectList.stream()
+                                .collect(Collectors.groupingBy( LiveCourseGroupVo::getCourseGroupId));
+        for (LiveCourseGroupVo record : records) {
+            List<LiveCourseGroupVo> liveCourseGroupVos = collect.get(record.getCourseGroupId());
+            if (CollectionUtils.isEmpty(liveCourseGroupVos)) {
+                continue;
+            }
+            record.setSubjectName(liveCourseGroupVos.get(0).getSubjectName());
         }
 
         return liveCourseGroupVoIPage;

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

@@ -45,7 +45,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.temporal.TemporalAdjusters;
@@ -101,6 +100,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     private UserBindingTeacherDao userBindingTeacherDao;
     @Autowired
     private CourseScheduleRecordDao recordDao;
+    @Autowired
+    private ImGroupService imGroupService;
 
     @Override
     public CourseScheduleDao getDao() {
@@ -1610,6 +1611,11 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         List<CourseTimeEntity> timeList = arrangeCourseVo.getTimeList();//选课时间
         Integer consumeTime = arrangeCourseVo.getConsumeTime();
 
+        Integer configValue = Integer.valueOf(sysConfigService.findConfigValue(SysConfigConstant.PIANO_ROOM_MAX_STUDENTS));
+        if (studentIds.size()>configValue){
+            throw new BizException("成课学员人数超过房间最大容量{}",configValue);
+        }
+
         //校验课时
         if (timeList.size() != classNum) {
             throw new BizException("课时数与排课数不符");
@@ -1723,6 +1729,14 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         roomTime.setRemainTime(remainTime - consumTime);
         roomTime.setFrozenTime(frozenTime + consumTime);
         pianoRoomTimeDao.update(roomTime, Wrappers.<PianoRoomTime>lambdaQuery().eq(PianoRoomTime::getTeacherId, teacherId));
+
+        //创建群聊
+        try {
+            imGroupService.autoCreate(courseGroup.getId(),CourseScheduleEnum.PIANO_ROOM_CLASS.getCode());
+        } catch (Exception e) {
+            log.error("琴房课程组id:{},创建群聊失败:{}",courseGroup.getId(),e);
+            e.printStackTrace();
+        }
     }
 
     /**
@@ -1819,8 +1833,15 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         //更新组课程数
         Long groupId = schedule.getCourseGroupId();
         Integer count = baseMapper.selectCount(Wrappers.<CourseSchedule>lambdaQuery().eq(CourseSchedule::getCourseGroupId, groupId));
-        if (count == 0) {
+        if (count == 0) {//组内课程为0,删除课程组
             courseGroupService.getDao().deleteById(groupId);
+
+            //解散群聊
+            try {
+                imGroupService.dismiss(String.valueOf(groupId));
+            } catch (Exception e) {
+                log.error("琴房课程组id:{},关闭群聊失败:{}",groupId,e);
+            }
         } else {
             courseGroupService.update(null, Wrappers.<CourseGroup>lambdaUpdate()
                     .eq(CourseGroup::getId, groupId)
@@ -1898,6 +1919,12 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         Long teacherId = WrapperUtil.toLong(param, "teacherId", "老师id不能为空!");
         List<Integer> studentIdsList = (List<Integer>) param.get("studentIds");
         List<Long> studentIds = JSONArray.parseArray(studentIdsList.toString(), Long.class);
+
+        Integer configValue = Integer.valueOf(sysConfigService.findConfigValue(SysConfigConstant.PIANO_ROOM_MAX_STUDENTS));
+        if (studentIds.size()>configValue){
+            throw new BizException("成课学员人数超过房间最大容量{}",configValue);
+        }
+
         if (CollectionUtils.isEmpty(studentIds)) {
             throw new BizException("学生id不能为空");
         }

+ 22 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveCourseGroupStudentVo.java

@@ -16,6 +16,9 @@ import java.util.Date;
 @ApiModel("直播课签署学生信息")
 public class LiveCourseGroupStudentVo {
 
+    @ApiModelProperty("支付记录id")
+    private Long paymentId;
+
     @ApiModelProperty("学生id")
     private Long studentId;
 
@@ -32,6 +35,9 @@ public class LiveCourseGroupStudentVo {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date payTime;
 
+    @ApiModelProperty("学生手机号")
+    private String phone;
+
 
     public Long getStudentId() {
         return studentId;
@@ -72,4 +78,20 @@ public class LiveCourseGroupStudentVo {
     public void setPayTime(Date payTime) {
         this.payTime = payTime;
     }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public Long getPaymentId() {
+        return paymentId;
+    }
+
+    public void setPaymentId(Long paymentId) {
+        this.paymentId = paymentId;
+    }
 }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveCourseGroupVo.java

@@ -57,6 +57,9 @@ public class LiveCourseGroupVo {
     @ApiModelProperty(value = "手机号")
     private String phone;
 
+    @ApiModelProperty("订单号")
+    private String orderNo;
+
     public Long getCourseNum() {
         return courseNum;
     }
@@ -160,4 +163,12 @@ public class LiveCourseGroupVo {
     public void setPhone(String phone) {
         this.phone = phone;
     }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
 }

+ 6 - 8
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml

@@ -156,8 +156,10 @@
         cg.course_num_ as courseNum,
         cg.created_time_ as createTime,
         cg.course_introduce_ as courseIntroduce,
-        cg.im_group_id_  as imGroupId,
-        su.phone_ as phone
+        <if test="param.studentId != null">
+            cssp.order_no_ as orderNo,
+        </if>
+        cg.im_group_id_  as imGroupId
         from course_group cg
         left join course_schedule_student_payment cssp on cg.id_ = cssp.course_group_id_
         left join sys_user su on su.id_ = cssp.user_id_
@@ -212,20 +214,16 @@
                 </foreach>
             </if>
         </where>
-        <if test="courseGroupIdList != null and courseGroupIdList.size() != 0">
-            order by  field(cg.id_,
-            <foreach collection="courseGroupIdList" item="item" open="" close=")" separator=",">
-                #{item}
-            </foreach>
-        </if>
     </select>
 
     <select id="selectAdminLiveStudentPage" resultType="com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupStudentVo">
         select
+        cssp.id_ as paymentId,
         su.id_ as studentId,
         su.username_ as studentName,
         cssp.actual_price_ as price,
         cssp.order_no_ as orderNo,
+        su.phone_ as phone,
         cssp.created_time_ as payTime
         from course_schedule_student_payment cssp
         left join sys_user su on cssp.user_id_ = su.id_

+ 1 - 1
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/config/ResourceServerConfig.java

@@ -28,7 +28,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                 .authorizeRequests()
                 .antMatchers("/task/**")
                 .hasIpAddress("0.0.0.0/0")
-                .antMatchers("/wechat/*", "/v2/api-docs", "/code/*","/open/**", "/payment/callback", "/userOrder/setSuccessStatus")
+                .antMatchers("/wechat/*", "/v2/api-docs", "/code/*","/open/**")
                 .permitAll().anyRequest().authenticated().and().httpBasic();
     }
 

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

@@ -239,19 +239,5 @@ public class UserOrderController extends BaseController {
         return succeed(detail);
     }
 
-    @GetMapping("/setSuccessStatus")
-    @ApiOperation(value = "完成所有订单(测试用)")
-    public HttpResponseResult<Boolean> setSuccessStatus() {
-        userOrderService.setSuccessStatus();
-        return succeed(true);
-    }
 
-    @GetMapping("/setOrderStatus")
-    @ApiOperation(value = "设置订单状态(测试用)")
-    public HttpResponseResult<Boolean> setOrderStatus(
-            @RequestParam("orderNo") String orderNo,
-            @RequestParam("orderStatus") OrderStatusEnum orderStatus) {
-        userOrderService.setOrderStatus(orderNo, orderStatus);
-        return succeed(true);
-    }
 }

+ 23 - 23
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/config/ResourceServerConfig.java

@@ -16,30 +16,30 @@ import com.yonge.cooleshow.common.security.BaseAuthenticationEntryPoint;
 @EnableGlobalMethodSecurity(prePostEnabled = true)
 public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 
-	@Autowired
-	private BaseAccessDeniedHandler baseAccessDeniedHandler;
-
-	@Autowired
-	private BaseAuthenticationEntryPoint baseAuthenticationEntryPoint;
-
-	@Override
-	public void configure(HttpSecurity http) throws Exception {
-		http.csrf()
-				.disable()
-				.exceptionHandling()
-				.accessDeniedHandler(baseAccessDeniedHandler)
-				.authenticationEntryPoint(baseAuthenticationEntryPoint)
-				.and()
-				.authorizeRequests()
-				.antMatchers("/task/**").hasIpAddress("0.0.0.0/0")
-				.antMatchers("/v2/api-docs", "/code/*","/payment/callback",
-                        "/liveRoom/test","/liveRoom/syncUserStatus","/courseGroup/getLockCache","/userWithdrawal/callback","/userWithdrawal/contractCallback")
+    @Autowired
+    private BaseAccessDeniedHandler baseAccessDeniedHandler;
+
+    @Autowired
+    private BaseAuthenticationEntryPoint baseAuthenticationEntryPoint;
+
+    @Override
+    public void configure(HttpSecurity http) throws Exception {
+        http.csrf()
+                .disable()
+                .exceptionHandling()
+                .accessDeniedHandler(baseAccessDeniedHandler)
+                .authenticationEntryPoint(baseAuthenticationEntryPoint)
+                .and()
+                .authorizeRequests()
+                .antMatchers("/task/*").hasIpAddress("0.0.0.0/0")
+                .antMatchers("/v2/api-docs", "/code/*",
+                        "/liveRoom/test", "/liveRoom/syncUserStatus", "/courseGroup/getLockCache", "/open/**")
                 .permitAll().anyRequest().authenticated().and().httpBasic();
-	}
+    }
 
-	@Override
-	public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
-		resources.authenticationEntryPoint(baseAuthenticationEntryPoint).accessDeniedHandler(baseAccessDeniedHandler);
-	}
+    @Override
+    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
+        resources.authenticationEntryPoint(baseAuthenticationEntryPoint).accessDeniedHandler(baseAccessDeniedHandler);
+    }
 
 }

+ 0 - 38
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/PianoRoomBuyRecordController.java

@@ -44,43 +44,5 @@ public class PianoRoomBuyRecordController extends BaseController {
 		IPage<PianoRoomBuyRecordVo> pages = pianoRoomBuyRecordService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));
 	}
-    
-    /**
-	 * 新增
-	 */
-	@PostMapping("/save")
-	@ApiOperation(value = "新增", notes = "传入pianoRoomBuyRecord")
-	public HttpResponseResult save(@Valid @RequestBody PianoRoomBuyRecord pianoRoomBuyRecord) {
-    	return status(pianoRoomBuyRecordService.save(pianoRoomBuyRecord));
-	}
-    
-    /**
-	 * 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperation(value = "修改", notes = "传入pianoRoomBuyRecord")
-	public HttpResponseResult update(@Valid @RequestBody PianoRoomBuyRecord pianoRoomBuyRecord) {
-        return status(pianoRoomBuyRecordService.updateById(pianoRoomBuyRecord));
-	}
-    
-    /**
-	 * 新增或修改
-	 */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入pianoRoomBuyRecord")
-	public HttpResponseResult submit(@Valid @RequestBody PianoRoomBuyRecord pianoRoomBuyRecord) {
-        return status(pianoRoomBuyRecordService.saveOrUpdate(pianoRoomBuyRecord));
-    }
 
- 	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-			return failed("参数不能为空");
-		}
-		return status(pianoRoomBuyRecordService.removeByIds(StringUtil.toLongList(ids)));
-	}
 }

+ 0 - 90
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserWithdrawalController.java

@@ -1,13 +1,10 @@
 package com.yonge.cooleshow.teacher.controller;
 
-import com.alibaba.fastjson.JSONObject;
 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.WithdrawalReq;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherWithdrawalSearch;
-import com.yonge.cooleshow.biz.dal.entity.UserWithdrawalCallback;
-import com.yonge.cooleshow.biz.dal.enums.DealStatusEnum;
 import com.yonge.cooleshow.biz.dal.service.UserWithdrawalService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo;
@@ -16,38 +13,28 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.toolset.thirdparty.lingxinpay.RSA;
 import com.yonge.toolset.utils.date.DateUtil;
-import com.yonge.toolset.utils.json.JsonUtil;
 import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpStatus;
-import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
-import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.temporal.TemporalAdjusters;
 import java.util.Date;
-import java.util.Map;
 
 @RestController
 @RequestMapping("/userWithdrawal")
 @Api(value = "用户账户提现表", tags = "用户账户提现表")
 public class UserWithdrawalController extends BaseController {
-    private final static Logger log = LoggerFactory.getLogger(UserWithdrawalController.class);
 
     @Autowired
     private UserWithdrawalService userWithdrawalService;
@@ -55,9 +42,6 @@ public class UserWithdrawalController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
 
-    @Value("${withdraw.privateKey}")
-    private String privateKey;
-
     @PostMapping("/getWithdrawalInfo")
     @ApiOperation(value = "查询提现页面信息")
     public HttpResponseResult<WithdrawalInfoRes> getWithdrawalInfo() {
@@ -119,78 +103,4 @@ public class UserWithdrawalController extends BaseController {
         IPage<UserWithdrawalVo> pages = userWithdrawalService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));
     }
-
-    /**
-     * 异步回调接收-提现
-     *
-     * @param content
-     * @param request
-     * @return
-     */
-    @PostMapping("/callback")
-    public String callback(@RequestBody String content, HttpServletRequest request) {
-        log.info("交易回调请求地址:{} 请求参数:{}", request.getRemoteAddr(), content);
-        try {
-            if (StringUtils.isBlank(content)) {
-                throw new Exception();
-            }
-            JSONObject jsonObject = JSONObject.parseObject(content);
-            String jsonStr = RSA.decryptPri(jsonObject.getString("sign"), privateKey);
-            log.info("jsonStr:{}", jsonStr);
-
-            Map<String, Object> withdrawRecord = JSONObject.parseObject(jsonStr);
-            UserWithdrawalCallback callback = JsonUtil.toJavaObject(withdrawRecord, UserWithdrawalCallback.class);
-
-            userWithdrawalService.callback(callback, jsonStr);
-        } catch (BizException e) {
-            log.error("解密失败e:{}", e.getMessage());
-            return "failed";
-        } catch (Exception e) {
-            log.error("解密失败e:{}", e);
-            return "failed";
-        }
-        return "success";
-    }
-
-    /**
-     * 异步回调接收-签署协议
-     *
-     * @param dataStr
-     * @param request
-     * @return
-     */
-    @PostMapping("/contractCallback")
-    public String contractCallback(@RequestBody String dataStr, HttpServletRequest request) {
-        log.info("回调请求地址:{} 请求参数:{}", request.getRemoteAddr(), dataStr);
-        try {
-            if (StringUtils.isBlank(dataStr)) {
-                throw new Exception();
-            }
-            JSONObject data = JSONObject.parseObject(dataStr);
-            JSONObject content = data.getJSONObject("content");
-
-            String return_code = data.getString("return_code");
-
-            if (CollectionUtils.isEmpty(content) || null == content.getString("serialNo")) {
-                log.error("签署失败,返回合同编号为空 {}", dataStr);
-                return "failed";
-            }
-
-            if ("T".equals(return_code)) {
-                userWithdrawalService.contractCallback(
-                        DealStatusEnum.SCCESS.getCode(), content.getString("serialNo"),
-                        content.getString("contractUrl"), null);
-                return "success";
-            } else {
-                String return_message = data.getString("return_message");
-                userWithdrawalService.contractCallback(
-                        DealStatusEnum.FAILED.getCode(), content.getString("serialNo"), null, return_message);
-                return "failed";
-            }
-        } catch (Exception e) {
-            log.error("签署失败e:{}", e);
-            return "failed";
-        }
-
-    }
 }

+ 110 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/open/UserWithdrawalClient.java

@@ -0,0 +1,110 @@
+package com.yonge.cooleshow.teacher.open;
+
+import com.alibaba.fastjson.JSONObject;
+import com.yonge.cooleshow.biz.dal.entity.UserWithdrawalCallback;
+import com.yonge.cooleshow.biz.dal.enums.DealStatusEnum;
+import com.yonge.cooleshow.biz.dal.service.UserWithdrawalService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.thirdparty.lingxinpay.RSA;
+import com.yonge.toolset.utils.json.JsonUtil;
+import io.swagger.annotations.Api;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/open/userWithdrawal")
+@Api(value = "开放权限接口-提现", hidden = true)
+public class UserWithdrawalClient extends BaseController {
+    private final static Logger log = LoggerFactory.getLogger(UserWithdrawalClient.class);
+
+    @Autowired
+    private UserWithdrawalService userWithdrawalService;
+
+    @Value("${withdraw.privateKey}")
+    private String privateKey;
+
+    /**
+     * 异步回调接收-提现
+     *
+     * @param content
+     * @param request
+     * @return
+     */
+    @PostMapping("/callback")
+    public String callback(@RequestBody String content, HttpServletRequest request) {
+        log.info("交易回调请求地址:{} 请求参数:{}", request.getRemoteAddr(), content);
+        try {
+            if (StringUtils.isBlank(content)) {
+                throw new Exception();
+            }
+            JSONObject jsonObject = JSONObject.parseObject(content);
+            String jsonStr = RSA.decryptPri(jsonObject.getString("sign"), privateKey);
+            log.info("jsonStr:{}", jsonStr);
+
+            Map<String, Object> withdrawRecord = JSONObject.parseObject(jsonStr);
+            UserWithdrawalCallback callback = JsonUtil.toJavaObject(withdrawRecord, UserWithdrawalCallback.class);
+
+            userWithdrawalService.callback(callback, jsonStr);
+        } catch (BizException e) {
+            log.error("解密失败e:{}", e.getMessage());
+            return "failed";
+        } catch (Exception e) {
+            log.error("解密失败e:{}", e);
+            return "failed";
+        }
+        return "success";
+    }
+
+    /**
+     * 异步回调接收-签署协议
+     *
+     * @param dataStr
+     * @param request
+     * @return
+     */
+    @PostMapping("/contractCallback")
+    public String contractCallback(@RequestBody String dataStr, HttpServletRequest request) {
+        log.info("回调请求地址:{} 请求参数:{}", request.getRemoteAddr(), dataStr);
+        try {
+            if (StringUtils.isBlank(dataStr)) {
+                throw new Exception();
+            }
+            JSONObject data = JSONObject.parseObject(dataStr);
+            JSONObject content = data.getJSONObject("content");
+
+            String return_code = data.getString("return_code");
+
+            if (CollectionUtils.isEmpty(content) || null == content.getString("serialNo")) {
+                log.error("签署失败,返回合同编号为空 {}", dataStr);
+                return "failed";
+            }
+
+            if ("T".equals(return_code)) {
+                userWithdrawalService.contractCallback(
+                        DealStatusEnum.SCCESS.getCode(), content.getString("serialNo"),
+                        content.getString("contractUrl"), null);
+                return "success";
+            } else {
+                String return_message = data.getString("return_message");
+                userWithdrawalService.contractCallback(
+                        DealStatusEnum.FAILED.getCode(), content.getString("serialNo"), null, return_message);
+                return "failed";
+            }
+        } catch (Exception e) {
+            log.error("签署失败e:{}", e);
+            return "failed";
+        }
+    }
+}