Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

liujunchi 3 tahun lalu
induk
melakukan
cf889a8fc8
28 mengubah file dengan 449 tambahan dan 140 penghapusan
  1. 1 0
      audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java
  2. 10 6
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java
  3. 1 1
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/service/DefaultUserDetailsService.java
  4. 1 2
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ContractTemplateTypeEnum.java
  5. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/OrderStatusConvert.java
  6. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/OrderTypeConvert.java
  7. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  8. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserWithdrawalDao.java
  9. 28 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseScheduleReplied.java
  10. 4 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/WithdrawSdk.java
  11. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java
  12. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  13. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysUserContractRecordService.java
  14. 8 17
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  15. 20 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  16. 0 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java
  17. 53 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysUserContractRecordServiceImpl.java
  18. 28 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java
  19. 15 13
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java
  20. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveCourseInfoVo.java
  21. 174 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/PianoClassVo.java
  22. 4 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CoursePlanMapper.xml
  23. 36 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  24. 2 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserBindingTeacherMapper.xml
  25. 6 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserWithdrawalMapper.xml
  26. 13 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseScheduleController.java
  27. 3 47
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/SysUserContractRecordController.java
  28. 1 40
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SysUserContractRecordController.java

+ 1 - 0
audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java

@@ -126,6 +126,7 @@ public class AudioCompareHandler implements MessageHandler {
 			channelContext.setHandlerSwitch(false);
 
 			channelContext.getSongMusicXmlMap().put(musicXmlBasicInfo.getExamSongId(), musicXmlBasicInfo);
+
 			channelContext.init(musicXmlBasicInfo.getPlatform(), musicXmlBasicInfo.getHeardLevel(), musicXmlBasicInfo.getSubjectId(),
 					musicXmlBasicInfo.getBeatLength(), audioFormat.getSampleRate(), bufferSize / 2);
 			channelContext.setUser(user);

+ 10 - 6
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java

@@ -91,14 +91,17 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
             if (StringUtils.isNotBlank(deviceNum)) {
                 sysUserDeviceService.bindDevice(clientId, user.getId(), deviceNum);
             }
-
-            if (!userInfo.getSysUser().getUserType().contains(clientId)
-                    || (StringUtils.isNotEmpty(loginUserType) && !userInfo.getSysUser().getUserType().contains(loginUserType))) {
-                if (isRegister == false || StringUtils.equals("SYSTEM", clientId)) {
+            if (!userInfo.getSysUser().getUserType().contains(clientId)) {
+                if(StringUtils.equals("SYSTEM", clientId)){
                     throw new LockedException("用户不存在");
-                } else {
-                    user.setUpdateTime(new Date());
+                }
+                if(isRegister == false
+                        && (StringUtils.isEmpty(loginUserType) || !(userInfo.getSysUser().getUserType().contains(loginUserType)))){
+                    throw new LockedException("用户不存在");
+                }
 
+                if(isRegister == true){
+                    user.setUpdateTime(new Date());
                     if (StringUtils.equalsIgnoreCase(loginUserType, "TEACHER")) {
                         user.setUserType(user.getUserType() + "," + loginUserType);
                         sysUserService.saveTeacher(user);
@@ -116,6 +119,7 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
                     }
                     sysUserService.update(user);
                 }
+
             }
         }
 

+ 1 - 1
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/service/DefaultUserDetailsService.java

@@ -39,7 +39,7 @@ public class DefaultUserDetailsService implements UserDetailsService {
             return null;
         }
 
-        SysUserInfo userInfo = null;
+        SysUserInfo userInfo;
 
         if (StringUtils.startsWith(username, SecurityConstants.PHONE_PRINCIPAL_PREFIX)) {
             userInfo = sysUserService.queryUserInfoByPhone(StringUtils.substringAfter(username, SecurityConstants.PHONE_PRINCIPAL_PREFIX));

+ 1 - 2
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ContractTemplateTypeEnum.java

@@ -5,8 +5,7 @@ import com.yonge.toolset.base.enums.BaseEnum;
 
 public enum ContractTemplateTypeEnum implements BaseEnum<String, ContractTemplateTypeEnum> {
     REGISTER(ContractTemplateSourceEnum.PLATFORM, "注册"),
-    COURSES(ContractTemplateSourceEnum.PLATFORM, "课程购买"),
-    PRODUCT(ContractTemplateSourceEnum.PLATFORM, "产品"),
+    BUY_ORDER(ContractTemplateSourceEnum.PLATFORM, "平台购买商品"),
     WITHDRAW(ContractTemplateSourceEnum.LINGXINPAY, "用户结算");
 
     @EnumValue

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/OrderStatusConvert.java

@@ -41,7 +41,7 @@ public class OrderStatusConvert implements Converter<OrderStatusEnum> {
     @Override
     public CellData convertToExcelData(OrderStatusEnum statusEnum, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
         if(null != statusEnum){
-            return new CellData(statusEnum.getCode());
+            return new CellData(statusEnum.getMsg());
         }
         return new CellData("异常数据");
     }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/OrderTypeConvert.java

@@ -35,7 +35,7 @@ public class OrderTypeConvert implements Converter<OrderTypeEnum> {
     @Override
     public CellData convertToExcelData(OrderTypeEnum statusEnum, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
         if(null != statusEnum){
-            return new CellData(statusEnum.getCode());
+            return new CellData(statusEnum.getMsg());
         }
         return new CellData("异常数据");
     }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java

@@ -228,4 +228,7 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
 
     //查询已完成课时
     List<CourseCompleteVo> selectComplete();
+
+    //查琴房课列表
+    List<PianoClassVo> queryPianoClass(IPage page,@Param("param") MyCourseSearch search);
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserWithdrawalDao.java

@@ -39,7 +39,7 @@ public interface UserWithdrawalDao extends BaseMapper<UserWithdrawal> {
      * @updateTime 2022/4/15 18:05
      * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo>
      */
-    List<UserWithdrawalVo> selectList(@Param("param") TeacherWithdrawalSearch teacherWithdrawal);
+    List<UserWithdrawalVo> selectAllList(@Param("param") TeacherWithdrawalSearch teacherWithdrawal);
 
     /**
      * 查询用户今天发起的结算次数

+ 28 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseScheduleReplied.java

@@ -69,6 +69,18 @@ public class CourseScheduleReplied implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
+    @ApiModelProperty("学生评价时间 ")
+    @TableField(value = "student_replied_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date studentRepliedTime;
+
+    @ApiModelProperty("老师评价时间 ")
+    @TableField(value = "teacher_replied_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date teacherRepliedTime;
+
     public Long getId() {
         return id;
     }
@@ -148,4 +160,20 @@ public class CourseScheduleReplied implements Serializable {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
+
+    public Date getStudentRepliedTime() {
+        return studentRepliedTime;
+    }
+
+    public void setStudentRepliedTime(Date studentRepliedTime) {
+        this.studentRepliedTime = studentRepliedTime;
+    }
+
+    public Date getTeacherRepliedTime() {
+        return teacherRepliedTime;
+    }
+
+    public void setTeacherRepliedTime(Date teacherRepliedTime) {
+        this.teacherRepliedTime = teacherRepliedTime;
+    }
 }

+ 4 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/WithdrawSdk.java

@@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
@@ -250,7 +251,7 @@ public class WithdrawSdk {
      * 查询商户余额(单位为:分,范围:1~10000000000)
      * @return
      */
-    public String balanceQuery(){
+    public BigDecimal balanceQuery(){
         Map<String, Object> requestMap = new HashMap<>();
         requestMap.put("outMemberNo", memberNo);
         requestMap.put("charset", "UTF-8");
@@ -275,10 +276,10 @@ public class WithdrawSdk {
 
             String decryptStr = RSA.decryptPri(resultJsonStr, privateKey);
             Map stringToMap =  JSONObject.parseObject(decryptStr);
-            return String.valueOf(stringToMap.get("balance"));
+            return new BigDecimal(String.valueOf(stringToMap.get("balance"))).divide(new BigDecimal("100"));
         } catch (Exception e) {
             e.printStackTrace();
         }
-        return null;
+        return BigDecimal.ZERO;
     }
 }

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java

@@ -73,6 +73,14 @@ public interface CourseGroupService extends IService<CourseGroup> {
     void unlockCourseToCache(Long teacherId);
 
     /**
+     * 获取老师锁定课时数据的缓存-设置过期时间
+     *
+     * @param teacherId 老师id
+     * @return 缓存
+     */
+    RMap<Long, List<CourseTimeEntity>> getExpireLiveLockTimeCache(Long teacherId);
+
+    /**
      * 获取老师锁定的直播课时数据的缓存
      *
      * @param teacherId 老师id

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java

@@ -255,5 +255,7 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
     void updateCourseStudent(Map<String, Object> param);
 
     PageInfo<CourseScheduleRecordVo> selectCourseList(Map<String, Object> param);
+
+    IPage<PianoClassVo> queryPianoClass(IPage<PianoClassVo> page, MyCourseSearch search);
 }
 

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysUserContractRecordService.java

@@ -2,6 +2,7 @@ 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.dao.SysUserContractRecordDao;
 import com.yonge.cooleshow.biz.dal.dto.search.SysUserContractRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.SysUserContractRecord;
@@ -45,5 +46,7 @@ public interface SysUserContractRecordService extends IService<SysUserContractRe
      * @return
      */
     SysUserContractRecord queryLatestContract(Long userId, SysUserType userType, ContractTemplateTypeEnum contractType);
+
+    HttpResponseResult<Boolean> sign(ContractTemplateTypeEnum contractType, SysUserType userType, SysUser user);
 }
 

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

@@ -533,7 +533,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
      * @param teacherId 老师id
      * @return 缓存
      */
-    private RMap<Long, List<CourseTimeEntity>> getExpireLiveLockTimeCache(Long teacherId) {
+    public RMap<Long, List<CourseTimeEntity>> getExpireLiveLockTimeCache(Long teacherId) {
         String lockMinuteStr = sysConfigService.findConfigValue(SysConfigConstant.CREATE_LIVE_TIME_LOCK_MINUTE);
         long lockMinute = StringUtils.isBlank(lockMinuteStr) ? 15L : Long.parseLong(lockMinuteStr);
         RMap<Long, List<CourseTimeEntity>> cache = getLiveLockTimeCache(teacherId);
@@ -777,21 +777,6 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         log.info("buyLiveCourseSuccess ok");
         //课程购买成功后进行消息推送
         buyLiveSendMessage(studentPayment, courseGroup);
-
-        //创建群聊
-        try {
-            ImGroup imGroup = imGroupService.getDao().selectOne(Wrappers.<ImGroup>lambdaQuery().eq(ImGroup::getCourseGroupId, courseGroup.getId()));
-            if (imGroup == null) {//群组不存在->创建群组
-                imGroupService.autoCreate(courseGroup.getId(), CourseScheduleEnum.LIVE.getCode());
-            } else {//存在->加入当前学员
-                String imGroupId = imGroup.getId();
-                Set<Long> userIds = new HashSet<>(Collections.singletonList(studentPayment.getUserId()));
-                imGroupMemberService.initGroupMembers(imGroupId, userIds, ImGroupMemberRoleType.STUDENT);
-            }
-        } catch (Exception e) {
-            log.error("直播课程组id:{},创建群聊失败:{}", courseGroup.getId(), e);
-            e.printStackTrace();
-        }
     }
 
     /**
@@ -1050,8 +1035,14 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
                 if (courseGroup.getPreStudentNum() >= courseGroup.getMixStudentNum()) {
                     //人数达标则修改课程组为进行中状态
                     courseGroup.setStatus(CourseGroupEnum.ING.getCode());
-                    //建立群组
+                    //创建群聊 并添加人员到群中
                     String imGroupId = imGroupService.autoCreate(courseGroup.getId(), courseGroup.getType());
+                    List<CourseScheduleStudentPayment> list = courseScheduleStudentPaymentService.list(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
+                            .eq(CourseScheduleStudentPayment::getCourseGroupId, courseGroup.getId()));
+                    Set<Long> userIds = list.stream().map(CourseScheduleStudentPayment::getUserId).collect(Collectors.toSet());
+                    imGroupMemberService.initGroupMembers(imGroupId, userIds, ImGroupMemberRoleType.STUDENT);
+                    //添加老师进群
+                    imGroupMemberService.initGroupMembers(imGroupId, Collections.singleton(courseGroup.getTeacherId()), ImGroupMemberRoleType.TEACHER);
                     courseGroup.setImGroupId(imGroupId);
                 } else {
                     //人数未达标则修改课程组为取消状态

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

@@ -946,6 +946,20 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         if (multiply.compareTo(scheduleDto.getCoursePrice()) != 0) {
             throw new BizException("价格异常。预计价格:{},实际价格:{}", multiply, scheduleDto.getCoursePrice());
         }
+
+        //获取老师锁课缓存
+        RMap<Long, List<CourseTimeEntity>> map = courseGroupService.getExpireLiveLockTimeCache(scheduleDto.getTeacherId());
+        if (map.isExists()) {
+            List<CourseTimeEntity> courseTimeCache = map.get(scheduleDto.getTeacherId());
+            //校验缓存中的时间和当前自动生成的时间有没有重复
+            dateList.forEach(item ->
+            {
+                if (!checkCourseTime(courseTimeCache, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime, item.getStartTime(), item.getEndTime())) {
+                    throw new BizException("与缓存中时间存在中途");
+                }
+            });
+        }
+
         //批量检查老师课时在数据库是否重复
         batchCheckTeacherCourseTime(scheduleDto.getTeacherId(), dateList, CourseScheduleDate::getStartTime, CourseScheduleDate::getEndTime);
         //批量检查学生课时在数据库是否重复
@@ -2160,4 +2174,10 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         //重新新增学员
         paymentDao.insertBatch(payments);
     }
+
+    @Override
+    public IPage<PianoClassVo> queryPianoClass(IPage<PianoClassVo> page, MyCourseSearch search) {
+        monthToDate(search);
+        return page.setRecords(baseMapper.queryPianoClass(page, search));
+    }
 }

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

@@ -121,7 +121,6 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
      * 主讲人查询并校验房间信息
      *
      * @param roomUid 房间uid
-     * @param userId  主讲人id
      * @return
      */
     @Override

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

@@ -2,16 +2,24 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.SysUserContractRecordDao;
 import com.yonge.cooleshow.biz.dal.dto.search.SysUserContractRecordSearch;
+import com.yonge.cooleshow.biz.dal.entity.ContractTemplate;
 import com.yonge.cooleshow.biz.dal.entity.SysUserContractRecord;
+import com.yonge.cooleshow.biz.dal.enums.DealStatusEnum;
+import com.yonge.cooleshow.biz.dal.sdk.WithdrawSdk;
+import com.yonge.cooleshow.biz.dal.service.ContractService;
 import com.yonge.cooleshow.biz.dal.service.ContractTemplateService;
 import com.yonge.cooleshow.biz.dal.service.SysUserContractRecordService;
 import com.yonge.cooleshow.biz.dal.vo.SysUserContractRecordVo;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.ContractTemplateSourceEnum;
 import com.yonge.cooleshow.common.enums.ContractTemplateTypeEnum;
 import com.yonge.cooleshow.common.enums.SysUserType;
+import com.yonge.cooleshow.common.service.IdGeneratorService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 
 import org.slf4j.Logger;
@@ -30,6 +38,12 @@ public class SysUserContractRecordServiceImpl extends ServiceImpl<SysUserContrac
 
     @Autowired
     private ContractTemplateService contractTemplateService;
+    @Autowired
+    private WithdrawSdk withdrawSdk;
+    @Autowired
+    private IdGeneratorService idGeneratorService;
+    @Autowired
+    private ContractService contractService;
 
     @Override
     public SysUserContractRecordDao getDao() {
@@ -56,5 +70,44 @@ public class SysUserContractRecordServiceImpl extends ServiceImpl<SysUserContrac
         return getDao().queryLatestContract(userId, userType.getCode(), contractType.getSource().getCode(), contractType.getCode());
     }
 
+    @Override
+    public HttpResponseResult<Boolean> sign(ContractTemplateTypeEnum contractType, SysUserType userType, SysUser user) {
+        //是否签署标识,签署了才入库
+        boolean flag = false;
+        SysUserContractRecord contractRecord = queryLatestContract(user.getId(), userType, contractType);
+
+        //未签署协议
+        if (null == contractRecord) {
+            ContractTemplate contractTemplate = contractTemplateService.queryLatestContractTemplate(contractType);
+            if (null == contractTemplate) {
+                return HttpResponseResult.failed(HttpStatus.FORBIDDEN, "未找到协议");
+            }
+            contractRecord = new SysUserContractRecord();
+            Long contractNo = idGeneratorService.generatorId("contractNo");
+            contractRecord.setContractNo(contractNo.toString());
+            contractRecord.setUserId(user.getId());
+            contractRecord.setContractId(contractTemplate.getId());
+            contractRecord.setUserType(userType.getCode());
+
+            if (ContractTemplateSourceEnum.LINGXINPAY.getCode().equals(contractTemplate.getSource())
+                    && ContractTemplateTypeEnum.WITHDRAW.getCode().equals(contractTemplate.getType())) {
+                //签署结算协议
+                contractRecord.setStatus(DealStatusEnum.DOING.getCode());
+                flag = withdrawSdk.signContract(user.getRealName(), user.getIdCardNo(), user.getPhone(), contractNo.toString());
+            } else {
+                HttpResponseResult<String> stringHttpResponseResult = contractService.transferProduceContract(contractRecord.getUserId(), userType, contractType);
+                if (stringHttpResponseResult.getStatus()) {
+                    contractRecord.setUrl(stringHttpResponseResult.getData());
+                    contractRecord.setStatus(DealStatusEnum.SUCCESS.getCode());
+                    flag = true;
+                }
+            }
+            if (flag) {
+                save(contractRecord);
+            }
+        }
+        return HttpResponseResult.succeed(true);
+    }
+
 }
 

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

@@ -3,13 +3,19 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.service.SysUserContractRecordService;
+import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.ContractTemplateTypeEnum;
+import com.yonge.cooleshow.common.enums.SysUserType;
 import com.yonge.cooleshow.common.service.IdGeneratorService;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.result.BaseResult;
@@ -30,9 +36,11 @@ import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
 import com.yonge.cooleshow.biz.dal.dao.UserOrderPaymentDao;
 import com.yonge.cooleshow.biz.dal.service.UserOrderPaymentService;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
 
 
 @Service
@@ -47,6 +55,13 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
     private PaymentProperties paymentProperties;
     @Autowired
     private PaymentClient paymentClient;
+    /**
+     * 服务对象
+     */
+    @Resource
+    private SysUserContractRecordService sysUserContractRecordService;
+    @Autowired
+    private SysUserService userService;
 
     @Override
     public UserOrderPayment detailByOrderNo(String orderNo, PayChannelEnum payChannel, TradeStatusEnum status) {
@@ -263,8 +278,21 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
                 || detail.getStatus().equals(OrderStatusEnum.PAYING)) {
             userOrderService.orderSuccess(detail, data);
         }
+
+        //处理支付完成签署协议
+        SysUserType userType = SysUserType.STUDENT;
+        if (ClientEnum.TEACHER.getCode().equals(orderPayment.getPaymentClient())) {
+            userType = SysUserType.TEACHER;
+        }
+        Boolean aBoolean = sysUserContractRecordService.checkContractSign(detail.getUserId(), userType, ContractTemplateTypeEnum.BUY_ORDER);
+        if (!aBoolean) {
+            SysUser userById = userService.findUserById(detail.getUserId());
+            SysUserType finalUserType = userType;
+            CompletableFuture.runAsync(() -> sysUserContractRecordService.sign(ContractTemplateTypeEnum.BUY_ORDER, finalUserType, userById));
+        }
     }
 
+
     /***
      * 处理回调-支付失败
      * @author liweifan

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

@@ -98,7 +98,7 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
 
     @Override
     public List<UserWithdrawalVo> selectList(TeacherWithdrawalSearch query) {
-        return baseMapper.selectList(query);
+        return baseMapper.selectAllList(query);
     }
 
     @Override
@@ -196,19 +196,24 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult<Boolean> batchAuth(AuthOperaReq authOperaReq, SysUser sysUser) {
-        Long[] ids = StringUtil.toLongArray(StringPool.COMMA, authOperaReq.getId());
-        //todo 先判断三方余额是否充足,不足直接抛异常
+        List<Long> ids = Arrays.asList(StringUtil.toLongArray(StringPool.COMMA, authOperaReq.getId()));
+
+        //先判断三方余额是否充足
         List<UserWithdrawal> userWithdrawals = baseMapper.selectList(Wrappers.<UserWithdrawal>lambdaQuery()
                 .in(UserWithdrawal::getId, ids)
                 .ne(UserWithdrawal::getAuthStatus, AuthStatusEnum.DOING));
         //总提现金额
         BigDecimal totalAmount = BigDecimal.ZERO;
         for (UserWithdrawal withdrawal : userWithdrawals) {
-            if(null != withdrawal.getActualAmount()
-                    && BigDecimal.ZERO.compareTo(withdrawal.getActualAmount())<=0){
+            if (null != withdrawal.getActualAmount()
+                    && BigDecimal.ZERO.compareTo(withdrawal.getActualAmount()) <= 0) {
                 totalAmount = totalAmount.add(withdrawal.getActualAmount());
             }
         }
+        BigDecimal useDecimal = withdrawSdk.balanceQuery();
+        if (useDecimal.compareTo(totalAmount) < 0) {
+            return HttpResponseResult.failed("账户余额不足");
+        }
 
         for (Long id : ids) {
             AuthOperaReq param = new AuthOperaReq();
@@ -255,14 +260,11 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
                 build.setTradeStatus(TradeStatusEnum.pending);
                 build.setTransNo(transNo.toString());
             } else {
+                build.setAuthStatus(AuthStatusEnum.DOING);
                 build.setTradeStatus(TradeStatusEnum.failed);
-                build.setErrorMsg("请求三方接口返回失败");
+                build.setErrorMsg("请求三方接口同步返回失败");
             }
-        }
-        updateById(build);
-
-        //修改系统中账户
-        if (!authOperaReq.getPass()) {
+        } else {
             //审核不通过,账户解冻
             UserAccountRecordDto accountRecordDto = new UserAccountRecordDto(
                     build.getUserId(), build.getAmount(), InOrOutEnum.OUT, AccountBizTypeEnum.WITHDRAWAL,
@@ -272,10 +274,10 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
             accountRecordDto.setSaveRecord(false);
             userAccountService.accountChange(accountRecordDto);
 
-            //发生结算成功通知
+            //发生审核未通过通知
             unpassSend(build.getUserId(), build.getPhone(), authOperaReq.getReason());
         }
-
+        updateById(build);
     }
 
     @Override

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

@@ -37,6 +37,12 @@ public class LiveCourseInfoVo extends CourseGroupVo implements Serializable {
         @ApiModelProperty(value = "教学计划/最多200字")
         private String plan;
 
+        @ApiModelProperty(value = "房间uid")
+        private String roomUid;
+
+        @ApiModelProperty(value = "直播状态 0未开始 1已开始 2已结束")
+        private Integer liveState;
+
         public Long getId() {
             return planId;
         }
@@ -76,6 +82,22 @@ public class LiveCourseInfoVo extends CourseGroupVo implements Serializable {
         public void setPlan(String plan) {
             this.plan = plan;
         }
+
+        public String getRoomUid() {
+            return roomUid;
+        }
+
+        public void setRoomUid(String roomUid) {
+            this.roomUid = roomUid;
+        }
+
+        public Integer getLiveState() {
+            return liveState;
+        }
+
+        public void setLiveState(Integer liveState) {
+            this.liveState = liveState;
+        }
     }
 
     @ApiModel(value = "CourseBuyStudentVo", description = "学员列表")

+ 174 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/PianoClassVo.java

@@ -0,0 +1,174 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @Author: cy
+ * @Date: 2022/6/27
+ */
+@ApiModel
+public class PianoClassVo extends BaseEntity {
+    @ApiModelProperty("课程id")
+    private Long courseId;
+
+    @ApiModelProperty("课程组id")
+    private Long courseGroupId;
+
+    @ApiModelProperty("课程组名称")
+    private String courseGroupName;
+
+    @ApiModelProperty("声部id")
+    private Long subjectId;
+
+    @ApiModelProperty("声部名称")
+    private String subjectName;
+
+    @ApiModelProperty("老师id")
+    private Long teacherId;
+
+    @ApiModelProperty("老师姓名")
+    private String teacherName;
+
+    @ApiModelProperty("老师真实姓名")
+    private String teacherRealName;
+
+    @ApiModelProperty("老师头像")
+    private String avatar;
+
+    @ApiModelProperty("课程状态 NOT_START未开始 ING进行中 COMPLETE已完成")
+    private String status;
+
+    @ApiModelProperty("群聊id")
+    private String imGroupId;
+
+    @ApiModelProperty("开始时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty("结束时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+
+    @ApiModelProperty("学生考勤 0:异常 1:正常")
+    private Integer studentSign;
+
+    public String getImGroupId() {
+        return imGroupId;
+    }
+
+    public void setImGroupId(String imGroupId) {
+        this.imGroupId = imGroupId;
+    }
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public Long getCourseGroupId() {
+        return courseGroupId;
+    }
+
+    public void setCourseGroupId(Long courseGroupId) {
+        this.courseGroupId = courseGroupId;
+    }
+
+    public String getCourseGroupName() {
+        return courseGroupName;
+    }
+
+    public void setCourseGroupName(String courseGroupName) {
+        this.courseGroupName = courseGroupName;
+    }
+
+    public Long getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Long subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getTeacherRealName() {
+        return teacherRealName;
+    }
+
+    public void setTeacherRealName(String teacherRealName) {
+        this.teacherRealName = teacherRealName;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public Integer getStudentSign() {
+        return studentSign;
+    }
+
+    public void setStudentSign(Integer studentSign) {
+        this.studentSign = studentSign;
+    }
+}

+ 4 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/CoursePlanMapper.xml

@@ -30,10 +30,13 @@
                a.class_num_,
                b.id_ as courseId,
                b.start_time_,
-               b.end_time_
+               b.end_time_,
+               c.room_uid_ as roomUid,
+               IFNULL(c.live_state_,0) as liveState
         from course_plan as a
                  left join course_schedule as b on a.course_group_id_ = b.course_group_id_
                  AND a.class_num_ = b.class_num_
+                 left join live_room as c on b.id_ = c.course_id_
         where a.course_group_id_ = #{groupId}
         order by b.start_time_
     </select>

+ 36 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -838,4 +838,40 @@
             #{item}
         </foreach>
     </update>
+    <select id="queryPianoClass" resultType="com.yonge.cooleshow.biz.dal.vo.PianoClassVo">
+        SELECT DISTINCT
+            s.id_ AS courseId,
+            g.id_ AS courseGroupId,
+            CONCAT(g.name_,'-第',s.class_num_,'课') AS courseGroupName,
+            b.id_ AS subjectId,
+            b.name_ AS subjectName,
+            s.teacher_id_ AS teacherId,
+            u.username_ AS teacherName,
+            u.real_name_ AS teacherRealName,
+            u.avatar_ AS avatar,
+            s.status_ AS `status`,
+            i.id_ AS imGroupId,
+            s.start_time_ AS startTime,
+            s.end_time_ AS endTime,
+            CASE WHEN a.sign_in_time_ IS NOT NULL THEN 1 ELSE 0 END AS studentSign
+        FROM course_schedule s
+        LEFT JOIN sys_user u ON s.teacher_id_=u.id_
+        LEFT JOIN course_group g ON s.course_group_id_=g.id_
+        LEFT JOIN `subject` b ON g.subject_id_=b.id_
+        LEFT JOIN course_schedule_student_payment p ON s.id_=p.course_id_
+        LEFT JOIN student_attendance a ON s.id_=a.course_group_id_
+        LEFT JOIN im_group i ON s.course_group_id_=i.course_group_id_
+        WHERE s.type_='PIANO_ROOM_CLASS'
+        AND p.user_id_=#{param.studentId}
+        <if test="param.status !=null and param.status !=''">
+            AND s.status_ = #{param.status}
+        </if>
+        <if test="param.subjectId !=null">
+            AND b.id_ = #{param.subjectId}
+        </if>
+        <if test="param.classMonth !=null">
+            <![CDATA[ AND s.class_date_ >= #{param.startDate} ]]>
+            <![CDATA[ AND s.class_date_ <= #{param.endDate} ]]>
+        </if>
+    </select>
 </mapper>

+ 2 - 3
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserBindingTeacherMapper.xml

@@ -9,8 +9,7 @@
             su.avatar_ AS avatar,
             su.phone_ AS phone,
             (SELECT group_concat(name_) FROM `subject` WHERE find_in_set(id_,s.subject_id_)) AS subjectName,
-    --         IFNULL(TIMESTAMPDIFF(DAY,b.last_end_class_,NOW()),TIMESTAMPDIFF(DAY,b.created_time_,NOW())) AS lastEndClass
-            TIMESTAMPDIFF(DAY,b.last_end_class_,NOW()) AS lastEndClass
+            DATEDIFF(NOW(),b.last_end_class_) AS lastEndClass
         FROM user_binding_teacher b
         LEFT JOIN sys_user su ON b.student_id_=su.id_
         LEFT JOIN student s ON b.student_id_=s.user_id_
@@ -95,6 +94,6 @@
               AND a.type_ = 'PIANO_ROOM_CLASS'
             GROUP BY a.teacher_id_,b.user_id_
         ) v on t.teacher_id_ = v.teacher_id_ and t.student_id_ = v.user_id_
-        where v.user_id_ is null and t.created_time_ >= DATE_SUB(NOW(),INTERVAL #{days} DAY)
+        where v.user_id_ is null and t.created_time_ &lt;= DATE_SUB(NOW(),INTERVAL #{days} DAY)
     </select>
 </mapper>

+ 6 - 3
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserWithdrawalMapper.xml

@@ -91,6 +91,9 @@
         left join sys_user u on t.user_id_ = u.id_
             left join sys_user au on t.auth_user_id_ = au.id_
         <where>
+            <if test="param.userId !=null">
+                AND t.user_id_ = #{param.userId}
+            </if>
             <if test="null != param.search and '' != param.search">
                 AND (
                     t.user_id_ LIKE CONCAT('%', #{param.search}, '%') or
@@ -120,10 +123,10 @@
                 AND t.trans_no_ LIKE CONCAT('%', #{transNo}, '%')
             </if>
             <if test="param.startTime !=null">
-                <![CDATA[AND t.auth_time_ >= #{param.startTime} ]]>
+                <![CDATA[AND t.create_time_ >= #{param.startTime} ]]>
             </if>
             <if test="param.endTime !=null">
-                <![CDATA[AND t.auth_time_ < #{param.endTime} ]]>
+                <![CDATA[AND t.create_time_ < #{param.endTime} ]]>
             </if>
         </where>
         order by t.create_time_ desc
@@ -133,7 +136,7 @@
         <include refid="selectSql"/>
     </select>
 
-    <select id="selectList" resultType="com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo">
+    <select id="selectAllList" resultType="com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo">
         <include refid="selectSql"/>
     </select>
 

+ 13 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseScheduleController.java

@@ -169,5 +169,18 @@ public class StudentCourseScheduleController extends BaseController {
     public HttpResponseResult<List<TeacherSubjectPrice>> getTeacherSubjectPrice(@NotNull Long teacherId) {
         return succeed(courseScheduleService.teacherSubjectPrice(teacherId));
     }
+
+    @ApiOperation("学生端-我的课程-琴房课列表")
+    @PostMapping("/queryPianoClass")
+    public HttpResponseResult<PageInfo<PianoClassVo>> queryPianoClass(@RequestBody MyCourseSearch search) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        search.setStudentId(user.getId());
+        IPage<PianoClassVo> pages = courseScheduleService.queryPianoClass(PageUtil.getPage(search), search);
+        return succeed(PageUtil.pageInfo(pages));
+    }
 }
 

+ 3 - 47
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/SysUserContractRecordController.java

@@ -3,18 +3,13 @@ package com.yonge.cooleshow.student.controller;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.ContractTemplate;
-import com.yonge.cooleshow.biz.dal.entity.SysUserContractRecord;
-import com.yonge.cooleshow.biz.dal.enums.DealStatusEnum;
-import com.yonge.cooleshow.biz.dal.sdk.WithdrawSdk;
 import com.yonge.cooleshow.biz.dal.service.ContractService;
 import com.yonge.cooleshow.biz.dal.service.ContractTemplateService;
 import com.yonge.cooleshow.biz.dal.service.SysUserContractRecordService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.cooleshow.common.enums.ContractTemplateSourceEnum;
 import com.yonge.cooleshow.common.enums.ContractTemplateTypeEnum;
 import com.yonge.cooleshow.common.enums.SysUserType;
-import com.yonge.cooleshow.common.service.IdGeneratorService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -46,10 +41,7 @@ public class SysUserContractRecordController extends BaseController {
     private SysUserContractRecordService sysUserContractRecordService;
     @Autowired
     private ContractService contractService;
-    @Autowired
-    private WithdrawSdk withdrawSdk;
-    @Autowired
-    private IdGeneratorService idGeneratorService;
+
 
     @ApiOperation("判断用户是否签署协议")
     @GetMapping(value = "/checkContractSign", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@@ -75,42 +67,7 @@ public class SysUserContractRecordController extends BaseController {
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        //是否签署标识,签署了才入库
-        boolean flag = false;
-        SysUserContractRecord contractRecord = sysUserContractRecordService.queryLatestContract(user.getId(), SysUserType.STUDENT, contractType);
-
-        //未签署协议
-        if (null == contractRecord) {
-            ContractTemplate contractTemplate = contractTemplateService.queryLatestContractTemplate(contractType);
-            if (null == contractTemplate) {
-                return failed(HttpStatus.FORBIDDEN, "未找到协议");
-            }
-            contractRecord = new SysUserContractRecord();
-            Long contractNo = idGeneratorService.generatorId("contractNo");
-            contractRecord.setContractNo(contractNo.toString());
-            contractRecord.setUserId(user.getId());
-            contractRecord.setContractId(contractTemplate.getId());
-            //注意 老师端默认用户为student
-            contractRecord.setUserType(SysUserType.STUDENT.getCode());
-
-            if (ContractTemplateSourceEnum.LINGXINPAY.getCode().equals(contractTemplate.getSource())
-                    && ContractTemplateTypeEnum.WITHDRAW.getCode().equals(contractTemplate.getType())) {
-                //签署结算协议
-                contractRecord.setStatus(DealStatusEnum.DOING.getCode());
-                flag = withdrawSdk.signContract(user.getRealName(), user.getIdCardNo(), user.getPhone(), contractNo.toString());
-            } else {
-                HttpResponseResult<String> stringHttpResponseResult = contractService.transferProduceContract(contractRecord.getUserId(), SysUserType.STUDENT, contractType);
-                if (stringHttpResponseResult.getStatus()) {
-                    contractRecord.setUrl(stringHttpResponseResult.getData());
-                    contractRecord.setStatus(DealStatusEnum.SUCCESS.getCode());
-                    flag = true;
-                }
-            }
-            if (flag) {
-                sysUserContractRecordService.save(contractRecord);
-            }
-        }
-        return HttpResponseResult.succeed(true);
+        return sysUserContractRecordService.sign(contractType, SysUserType.STUDENT, user);
     }
 
     @ApiOperation("查看协议")
@@ -121,8 +78,7 @@ public class SysUserContractRecordController extends BaseController {
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return contractService.queryProductContract(user.getId(),SysUserType.STUDENT,contractType);
+        return contractService.queryProductContract(user.getId(), SysUserType.STUDENT, contractType);
     }
-
 }
 

+ 1 - 40
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SysUserContractRecordController.java

@@ -43,10 +43,6 @@ public class SysUserContractRecordController extends BaseController {
     private SysUserContractRecordService sysUserContractRecordService;
     @Autowired
     private ContractService contractService;
-    @Autowired
-    private WithdrawSdk withdrawSdk;
-    @Autowired
-    private IdGeneratorService idGeneratorService;
 
     @ApiOperation("判断用户是否签署协议")
     @GetMapping(value = "/checkContractSign", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@@ -83,42 +79,7 @@ public class SysUserContractRecordController extends BaseController {
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        //是否签署标识,签署了才入库
-        boolean flag = false;
-        SysUserContractRecord contractRecord = sysUserContractRecordService.queryLatestContract(user.getId(), SysUserType.TEACHER, contractType);
-
-        //未签署协议
-        if (null == contractRecord) {
-            ContractTemplate contractTemplate = contractTemplateService.queryLatestContractTemplate(contractType);
-            if (null == contractTemplate) {
-                return failed(HttpStatus.FORBIDDEN, "未找到协议");
-            }
-            contractRecord = new SysUserContractRecord();
-            Long contractNo = idGeneratorService.generatorId("contractNo");
-            contractRecord.setContractNo(contractNo.toString());
-            contractRecord.setUserId(user.getId());
-            contractRecord.setContractId(contractTemplate.getId());
-            //注意 老师端默认用户为teacher
-            contractRecord.setUserType(SysUserType.TEACHER.getCode());
-
-            if (ContractTemplateSourceEnum.LINGXINPAY.getCode().equals(contractTemplate.getSource())
-                    && ContractTemplateTypeEnum.WITHDRAW.getCode().equals(contractTemplate.getType())) {
-                //签署结算协议
-                contractRecord.setStatus(DealStatusEnum.DOING.getCode());
-                flag = withdrawSdk.signContract(user.getRealName(), user.getIdCardNo(), user.getPhone(), contractNo.toString());
-            } else {
-                HttpResponseResult<String> stringHttpResponseResult = contractService.transferProduceContract(contractRecord.getUserId(), SysUserType.TEACHER, contractType);
-                if (stringHttpResponseResult.getStatus()) {
-                    contractRecord.setUrl(stringHttpResponseResult.getData());
-                    contractRecord.setStatus(DealStatusEnum.SUCCESS.getCode());
-                    flag = true;
-                }
-            }
-            if (flag) {
-                sysUserContractRecordService.save(contractRecord);
-            }
-        }
-        return HttpResponseResult.succeed(true);
+        return sysUserContractRecordService.sign(contractType, SysUserType.TEACHER, user);
     }