瀏覽代碼

Merge branch 'feature/0721-tenant' of http://git.dayaedu.com/yonge/cooleshow into feature/0721-tenant

liujc 1 年之前
父節點
當前提交
9ec8725af6
共有 27 個文件被更改,包括 780 次插入49 次删除
  1. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroup.java
  2. 78 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/PaymentDivMemberRecord.java
  3. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ImGroupType.java
  4. 33 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/PaymentDivMemberRecordMapper.java
  5. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupService.java
  6. 52 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/PaymentDivMemberRecordService.java
  7. 4 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentService.java
  8. 2 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysMusicCompareRecordService.java
  9. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java
  10. 79 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentDivMemberRecordServiceImpl.java
  11. 38 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  12. 1 11
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMusicCompareRecordServiceImpl.java
  13. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  14. 154 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/PaymentDivMemberRecordWrapper.java
  15. 17 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/StudentWrapper.java
  16. 4 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/teacher/TeacherWrapper.java
  17. 85 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/PaymentDivMemberRecordMapper.xml
  18. 6 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml
  19. 1 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  20. 7 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupController.java
  21. 28 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/IndexController.java
  22. 76 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/PaymentDivMemberRecordController.java
  23. 3 2
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/StudentController.java
  24. 11 13
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TeacherController.java
  25. 3 1
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java
  26. 2 1
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumController.java
  27. 52 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenTeacherController.java

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroup.java

@@ -7,10 +7,15 @@ import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
 import com.yonge.toolset.base.enums.BaseEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 /**
  * 即时通讯群组(ImGroup)表实体类
@@ -18,6 +23,7 @@ import java.util.Date;
  * @author zx
  * @since 2022-03-22 10:45:57
  */
+@Data
 @ApiModel(value = "im_group-即时通讯群组")
 public class ImGroup implements Serializable {
     @TableId(value = "id_")
@@ -70,6 +76,9 @@ public class ImGroup implements Serializable {
     @ApiModelProperty(value = "课程组id")
     private Long courseGroupId;
 
+
+    private Set<Long> studentIdList = new HashSet<>();
+
     public Long getCourseGroupId() {
         return courseGroupId;
     }

+ 78 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/PaymentDivMemberRecord.java

@@ -0,0 +1,78 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import lombok.Data;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import java.math.BigDecimal;
+
+/**
+ * 分账子账户记录表
+ * 2023-07-28 15:45:03
+ */
+@Data
+@ApiModel(" PaymentDivMemberRecord-分账子账户记录表")
+@TableName("payment_div_member_record")
+public class PaymentDivMemberRecord implements Serializable {
+
+    @ApiModelProperty("主键") 
+	    @TableId(value = "id_")
+	    private Long id;
+
+    @ApiModelProperty("机构ID") 
+	@TableField(value = "tenant_id_")
+    private Long tenantId;
+
+    @ApiModelProperty("商户ID") 
+	@TableField(value = "app_id_")
+    private String appId;
+
+    @ApiModelProperty("分账用户ID") 
+	@TableField(value = "member_id_")
+    private String memberId;
+
+    @ApiModelProperty("订单编号") 
+	@TableField(value = "order_no_")
+    private String orderNo;
+
+    @ApiModelProperty("三方流水号") 
+	@TableField(value = "trans_no_")
+    private String transNo;
+
+    @ApiModelProperty("分账金额") 
+	@TableField(value = "amount_")
+    private BigDecimal amount;
+
+    @ApiModelProperty("机构到账标记") 
+	@TableField(value = "tenant_enter_flag_")
+    private Boolean tenantEnterFlag;
+
+    @ApiModelProperty("分账状态 ING,SUCCESS,REFUND,CLOSE") 
+	@TableField(value = "status_")
+    private String status;
+
+    @ApiModelProperty("手续费标识") 
+	@TableField(value = "fee_flag_")
+    private String feeFlag;
+
+    @ApiModelProperty("手续费") 
+	@TableField(value = "fee_amt_")
+    private BigDecimal feeAmt;
+
+    @ApiModelProperty("创建时间") 
+	@TableField(value = "create_time_")
+    private Date createTime;
+
+    @ApiModelProperty("更新时间") 
+	@TableField(value = "update_time_")
+    private Date updateTime;
+
+}

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ImGroupType.java

@@ -5,7 +5,8 @@ import com.yonge.toolset.base.enums.BaseEnum;
 
 public enum ImGroupType implements BaseEnum<String, ImGroupType> {
     FAN("粉丝群"),
-    COURSE("课程群");
+    COURSE("课程群"),
+    ORG("机构群");
     @EnumValue
     private String code;
     private String msg;

+ 33 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/PaymentDivMemberRecordMapper.java

@@ -0,0 +1,33 @@
+package com.yonge.cooleshow.biz.dal.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantPersonStatWrapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+import com.yonge.cooleshow.biz.dal.entity.PaymentDivMemberRecord;
+import com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper;
+
+/**
+ * 分账子账户记录表
+ * 2023-07-28 15:45:03
+ */
+@Repository
+public interface PaymentDivMemberRecordMapper extends BaseMapper<PaymentDivMemberRecord> {
+
+	/**
+	 * 分页查询
+	 * @param page IPage<PaymentDivMemberRecordWrapper.PaymentDivMemberRecord>
+	 * @param param PaymentDivMemberRecordWrapper.PaymentDivMemberRecordQuery
+	 * @return List<PaymentDivMemberRecordWrapper.PaymentDivMemberRecord>
+	 */
+	List<PaymentDivMemberRecord> selectPage(@Param("page") IPage<PaymentDivMemberRecord> page, @Param("param") PaymentDivMemberRecordWrapper.PaymentDivMemberRecordQuery param);
+
+    List<PaymentDivMemberRecordWrapper.IndexIncomeQueryDto> queryIncome(@Param("page") IPage<PaymentDivMemberRecordWrapper.IndexIncomeQueryDto> page,
+																		@Param("param") PaymentDivMemberRecordWrapper.IndexIncomeQuery param);
+
+	//小程序首页订单详情
+    PaymentDivMemberRecordWrapper.OrderDetailDto getOrderDetail(@Param("orderNo") String orderNo, @Param("tenantId") Long tenantId);
+}

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

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.biz.dal.entity.ImGroup;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * 即时通讯群组(ImGroup)表服务接口
@@ -85,5 +86,12 @@ public interface ImGroupService extends IService<ImGroup> {
      * @return ImGroup
      */
     ImGroup findGroupInfoById(String groupId, Long userId);
+
+    /**
+     * 添加群成员
+     * @param groupId 群id
+     * @param studentIdList 学生成员列表
+     */
+    void addGroupMember(String groupId, Set<Long> studentIdList) throws Exception;
 }
 

+ 52 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/PaymentDivMemberRecordService.java

@@ -0,0 +1,52 @@
+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.wrapper.PaymentDivMemberRecordWrapper;
+import com.yonge.cooleshow.biz.dal.entity.PaymentDivMemberRecord;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantPersonStatWrapper;
+
+import java.util.List;
+
+/**
+ * 分账子账户记录表
+ * 2023-07-28 15:45:03
+ */
+public interface PaymentDivMemberRecordService extends IService<PaymentDivMemberRecord>  {
+
+	/**
+     * 查询详情
+     * @param id 详情ID
+     * @return PaymentDivMemberRecord
+     */
+	PaymentDivMemberRecord detail(Long id);
+
+    /**
+     * 分页查询
+     * @param page IPage<PaymentDivMemberRecord>
+     * @param query PaymentDivMemberRecordWrapper.PaymentDivMemberRecordQuery
+     * @return IPage<PaymentDivMemberRecord>
+     */
+    IPage<PaymentDivMemberRecord> selectPage(IPage<PaymentDivMemberRecord> page, PaymentDivMemberRecordWrapper.PaymentDivMemberRecordQuery query);
+	
+    /**
+     * 添加
+     * @param paymentDivMemberRecord PaymentDivMemberRecordWrapper.PaymentDivMemberRecord
+     * @return Boolean
+     */
+     Boolean add(PaymentDivMemberRecordWrapper.PaymentDivMemberRecord paymentDivMemberRecord);   
+
+    /**
+     * 更新
+     * @param paymentDivMemberRecord PaymentDivMemberRecordWrapper.PaymentDivMemberRecord
+     * @return Boolean
+     */
+     Boolean update(PaymentDivMemberRecordWrapper.PaymentDivMemberRecord paymentDivMemberRecord);
+
+     //小程序首页收入明细
+    IPage<PaymentDivMemberRecordWrapper.IndexIncomeQueryDto> queryIncome(IPage<PaymentDivMemberRecordWrapper.IndexIncomeQueryDto> page,
+                                                                         PaymentDivMemberRecordWrapper.IndexIncomeQuery query);
+
+    //小程序首页订单详情
+    PaymentDivMemberRecordWrapper.OrderDetailDto getOrderDetail(String orderNo,Long tenantId);
+}

+ 4 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentService.java

@@ -117,7 +117,9 @@ public interface StudentService extends IService<Student> {
     /**
      * 导入学生
      * @param dataList 数据列表
-     * @param id 操作人
+     * @param tenantId 机构ID
+     * @param suerId 操作人
      */
-    void importStudentExcel(List<ExcelDataReaderProperty<StudentWrapper.StudentExport>> dataList, Long id);
+    void importStudentExcel(List<ExcelDataReaderProperty<StudentWrapper.StudentExport>> dataList,Long tenantId,
+                            Long suerId);
 }

+ 2 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysMusicCompareRecordService.java

@@ -1,14 +1,13 @@
 package com.yonge.cooleshow.biz.dal.service;
 
-import java.util.List;
-import java.util.Map;
-
 import com.yonge.cooleshow.biz.dal.dao.SysMusicCompareRecordDao;
 import com.yonge.cooleshow.biz.dal.entity.SysMusicCompareRecord;
 import com.yonge.cooleshow.biz.dal.queryInfo.SysMusicCompareRecordQueryInfo;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.service.BaseService;
 
+import java.util.Map;
+
 public interface SysMusicCompareRecordService extends BaseService<Long, SysMusicCompareRecord> {
 
     SysMusicCompareRecordDao getDao();

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

@@ -114,12 +114,36 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         this.baseMapper.insert(imGroup);
         //处理本地群成员列表
         List<GroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(), true, ImGroupMemberRoleType.TEACHER);
+
+        if (imGroup.getStudentIdList().isEmpty()) {
+            List<GroupMember> groupMemberList = imGroupMemberService.initGroupMembers(imGroupId,
+                    imGroup.getStudentIdList(), ImGroupMemberRoleType.STUDENT);
+            groupMembers.addAll(groupMemberList);
+        }
+
         //创建融云群
         this.rtcCreate(imGroup.getCreateBy(),imGroupId,imGroup.getName());
         //加入融云群
         imGroupMemberService.join(groupMembers,imGroupId);
     }
 
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void addGroupMember(String groupId, Set<Long> studentIdList) throws Exception {
+        ImGroup imGroup = this.baseMapper.selectById(groupId);
+        if (imGroup == null) {
+            throw new BizException("群不存在");
+        }
+        if (imGroup.getStudentIdList().isEmpty()) {
+            throw new BizException("添加的群成员不能为空");
+
+        }
+        List<GroupMember> groupMemberList = imGroupMemberService.initGroupMembers(groupId,
+                imGroup.getStudentIdList(), ImGroupMemberRoleType.STUDENT);
+        imGroupMemberService.join(groupMemberList, groupId);
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public String autoCreate(Long courseGroupId, String courseGroupType) throws Exception {

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

@@ -0,0 +1,79 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantPersonStatWrapper;
+import org.springframework.stereotype.Service;
+import org.springframework.beans.BeanUtils;
+import lombok.extern.slf4j.Slf4j;
+import com.yonge.cooleshow.biz.dal.entity.PaymentDivMemberRecord;
+import com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper;
+import com.yonge.cooleshow.biz.dal.mapper.PaymentDivMemberRecordMapper;
+import com.yonge.cooleshow.biz.dal.service.PaymentDivMemberRecordService;
+
+import java.util.List;
+
+/**
+ * 分账子账户记录表
+ * 2023-07-28 15:45:03
+ */
+@Slf4j
+@Service
+public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMemberRecordMapper, PaymentDivMemberRecord> implements PaymentDivMemberRecordService {
+
+	/**
+     * 查询详情
+     * @param id 详情ID
+     * @return PaymentDivMemberRecord
+     */
+	@Override
+    public PaymentDivMemberRecord detail(Long id) {
+        
+        return baseMapper.selectById(id);
+    }
+    
+    /**
+     * 分页查询
+     * @param page IPage<PaymentDivMemberRecord>
+     * @param query PaymentDivMemberRecordWrapper.PaymentDivMemberRecordQuery
+     * @return IPage<PaymentDivMemberRecord>
+     */
+    @Override
+    public IPage<PaymentDivMemberRecord> selectPage(IPage<PaymentDivMemberRecord> page, PaymentDivMemberRecordWrapper.PaymentDivMemberRecordQuery query) {
+        
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+	
+    /**
+     * 添加
+     * @param paymentDivMemberRecord PaymentDivMemberRecordWrapper.PaymentDivMemberRecord
+     * @return Boolean
+     */
+    @Override
+    public Boolean add(PaymentDivMemberRecordWrapper.PaymentDivMemberRecord paymentDivMemberRecord) {    	
+        
+        return this.save(JSON.parseObject(paymentDivMemberRecord.jsonString(), PaymentDivMemberRecord.class));
+    }
+
+    /**
+     * 更新
+     * @param paymentDivMemberRecord PaymentDivMemberRecordWrapper.PaymentDivMemberRecord
+     * @return Boolean
+     */
+    @Override
+    public Boolean update(PaymentDivMemberRecordWrapper.PaymentDivMemberRecord paymentDivMemberRecord){
+
+        return this.updateById(JSON.parseObject(paymentDivMemberRecord.jsonString(), PaymentDivMemberRecord.class));       
+    }
+
+    @Override
+    public IPage<PaymentDivMemberRecordWrapper.IndexIncomeQueryDto> queryIncome(IPage<PaymentDivMemberRecordWrapper.IndexIncomeQueryDto> page, PaymentDivMemberRecordWrapper.IndexIncomeQuery query) {
+        return page.setRecords(baseMapper.queryIncome(page, query));
+    }
+
+    @Override
+    public PaymentDivMemberRecordWrapper.OrderDetailDto getOrderDetail(String orderNo,Long tenantId) {
+        return baseMapper.getOrderDetail(orderNo,tenantId);
+    }
+}

+ 38 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java

@@ -55,7 +55,9 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.text.MessageFormat;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -362,7 +364,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
     @Transactional(rollbackFor = Exception.class)
     @Override
     public Boolean save(StudentWrapper.Student studentInfo) {
-        if (studentInfo.getId() != null) {
+        if (studentInfo.getId() == null) {
             return createStudent(studentInfo);
         } else {
             return updateStudent(studentInfo);
@@ -371,7 +373,8 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void importStudentExcel(List<ExcelDataReaderProperty<StudentWrapper.StudentExport>> dataList, Long id) {
+    public void importStudentExcel(List<ExcelDataReaderProperty<StudentWrapper.StudentExport>> dataList,
+                                   Long tenantId, Long userId) {
         if (dataList.isEmpty()) {
             throw new BizException("导入数据不能为空");
         }
@@ -384,12 +387,13 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
             Integer rowIndex = next.getRowIndex();
             StudentWrapper.StudentExport student = next.getClazz();
 
-            student.checkValid().forEach(err -> errMsg.add(String.format("第%s行%s", rowIndex, err)));
+            int msgRowNo = rowIndex + 1;
+            student.checkValid().forEach(err -> errMsg.add(String.format("第%s行%s", msgRowNo, err)));
 
             if (phoneMap.containsKey(student.getPhone().trim())) {
-                errMsg.add(String.format("第%s行手机号重复", rowIndex));
+                errMsg.add(String.format("第%s行手机号重复", msgRowNo));
             } else {
-                phoneMap.put(student.getPhone().trim(), rowIndex);
+                phoneMap.put(student.getPhone().trim(), msgRowNo);
             }
 
             if (errMsg.size() > 100) {
@@ -397,7 +401,11 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
             }
         }
 
-        int row = 100;
+        if (!errMsg.isEmpty()) {
+            throw new BizException(String.join(",", errMsg));
+        }
+
+        int row = 50;
         int page = 1;
         List<List<String>> phonePartition = Lists.partition(new ArrayList<>(phoneMap.keySet()), row);
 
@@ -411,13 +419,30 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
 
             if (!studentVos.isEmpty()) {
                 List<String> existPhoneList = studentVos.stream().map(StudentVo::getPhone).collect(Collectors.toList());
-                existPhoneList.forEach(phone -> errMsg.add(String.format("第%s行手机号已经注册学生", phoneMap.get(phone))));
+                existPhoneList.forEach(phone -> {
+                    if (phoneMap.containsKey(phone)) {
+                        errMsg.add(String.format("第%s行手机号已经注册学生", phoneMap.get(phone)));
+                    }
+                });
             }
         }
 
         if (!errMsg.isEmpty()) {
             throw new BizException(String.join(",", errMsg));
         }
+
+        for (ExcelDataReaderProperty<StudentWrapper.StudentExport> next : dataList) {
+            StudentWrapper.StudentExport studentExport = next.getClazz();
+            StudentWrapper.Student student = new StudentWrapper.Student();
+            student.setTenantId(tenantId);
+            student.setName(studentExport.getUserName());
+            student.setGender("1".equals(studentExport.getGender()) ? 1 : 0);
+            student.setSubjectId(studentExport.getSubjectId());
+
+            LocalDate birthday = LocalDate.parse(studentExport.getBirthday(), DateTimeFormatter.ISO_LOCAL_DATE);
+            student.setBirthdate(birthday);
+            save(student);
+        }
     }
 
     private Boolean updateStudent(StudentWrapper.Student studentInfo) {
@@ -426,14 +451,14 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
             throw new BizException("学生信息不存在");
         }
         // 解绑
-        if (!studentInfo.getBindTenant()) {
+        if (Boolean.FALSE.equals(studentInfo.getBindTenant())) {
             studentInfo.setTenantId(-1L);
             // 退群,删除好友
             imUserFriendService.delFriendByTenantId(student.getTenantId(), student.getUserId());
         }
         // 手机号码修改
+        com.yonge.cooleshow.biz.dal.entity.SysUser sysUser = getOrCreateAccount(studentInfo);
         if (!student.getPhone().equals(studentInfo.getPhone())) {
-            com.yonge.cooleshow.biz.dal.entity.SysUser sysUser = getOrCreateAccount(studentInfo);
             this.lambdaUpdate().set(Student::getSubjectId, studentInfo.getSubjectId())
                     .set(Student::getTenantId, studentInfo.getTenantId())
                     .set(Student::getUserId, sysUser.getId())
@@ -470,10 +495,12 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         com.yonge.cooleshow.biz.dal.entity.SysUser sysUser;
         if (!sysUsers.isEmpty()) {
             sysUser = sysUsers.get(0);
-            if (this.getBaseMapper().selectById(sysUser.getId()) != null) {
+            if (!sysUser.getId().equals(studentInfo.getId()) &&
+                    this.getBaseMapper().selectById(sysUser.getId()) != null) {
                 throw new BizException("手机号已经注册学生账号");
             }
             sysUser.setGender(studentInfo.getGender());
+            sysUser.setUsername(studentInfo.getName());
             sysUser.setBirthdate(studentInfo.getBirthdate());
             String userType = sysUser.getUserType();
             String studentUserType = "STUDENT";
@@ -491,6 +518,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
             sysUser.setGender(studentInfo.getGender());
             sysUser.setUserType("STUDENT");
             sysUser.setBirthdate(studentInfo.getBirthdate());
+            sysUser.setUsername(studentInfo.getName());
 
             String newPassword = MessageFormat.format("klxjg{0}", studentInfo.getPhone().substring(7));
             String password = new BCryptPasswordEncoder().encode(newPassword);

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

@@ -4,10 +4,8 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Lists;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.auth.api.entity.SysUserDevice;
 import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
 import com.yonge.cooleshow.biz.dal.dao.SysMusicCompareRecordDao;
-import com.yonge.cooleshow.biz.dal.dao.SysMusicCompareWeekDataDao;
 import com.yonge.cooleshow.biz.dal.dto.IndexBaseDto;
 import com.yonge.cooleshow.biz.dal.dto.IndexBaseMonthData;
 import com.yonge.cooleshow.biz.dal.dto.StudentTrainChartDto;
@@ -41,15 +39,7 @@ import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service

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

@@ -472,6 +472,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         teacher.setMusicianDate(null);
         teacher.setIsSettlement(teacherSubmitReq.getIsSettlement());
         teacher.setIsTestUser(teacherSubmitReq.getIsTestUser());
+        teacher.setSettlementFrom(teacherSubmitReq.getSettlementFrom());
         teacher.setTenantId(teacherSubmitReq.getTenantId() == null ? -1L : teacherSubmitReq.getTenantId());
         if (teacher.getTenantId() == -1L) {
             teacher.setSettlementFrom(ESettlementFrom.TEACHER);

+ 154 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/PaymentDivMemberRecordWrapper.java

@@ -0,0 +1,154 @@
+package com.yonge.cooleshow.biz.dal.wrapper;
+
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.common.enums.payment.EGoodsType;
+import com.yonge.cooleshow.common.enums.payment.EOrderType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Optional;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 分账子账户记录表
+ * 2023-07-28 15:45:03
+ */
+@ApiModel(value = "PaymentDivMemberRecordWrapper对象", description = "分账子账户记录表查询对象")
+public class PaymentDivMemberRecordWrapper {
+
+    @Data
+	@Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" PaymentDivMemberRecordQuery-分账子账户记录表")
+    public static class PaymentDivMemberRecordQuery implements QueryInfo {
+    
+    	@ApiModelProperty("当前页")
+        private Integer page;
+        
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+        
+        @ApiModelProperty("关键字匹配")
+		private String keyword;
+        
+        public String getKeyword() {
+            return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
+        }
+        
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static PaymentDivMemberRecordQuery from(String json) {
+            return JSON.parseObject(json, PaymentDivMemberRecordQuery.class);
+        }
+    }
+
+    @Data
+    @ApiModel("首页收入明细查询")
+    public static class IndexIncomeQuery implements QueryInfo {
+
+    	@ApiModelProperty("当前页")
+        private Integer page;
+
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+
+        @ApiModelProperty("关键字匹配")
+		private String keyword;
+
+        @ApiModelProperty("支付时间")
+		private String startTime;
+
+        @ApiModelProperty("支付时间")
+		private String endTime;
+
+        @ApiModelProperty("订单类型")
+        private EOrderType orderType;
+
+        @ApiModelProperty("排序字段")
+        private String sortField = "payTime";
+
+        @ApiModelProperty("排序方式")
+        private String sortType = "DESC";
+
+        private Long tenantId;
+
+        public String getKeyword() {
+            return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
+        }
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static PaymentDivMemberRecordQuery from(String json) {
+            return JSON.parseObject(json, PaymentDivMemberRecordQuery.class);
+        }
+    }
+
+    @Data
+    @ApiModel("首页收入明细查询")
+    public static class IndexIncomeQueryDto{
+
+        @ApiModelProperty("姓名")
+        private String name;
+
+        @ApiModelProperty("头像")
+        private String avatar;
+
+        @ApiModelProperty("电话号码")
+        private String phone;
+
+        @ApiModelProperty("金额")
+        private BigDecimal amount;
+
+        @ApiModelProperty("支付时间")
+        private String payTime;
+
+        @ApiModelProperty("订单编号")
+        private String orderNo;
+
+        @ApiModelProperty("订单类型")
+        private EOrderType orderType;
+    }
+
+    @Data
+    @ApiModel("首页订单详情")
+    public static class OrderDetailDto extends IndexIncomeQueryDto{
+
+        @ApiModelProperty("商品类型")
+        private EGoodsType goodsType;
+
+        @ApiModelProperty("商品图片")
+        private String goodsUrl;
+
+        @ApiModelProperty("商品名称")
+        private String goodsName;
+
+        @ApiModelProperty("商品数量")
+        private Integer goodsNum;
+    }
+
+	@ApiModel(" PaymentDivMemberRecord-分账子账户记录表")
+    public static class PaymentDivMemberRecord {
+        
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static PaymentDivMemberRecord from(String json) {
+            return JSON.parseObject(json, PaymentDivMemberRecord.class);
+        }
+	}
+
+}

+ 17 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/StudentWrapper.java

@@ -11,6 +11,7 @@ import lombok.NoArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 
 import java.io.Serializable;
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.List;
@@ -141,7 +142,7 @@ public class StudentWrapper {
         @ExcelProperty(value = "学生姓名")
         private String userName;
 
-        @ExcelProperty(value = "手机号")
+        @ExcelProperty(value = "手机号")
         private String phone;
 
         @ExcelProperty(value = "声部")
@@ -153,6 +154,11 @@ public class StudentWrapper {
         @ExcelProperty(value = "性别")
         private String gender;
 
+        private static final String PHONE_REG = "^(13\\d|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18\\d|19[0-35-9])" +
+                "\\d{8}$";
+
+        private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");
+
         public List<String> checkValid() {
             ArrayList<String> errMsg = new ArrayList<>();
             if (StringUtils.isEmpty(userName)) {
@@ -160,8 +166,7 @@ public class StudentWrapper {
             }
             if (StringUtils.isEmpty(phone)) {
                 errMsg.add("手机号为空");
-            }
-            if (Pattern.matches("^1[3-9]\\d{9}$", phone)) {
+            } else if (!Pattern.matches(PHONE_REG, phone)) {
                 errMsg.add("手机号格式错误");
             }
             if (StringUtils.isEmpty(subjectId)) {
@@ -169,6 +174,15 @@ public class StudentWrapper {
             }
             if (StringUtils.isEmpty(birthday)) {
                 errMsg.add("出生日期为空");
+            } else {
+                if (birthday.contains("/")) {
+                    birthday = birthday.replaceAll("/", "-");
+                }
+                try {
+                    SDF.parse(birthday);
+                } catch (Exception e) {
+                    errMsg.add("出生日期格式错误");
+                }
             }
             if (StringUtils.isEmpty(gender)) {
                 errMsg.add("性别为空");

+ 4 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/teacher/TeacherWrapper.java

@@ -10,6 +10,8 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Created by Eric.Shang on 2022/10/8.
@@ -88,8 +90,8 @@ public class TeacherWrapper {
     @ApiModel("老师设置结算方式模型")
     public static class TeacherSetSettlement {
 
-        @ApiModelProperty("老师ID")
-        private Long userId;
+        @ApiModelProperty("老师ID,批量用数组方式")
+        private List<Long> teacherIdList = new ArrayList<>();
 
         @ApiModelProperty("结算方式")
         private ESettlementFrom settlementFrom;

+ 85 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/PaymentDivMemberRecordMapper.xml

@@ -0,0 +1,85 @@
+<?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.mapper.PaymentDivMemberRecordMapper">
+
+    <!-- 表字段 -->
+    <sql id="baseColumns">
+         t.id_ AS id
+        , t.tenant_id_ AS tenantId
+        , t.app_id_ AS appId
+        , t.member_id_ AS memberId
+        , t.order_no_ AS orderNo
+        , t.trans_no_ AS transNo
+        , t.amount_ AS amount
+        , t.tenant_enter_flag_ AS tenantEnterFlag
+        , t.status_ AS status
+        , t.fee_flag_ AS feeFlag
+        , t.fee_amt_ AS feeAmt
+        , t.create_time_ AS createTime
+        , t.update_time_ AS updateTime
+        </sql> 
+    
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.entity.PaymentDivMemberRecord">
+		SELECT         
+        	<include refid="baseColumns" />
+		FROM payment_div_member_record t
+	</select>
+    <select id="queryIncome"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper$IndexIncomeQueryDto">
+        select
+            pdmr.order_no_ as orderNo,
+            sut.name_ as name,
+            su.avatar_ as avatar,
+            su.phone_ as phone,
+            pdmr.amount_ as amount,
+            uo.pay_time_ as payTime,
+            uo.order_type_ as orderType
+        from
+            payment_div_member_record pdmr
+                left join
+            user_order uo ON uo.order_no_ = pdmr.order_no_
+                left join
+            sys_user_tsign sut ON sut.user_id_ = pdmr.user_id_
+                left join
+            sys_user su ON su.id_ = sut.user_id_
+        where
+            pdmr.status_ = 'SUCCESS' AND pdmr.tenant_id_ = #{param.tenantId}
+          <if test="param.startTime != null and param.startTime != ''">
+              AND uo.pay_time_ BETWEEN #{param.startTime} AND #{param.endTime}
+          </if>
+          <if test="param.orderType != null">
+              AND uo.order_type_ = #{param.orderType}
+          </if>
+          <if test="param.keyword != null and param.keyword != ''">
+              and sut.name_ LIKE CONCAT('%',#{param.keyword},'%')
+          </if>
+           ORDER BY ${param.sortField} ${param.sortType}
+    </select>
+    <select id="getOrderDetail"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper$OrderDetailDto">
+        select
+            pdmr.order_no_ as orderNo,
+            sut.name_ as name,
+            su.avatar_ as avatar,
+            su.phone_ as phone,
+            pdmr.amount_ as amount,
+            uo.pay_time_ as payTime,
+            uo.order_type_ as orderType,
+            uod.good_name_ as goodsName,
+            uod.good_num_ as goodsNum,
+            uod.good_type_ as goodsType,
+            uod.good_url_ as goodsUrl
+        from
+            payment_div_member_record pdmr
+                left join
+            user_order uo ON uo.order_no_ = pdmr.order_no_
+                left join
+            sys_user_tsign sut ON sut.user_id_ = pdmr.user_id_
+                left join
+            sys_user su ON su.id_ = sut.user_id_
+                left join
+            user_order_detail uod ON uod.order_id_ = uo.id_
+            WHERE pdmr.order_no_ = #{orderNo} AND pdmr.tenant_id_ = #{tenantId} LIMIT 1
+    </select>
+
+</mapper>

+ 6 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -159,6 +159,12 @@
             <if test="param.tenantName != null and param.tenantName.trim() != ''">
                 and ti.name_ like concat('%',#{param.tenantName},'%')
             </if>
+            <if test="param.phoneList != null and param.phoneList.size() > 0">
+                and u.phone_ in
+                <foreach collection="param.phoneList" separator="," item="item"  open="(" close=")" >
+                    #{item}
+                </foreach>
+            </if>
         </where>
         <choose>
             <when test="param.orderBy != null and param.orderBy.trim() != ''">

+ 1 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -101,6 +101,7 @@
             u.real_name_ as realName,
             u.avatar_ as avatar,
             u.birthdate_ as birthdate,
+            u.gender_ as gender,
             (case when t.membership_end_time_ &gt;= now() then 1 else 0 end) isVip,
 <!--            t.tag_ tag,-->
             u.del_flag_ as delFlag,

+ 7 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupController.java

@@ -50,6 +50,13 @@ public class ImGroupController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation("添加群成员")
+    @PostMapping(value = "/addGroupMember")
+    public HttpResponseResult addGroupMember(@Valid @RequestBody ImGroup imGroup, BindingResult bindingResult) throws Exception {
+        imGroupService.addGroupMember(imGroup.getId(), imGroup.getStudentIdList());
+        return succeed();
+    }
+
     @ApiOperation("解散群聊")
     @PostMapping(value = "/dismiss/{groupId}")
     public HttpResponseResult dismiss(@ApiParam(value = "群编号", required = true) @PathVariable("groupId") String groupId) throws Exception {

+ 28 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/IndexController.java

@@ -1,14 +1,18 @@
 package com.yonge.cooleshow.tenant.controller;
 
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.queryInfo.SysMusicCompareRecordQueryInfo;
+import com.yonge.cooleshow.biz.dal.service.PaymentDivMemberRecordService;
 import com.yonge.cooleshow.biz.dal.service.SysMusicCompareRecordService;
 import com.yonge.cooleshow.biz.dal.service.TenantPersonStatService;
+import com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantPersonStatWrapper;
 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.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,6 +32,8 @@ public class IndexController extends BaseController {
     private SysMusicCompareRecordService sysMusicCompareRecordService;
     @Autowired
     private TenantPersonStatService tenantPersonStatService;
+    @Autowired
+    private PaymentDivMemberRecordService paymentDivMemberRecordService;
 
 
     @ApiOperation("学员训练数据统计列表")
@@ -70,4 +76,26 @@ public class IndexController extends BaseController {
         query.setTenantId(sysUser.getTenantId());
         return succeed(tenantPersonStatService.indexSum(query));
     }
+
+    @ApiOperation("收入明细列表")
+    @PostMapping("queryIncome")
+    public HttpResponseResult<PageInfo<PaymentDivMemberRecordWrapper.IndexIncomeQueryDto>>
+        queryIncome(@RequestBody PaymentDivMemberRecordWrapper.IndexIncomeQuery query){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("获取用户信息失败");
+        }
+        query.setTenantId(sysUser.getTenantId());
+        return succeed(PageUtil.pageInfo(paymentDivMemberRecordService.queryIncome(QueryInfo.getPage(query), query)));
+    }
+
+    @ApiOperation("订单详情")
+    @PostMapping("getOrderDetail")
+    public HttpResponseResult<PaymentDivMemberRecordWrapper.OrderDetailDto>getOrderDetail(String orderNo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("获取用户信息失败");
+        }
+        return succeed(paymentDivMemberRecordService.getOrderDetail(orderNo,sysUser.getTenantId()));
+    }
 }

+ 76 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/PaymentDivMemberRecordController.java

@@ -0,0 +1,76 @@
+package com.yonge.cooleshow.tenant.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.microsvc.toolkit.common.response.paging.PageInfo;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.microsvc.toolkit.common.response.template.R;
+import com.yonge.cooleshow.biz.dal.entity.PaymentDivMemberRecord;
+import com.yonge.cooleshow.biz.dal.service.PaymentDivMemberRecordService;
+import com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/paymentDivMemberRecord")
+@Api(tags = "分账子账户记录表")
+public class PaymentDivMemberRecordController {
+
+    @Autowired
+    private PaymentDivMemberRecordService paymentDivMemberRecordService;
+
+	@ApiOperation(value = "详情", notes = "分账子账户记录表-根据详情ID查询单条, 传入id")
+    @PreAuthorize("@auditsvc.hasPermissions('paymentDivMemberRecord/detail', {'BACKEND'})")
+    //@GetMapping("/detail/{id}")
+    public R<PaymentDivMemberRecord> detail(@PathVariable("id") Long id) {
+    
+    	PaymentDivMemberRecord wrapper = paymentDivMemberRecordService.detail(id);
+        
+        return R.from(wrapper);
+	}
+    
+    @ApiOperation(value = "查询分页", notes = "分账子账户记录表- 传入 PaymentDivMemberRecordWrapper.PaymentDivMemberRecordQuery") 
+    @PreAuthorize("@auditsvc.hasPermissions('paymentDivMemberRecord/page', {'BACKEND'})") 
+    @PostMapping("/page")
+    public R<PageInfo<PaymentDivMemberRecord>> page(@RequestBody PaymentDivMemberRecordWrapper.PaymentDivMemberRecordQuery query) {
+        
+        IPage<PaymentDivMemberRecord> pages = paymentDivMemberRecordService.selectPage(QueryInfo.getPage(query), query);
+        
+        return R.from(QueryInfo.pageInfo(pages));
+	}
+    
+    @ApiOperation(value = "新增", notes = "分账子账户记录表- 传入 PaymentDivMemberRecordWrapper.PaymentDivMemberRecord")
+    @PreAuthorize("@auditsvc.hasPermissions('paymentDivMemberRecord/save', {'BACKEND'})")
+	//@PostMapping("/save")
+	public R<JSONObject> add(@Validated @RequestBody PaymentDivMemberRecord paymentDivMemberRecord) {
+        
+        // 新增数据
+        paymentDivMemberRecordService.save(paymentDivMemberRecord);
+        
+        return R.defaultR();
+	}
+    
+    @ApiOperation(value = "修改", notes = "分账子账户记录表- 传入 PaymentDivMemberRecordWrapper.PaymentDivMemberRecord")
+    @PreAuthorize("@auditsvc.hasPermissions('paymentDivMemberRecord/update', {'BACKEND'})")
+	public R<JSONObject> update(@Validated @RequestBody PaymentDivMemberRecord paymentDivMemberRecord) {
+        
+        // 更新数据
+        paymentDivMemberRecordService.updateById(paymentDivMemberRecord);
+        
+        return R.defaultR();
+	}
+
+	@ApiOperation(value = "删除", notes = "分账子账户记录表- 传入id")
+    @PreAuthorize("@auditsvc.hasPermissions('paymentDivMemberRecord/remove', {'BACKEND'})")
+	public R<Boolean> remove(@RequestParam Long id) {
+    
+		return R.from(paymentDivMemberRecordService.removeById(id));
+	}
+}

+ 3 - 2
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/StudentController.java

@@ -16,6 +16,7 @@ import com.yonge.cooleshow.common.enums.BizHttpStatus;
 import com.yonge.cooleshow.common.enums.UserLockFlag;
 import com.yonge.cooleshow.common.enums.UserStatusEnum;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.toolset.utils.easyexcel.ErrMsg;
@@ -112,7 +113,7 @@ public class StudentController extends BaseController {
         try {
             ExcelDataReader<StudentWrapper.StudentExport> reader =
                     ExcelUtils.getReader(StudentWrapper.StudentExport.class, file);
-            studentService.importStudentExcel(reader.getDataList(), user.getId());
+            studentService.importStudentExcel(reader.getDataList(),user.getTenantId(), user.getId());
             return HttpResponseResult.succeed();
         } catch (ExcelException e) {
             return HttpResponseResult.failed(BizHttpStatus.IMPORT.getCode(), e.getErrMsgList(), BizHttpStatus.IMPORT.getMsg());
@@ -124,7 +125,7 @@ public class StudentController extends BaseController {
         TenantInfo tenantInfo = tenantInfoService.lambdaQuery().eq(TenantInfo::getUserId, sysUser.getId())
                 .last("limit 1").one();
         if (tenantInfo == null) {
-            throw new com.microsvc.toolkit.common.webportal.exception.BizException("非法请求");
+            throw new BizException("非法请求");
         }
         return tenantInfo;
     }

+ 11 - 13
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TeacherController.java

@@ -33,6 +33,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -45,7 +46,7 @@ public class TeacherController extends BaseController {
     @Autowired
     private TeacherService teacherService;
 
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
 
     @Autowired
@@ -119,30 +120,27 @@ public class TeacherController extends BaseController {
             if (teacher == null) {
                 throw new BizException("老师不存在");
             }
+        } else {
+            // 新增 默认机构为操作人的机构
+            teacherSubmitReq.setTenantId(tenantInfo.getId());
         }
-        teacherSubmitReq.setTenantId(tenantInfo.getId());
         return teacherService.submit(teacherSubmitReq);
     }
 
     @PostMapping("/setSettlement")
     @ApiOperation(value = "设置结算方式")
     public HttpResponseResult<Boolean> setSettlement(@Valid @RequestBody TeacherWrapper.TeacherSetSettlement setSettlement) {
-        TenantInfo tenantInfo = getTenantInfo();
-        teacherService.lambdaUpdate()
-                .set(Teacher::getSettlementFrom, setSettlement.getSettlementFrom())
-                .eq(Teacher::getTenantId, tenantInfo.getId())
-                .eq(Teacher::getUserId, setSettlement.getUserId()).update();
-        return succeed();
-    }
 
-    @PostMapping("/batchSetSettlement")
-    @ApiOperation(value = "批量设置结算方式")
-    public HttpResponseResult<Boolean> batchSetSettlement(@Valid @RequestBody TeacherWrapper.TeacherSetSettlement setSettlement) {
+        List<Long> teacherIdList = setSettlement.getTeacherIdList();
+        if (teacherIdList.isEmpty()) {
+            throw new BizException("未选择老师");
+        }
+
         TenantInfo tenantInfo = getTenantInfo();
         teacherService.lambdaUpdate()
                 .set(Teacher::getSettlementFrom, setSettlement.getSettlementFrom())
                 .eq(Teacher::getTenantId, tenantInfo.getId())
-                .update();
+                .in(Teacher::getUserId, setSettlement.getTeacherIdList()).update();
         return succeed();
     }
 

+ 3 - 1
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java

@@ -31,6 +31,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+
 
 @Slf4j
 @Validated
@@ -45,7 +47,7 @@ public class TenantActivationCodeController extends BaseController {
     @Autowired
     private TenantAlbumPurchaseService tenantAlbumPurchaseService;
 
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
 
     @Autowired

+ 2 - 1
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumController.java

@@ -31,6 +31,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.util.List;
 
 @Slf4j
@@ -43,7 +44,7 @@ public class TenantAlbumController extends BaseController {
     @Autowired
     private TenantAlbumService tenantAlbumService;
 
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
 
     @Autowired

+ 52 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenTeacherController.java

@@ -0,0 +1,52 @@
+package com.yonge.cooleshow.tenant.controller.open;
+
+import com.yonge.cooleshow.biz.dal.dto.req.TeacherSubmitReq;
+import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
+import com.yonge.cooleshow.biz.dal.service.TeacherService;
+import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.exception.BizException;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+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.validation.Valid;
+
+/**
+ * @author 袁亮
+ * @apiNote 二维码方式注册老师账号
+ */
+@RestController
+@RequestMapping("/open/teacher")
+@Api(value = "教师表", tags = "教师表")
+public class OpenTeacherController extends BaseController {
+
+    @Autowired
+    private TeacherService teacherService;
+
+    @Autowired
+    private TenantInfoService tenantInfoService;
+
+    /**
+     * 新增或修改
+     */
+    @PostMapping("/submit")
+    @ApiOperation(value = "新增", notes = "传入teacher")
+    public HttpResponseResult<Boolean> submit(@Valid @RequestBody TeacherSubmitReq teacherSubmitReq) {
+        Long tenantId = teacherSubmitReq.getTenantId();
+        if (tenantId == null) {
+            throw new BizException("未选择机构");
+        }
+        TenantInfo tenantInfo = tenantInfoService.getById(tenantId);
+        if (tenantInfo == null || Boolean.FALSE.equals(tenantInfo.getEnableFlag())) {
+            throw new BizException("机构不可用");
+        }
+        teacherSubmitReq.setUserId(null);
+        return teacherService.submit(teacherSubmitReq);
+    }
+}