Browse Source

管乐迷新需求

zouxuan 2 năm trước cách đây
mục cha
commit
52a2e105c4

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentOperatingVisitDao.java

@@ -16,6 +16,8 @@ public interface StudentOperatingVisitDao extends BaseDAO<Long, StudentOperating
     */
     void updateVisit(@Param("studentId") Integer studentId, @Param("month") String month);
 
+    void batchUpdateVisit(@Param("studentIds") List<Integer> studentIds, @Param("month") String month);
+
     void deleteByUserId(@Param("month") String month);
 
     void batchAdd(@Param("userIds") List<Integer> userIds, @Param("month") String month);

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentVisitDao.java

@@ -62,6 +62,15 @@ public interface StudentVisitDao extends BaseDAO<Integer, StudentVisit> {
     List<Integer> getMusicGroupVisitStudent(@Param("musicGroupId") String musicGroupId, @Param("studentIds") List<Integer> studentIds);
 
     /**
+     * 获取乐团回访的学生
+     *
+     * @param musicGroupId
+     * @param studentId
+     * @return
+     */
+    Integer getMusicVisitStudent(@Param("musicGroupId") String musicGroupId, @Param("studentId") Integer studentId);
+
+    /**
      * 获取老师时间段的回访次数
      *
      * @param teacherIds
@@ -92,4 +101,6 @@ public interface StudentVisitDao extends BaseDAO<Integer, StudentVisit> {
     int countWaitVisit(Map<String, Object> params);
 
     List<StudentPreVisitDto> queryWaitVisit(Map<String, Object> params);
+
+    void batchInsert(@Param("studentVisit") List<StudentVisit> studentVisit);
 }

+ 2 - 144
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentVisit.java

@@ -4,12 +4,14 @@ import com.ym.mec.biz.dal.enums.TeachModeEnum;
 import com.ym.mec.common.entity.BaseEntity;
 import com.ym.mec.common.enums.BaseEnum;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.PastOrPresent;
 import javax.validation.constraints.Positive;
 import java.util.Date;
 
+@Data
 public class StudentVisit extends BaseEntity {
 
     public enum VisiterTypeEnum implements BaseEnum<String, TeachModeEnum> {
@@ -201,148 +203,4 @@ public class StudentVisit extends BaseEntity {
 
     @ApiModelProperty(value = "回访图片", required = true)
     private String attachments;
-
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public String getMusicGroupId() {
-        return musicGroupId;
-    }
-
-    public void setMusicGroupId(String musicGroupId) {
-        this.musicGroupId = musicGroupId;
-    }
-
-    public Integer getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(Integer organId) {
-        this.organId = organId;
-    }
-
-    public Integer getStudentId() {
-        return studentId;
-    }
-
-    public void setStudentId(Integer studentId) {
-        this.studentId = studentId;
-    }
-
-    public Integer getTeacherId() {
-        return teacherId;
-    }
-
-    public void setTeacherId(Integer teacherId) {
-        this.teacherId = teacherId;
-    }
-
-    public VisiterTypeEnum getVisiterType() {
-        return visiterType;
-    }
-
-    public void setVisiterType(VisiterTypeEnum visiterType) {
-        this.visiterType = visiterType;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getPurpose() {
-        return purpose;
-    }
-
-    public void setPurpose(String purpose) {
-        this.purpose = purpose;
-    }
-
-    public String getOverview() {
-        return overview;
-    }
-
-    public void setOverview(String overview) {
-        this.overview = overview;
-    }
-
-    public FeedbackTypeEnum getFeedbackType() {
-        return feedbackType;
-    }
-
-    public void setFeedbackType(FeedbackTypeEnum feedbackType) {
-        this.feedbackType = feedbackType;
-    }
-
-    public FeedbackTypeDescEnum getFeedbackTypeDesc() {
-        return feedbackTypeDesc;
-    }
-
-    public void setFeedbackTypeDesc(FeedbackTypeDescEnum feedbackTypeDesc) {
-        this.feedbackTypeDesc = feedbackTypeDesc;
-    }
-
-    public String getFeedback() {
-        return feedback;
-    }
-
-    public void setFeedback(String feedback) {
-        this.feedback = feedback;
-    }
-
-    public Date getVisitTime() {
-        return visitTime;
-    }
-
-    public void setVisitTime(Date visitTime) {
-        this.visitTime = visitTime;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public Long getObjectId() {
-        return objectId;
-    }
-
-    public void setObjectId(Long objectId) {
-        this.objectId = objectId;
-    }
-
-    public Integer getProbStatus() {
-        return probStatus;
-    }
-
-    public void setProbStatus(Integer probStatus) {
-        this.probStatus = probStatus;
-    }
-
-    public String getVisitCyCle() {
-        return visitCyCle;
-    }
-
-    public void setVisitCyCle(String visitCyCle) {
-        this.visitCyCle = visitCyCle;
-    }
-
-    public String getAttachments() {
-        return attachments;
-    }
-
-    public void setAttachments(String attachments) {
-        this.attachments = attachments;
-    }
 }

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/TemplateTypeEnum.java

@@ -14,6 +14,7 @@ public enum TemplateTypeEnum implements BaseEnum<String, TemplateTypeEnum> {
     LIVE_ROOM_PURVIEW_USER("LIVE_ROOM_PURVIEW_USER", "直播间用户观看权限表"),
     ADDITIONAL_IMPORT("ADDITIONAL_IMPORT", "经营报表额外的收支导入"),
     MUSIC_GROUP_PAYMENT_IMPORT("MUSIC_GROUP_PAYMENT_IMPORT", "缴费项目外部订单导入"),
+    PAYMENT_MUSIC_VISIT_IMPORT("PAYMENT_MUSIC_VISIT_IMPORT", "缴费中乐团批量回访"),
     ;
 
     private String code;

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentVisitService.java

@@ -10,6 +10,8 @@ import com.ym.mec.biz.dal.page.StudentPreVisitQueryInfo;
 import com.ym.mec.biz.dal.page.StudentVisitQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
+import org.springframework.web.multipart.MultipartFile;
+
 import java.util.List;
 
 public interface StudentVisitService extends BaseService<Integer, StudentVisit> {
@@ -21,6 +23,13 @@ public interface StudentVisitService extends BaseService<Integer, StudentVisit>
      * @return
      */
     StudentVisit addVisit(StudentVisit studentVisit);
+
+    /**
+     * 添加访问记录
+     * @param studentVisit
+     * @return
+     */
+    void batchAddVisit(List<StudentVisit> studentVisit);
     /**
      * 获取访问详情
      *
@@ -68,4 +77,13 @@ public interface StudentVisitService extends BaseService<Integer, StudentVisit>
     PageInfo<BasicUserDto> getStudents(StudentVisitQueryInfo queryInfo);
 
     PageInfo<StudentPreVisitDto> queryWaitVisit(StudentPreVisitQueryInfo queryInfo);
+
+    /**
+    * @description: 缴费中乐团批量导入学员回访
+     * @param file
+    * @return java.util.List<java.lang.String>
+    * @author zx
+    * @date 2023/6/13 14:34
+    */
+    List<String> importMusicVisit(MultipartFile file) throws Exception;
 }

+ 31 - 123
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.beust.jcommander.internal.Lists;
 import com.microsvc.toolkit.middleware.im.message.ImGroupMemberWrapper;
-import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
@@ -39,7 +38,6 @@ import com.ym.mec.util.excel.POIUtil;
 import com.ym.mec.util.http.HttpUtil;
 import com.ym.mec.util.ini.IniFileUtil;
 import com.ym.mec.util.json.JsonUtil;
-import com.ym.mec.util.string.MessageFormatter;
 import com.ym.mec.util.validator.CommonValidator;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -150,7 +148,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Autowired
     private PayService payService;
     @Autowired
-    private SysUserFeignService sysUserFeignService;
+    private SysUserService sysUserService;
     @Autowired
     private SysMessageService sysMessageService;
     @Autowired
@@ -636,10 +634,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 	@Override
     @Transactional(rollbackFor = Exception.class)
     public String createGroup(SubFeeSettingDto subFeeSettingDto) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null || sysUser.getId() == null) {
-            throw new BizException("获取用户信息失败");
-        }
+        SysUser sysUser = sysUserService.getUser();
         MusicGroup musicGroup = subFeeSettingDto.getMusicGroup();
         if (StringUtils.isBlank(musicGroup.getGradeType()) && StringUtils.isNotBlank(subFeeSettingDto.getGradeType())) {
             musicGroup.setGradeType(subFeeSettingDto.getGradeType());
@@ -807,11 +802,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean finishPreApply(String musicGroupId, boolean isCheckStudentNum) {
-
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null || sysUser.getId() == null) {
-            throw new BizException("请重新登录");
-        }
+		SysUser sysUser = sysUserService.getUser();
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup == null) {
             throw new BizException("乐团信息查询失败");
@@ -1454,7 +1445,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         if ("205".equals(studentPaymentOrder.getPaymentAccountNo())) {
             Integer teacherId = musicGroup.getEducationalTeacherId();
-            SysUser endTeacher = sysUserFeignService.queryUserById(teacherId);
+            SysUser endTeacher = sysUserService.queryUserById(teacherId);
             Map<Integer, String> userPhoneMap = new HashMap<>();
             userPhoneMap.put(endTeacher.getId(), endTeacher.getPhone());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.NO_BUY_CLOUD_TEACHER_MSG,
@@ -1509,10 +1500,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateSubjectInfo(SubFeeSettingDto subFeeSettingDto) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("身份校验失败");
-        }
+		SysUser sysUser = sysUserService.getUser();
         String musicGroupId = subFeeSettingDto.getMusicGroupId();
         //乐团状态是否正确
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
@@ -1610,10 +1598,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void musicGroupAction(String musicGroupId) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
+		SysUser sysUser = sysUserService.getUser();
         MusicGroup musicGroup = saveLog(musicGroupId, MusicGroupStatusEnum.PREPARE);
 
         //乐器采购清单是否确认
@@ -1696,10 +1681,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void musicGroupAudit(String musicGroupId) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
+		SysUser sysUser = sysUserService.getUser();
         Date date = new Date();
 
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
@@ -1744,10 +1726,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void musicGroupAuditFailed(String musicGroupId, String memo) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
+		SysUser sysUser = sysUserService.getUser();
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup == null) {
             throw new BizException("乐团信息不存在");
@@ -1807,10 +1786,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void musicGroupAuditSuccess(String musicGroupId) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
+		SysUser sysUser = sysUserService.getUser();
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup == null) {
             throw new BizException("乐团信息不存在");
@@ -1945,10 +1921,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
     @Override
     public MusicCardDto queryPersonalMusicGroups(Integer userId) {
-        SysUser sysUser = sysUserFeignService.queryUserById(userId);
-        if (sysUser == null) {
-            throw new BizException("用户不存在");
-        }
+        SysUser sysUser = sysUserService.queryUserById(userId);
         MusicCardDto musicCardDto = musicGroupDao.queryPersonalMusicGroups(userId);
         if (musicCardDto == null) {
             musicCardDto = new MusicCardDto();
@@ -1995,10 +1968,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public boolean cancelMusicGroup(String musicGroupId) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
+		SysUser sysUser = sysUserService.getUser();
         MusicGroup musicGroup = musicGroupDao.getLocked(musicGroupId);
         if (musicGroup == null) {
             throw new BizException("乐团找不到");
@@ -2089,10 +2059,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public boolean pauseMusicGroup(String musicGroupId) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
+		SysUser sysUser = sysUserService.getUser();
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup == null) {
             throw new BizException("乐团找不到");
@@ -2122,10 +2089,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public boolean resumeMusicGroup(String musicGroupId) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
+        SysUser sysUser = sysUserService.getUser();
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup == null) {
             throw new BizException("乐团找不到");
@@ -2164,10 +2128,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean extensionPaymentExpireDate(String musicGroupId, Date expireDate) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
+        SysUser sysUser = sysUserService.getUser();
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup == null) {
             throw new BizException("乐团找不到");
@@ -2207,10 +2168,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
     @Override
     public boolean extensionApplyExpireDate(String musicGroupId, Date expireDate) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
+        SysUser sysUser = sysUserService.getUser();
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup == null) {
             throw new BizException("乐团找不到");
@@ -2238,10 +2196,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
     @Override
     public boolean extensionPreApplyExpireDate(String musicGroupId, Date expireDate) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
+        SysUser sysUser = sysUserService.getUser();
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup == null) {
             throw new BizException("乐团找不到");
@@ -2381,7 +2336,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if("STUDENT".equals(client)){
 
             // 乐团信息
-            SysUser student = sysUserFeignService.queryUserById(musicGroupQuit.getUserId());
+            SysUser student = sysUserService.queryUserById(musicGroupQuit.getUserId());
 
             IPage<SchoolStaffWrapper.SchoolStaff> page = schoolStaffService.selectPage(new Page<>(1, -1),
                     SchoolStaffWrapper.SchoolStaffQuery.builder().schoolId(musicGroup.getCooperationOrganId().longValue()).build());
@@ -2406,7 +2361,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
 
         if (reqMusicGroupQuit.getStatus() == PROCESSING) {
-            SysUser sysUser = sysUserFeignService.queryUserById(userId);
+            SysUser sysUser = sysUserService.queryUserById(userId);
 
             Set<Integer> integers = employeePositionService.queryUserIdByRoleId(new SysUserRoleEnum[]{ORGAN_MANAGER}, musicGroup.getOrganId());
             if (currentOperatorRoleIds == null || currentOperatorRoleIds.size() == 0) {
@@ -2438,10 +2393,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (musicGroupQuit == null) {
             throw new BizException("操作失败,没有查询到退团记录");
         }
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
+        SysUser sysUser = sysUserService.getUser();
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup == null) {
             throw new BizException("乐团不存在");
@@ -2770,7 +2722,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 			List<SchoolStaffWrapper.SchoolStaff> records = page.getRecords();
 			if (CollectionUtils.isNotEmpty(records)) {
 
-				SysUser sysUser = sysUserFeignService.queryUserById(userId);
+				SysUser sysUser = sysUserService.queryUserById(userId);
 
 				Map<Integer, String> userMap = new HashMap<>();
 				records.forEach(o -> userMap.put(o.getUserId().intValue(), o.getUserId().toString()));
@@ -2785,7 +2737,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 			List<SchoolStaffWrapper.SchoolStaff> records = page.getRecords();
 			if (CollectionUtils.isNotEmpty(records)) {
 
-				SysUser sysUser = sysUserFeignService.queryUserById(userId);
+				SysUser sysUser = sysUserService.queryUserById(userId);
 
 				Map<Integer, String> userMap = new HashMap<>();
 				records.forEach(o -> userMap.put(o.getUserId().intValue(), o.getUserId().toString()));
@@ -2804,10 +2756,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     public boolean directQuitMusicGroup(MusicGroupQuitDto musicGroupQuitDto) {
 		Integer userId = musicGroupQuitDto.getUserId();
 		String musicGroupId = musicGroupQuitDto.getMusicGroupId();
-		SysUser sysUser = sysUserFeignService.queryUserById(userId);
-        if (sysUser == null) {
-            throw new BizException("获取用户信息失败");
-        }
+		SysUser sysUser = sysUserService.queryUserById(userId);
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup == null) {
             throw new BizException("乐团不存在");
@@ -3400,10 +3349,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public boolean updateTeacherCoursesSalary(Long courseScheduleId, Integer teacherId, BigDecimal salary, BigDecimal subsidy, String scope) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("获取用户信息失败");
-        }
+        SysUser sysUser = sysUserService.getUser();
         CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId);
         if (courseSchedule == null) {
             throw new BizException("课程信息不存在");
@@ -3441,10 +3387,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
     @Override
     public PageInfo<MusicGroup> queryMusicGroupPage(MusicGroupQueryInfo queryInfo) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("获取用户信息失败");
-        }
+        SysUser sysUser = sysUserService.getUser();
         //查询有剩余排课时长的乐团
         if("MUSIC_GROUP_HAS_COURSE_TIMES".equals(queryInfo.getSearchType())){
             List<String> musicGroupIds = musicGroupDao.queryHasSubCourseTimes(queryInfo.getOrganId(),queryInfo.getTenantId());
@@ -3594,10 +3537,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateBaseInfo(SubFeeSettingDto subFeeSettingDto) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
+        SysUser sysUser = sysUserService.getUser();
         String musicGroupId = subFeeSettingDto.getMusicGroup().getId();
         MusicGroup group = musicGroupDao.getLocked(musicGroupId);
         if (group == null) {
@@ -3756,10 +3696,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public MusicGroup openPay(String musicGroupId, String expireDate) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
+        SysUser sysUser = sysUserService.getUser();
         MusicGroup musicGroup = saveLog(musicGroupId, MusicGroupStatusEnum.APPLY);
         //记录操作日志
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "开启缴费(报名中 -->  缴费中)", sysUser.getId(), ""));
@@ -3819,10 +3756,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void musicGroupFound(String musicGroupId) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
+        SysUser sysUser = sysUserService.getUser();
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup == null) {
             throw new BizException("乐团信息不存在");
@@ -3865,23 +3799,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, event, sysUser.getId(), ""));
         musicGroup.setStatus(MusicGroupStatusEnum.PREPARE);
         musicGroupDao.update(musicGroup);
-//        if (musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType() == CooperationOrgan.OwnershipType.OWN) {
-//            //给家长发送乐团基础训练课短信
-//            //获取所有乐团学员列表
-//            List<StudentRegistration> students = studentRegistrationDao.queryStudentByMusicGroupId(musicGroupId);
-//            if (students != null && students.size() > 0) {
-//                // 获取所有家长电话
-//                Set<String> parentsPhones = students.stream().map(StudentRegistration::getParentsPhone).collect(Collectors.toSet());
-//                // 获取对应家长的用户编号
-//                Map<Integer, String> userIds = MapUtil.convertMybatisMap(studentRegistrationDao.findParentId(StringUtils.join(parentsPhones, ",")));
-//                userIds = JSONObject.parseObject(JSONObject.toJSONString(userIds), HashMap.class);
-//                if (userIds != null && userIds.size() > 0) {
-//                    String studentApplyUrl = sysConfigDao.findConfigValue(SysConfigService.STUDENT_APPLY_URL) + musicGroupId;
-//                    String serverPhone = sysConfigDao.findConfigValue(SysConfigService.SERVER_PHONE);
-//                    sysMessageService.batchSendMessage(MessageSender.YIMEI, MessageTypeEnum.SMS_BASICS_SKILL_APPLY_MESSAGE, userIds, null, 0, "", "", musicGroup.getName(), studentApplyUrl, serverPhone);
-//                }
-//            }
-//        }
         sendSeoMessageSource.sendSeoMessage(musicGroup.getOrganId(), new SysUserRoleEnum[]{ORGAN_MANAGER},
                 null, musicGroup.getEducationalTeacherId(), MessageTypeEnum.BACKSTAGE_MUSIC_GROUP_MARKING, musicGroup.getName());
     }
@@ -3914,10 +3831,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult addMusicGroupRegs(String musicGroupId, List<Long> registerIds) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null || sysUser.getId() == null) {
-            throw new BizException("获取用户信息失败");
-        }
+        SysUser sysUser = sysUserService.getUser();
         List<StudentRegistration> studentRegistrations = studentRegistrationDao.findStudentListByIdList(registerIds);
         List<StudentRegistration> oldRegs = studentRegistrationDao.getMusicGroupStu(musicGroupId);
         Map<Integer, List<StudentRegistration>> oldRegMap = oldRegs.stream().collect(Collectors.groupingBy(StudentRegistration::getUserId));
@@ -4007,10 +3921,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean closeMusicGroup(CloseMusicGroupDto closeMusicGroupDto) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
+        SysUser sysUser = sysUserService.getUser();
         String musicGroupId = closeMusicGroupDto.getMusicGroupId();
 
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
@@ -4119,10 +4030,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
     @Override
     public Object getQuitGroupDetail(String musicGroupId) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("请登录");
-        }
+        SysUser sysUser = sysUserService.getUser();
         Map<String, Object> resultMap = new HashMap<>(8);
         String username = sysUser.getUsername();
         resultMap.put("username", StringUtils.isEmpty(username) ? sysUser.getRealName() : username);
@@ -4140,7 +4048,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 			resultMap.put("quitTime", musicGroupQuit.getCreateTime());
         }
         if (musicGroup.getEducationalTeacherId() != null) {
-            SysUser user = sysUserFeignService.queryUserById(musicGroup.getEducationalTeacherId());
+            SysUser user = sysUserService.queryUserById(musicGroup.getEducationalTeacherId());
             resultMap.put("teacherMobile", user.getPhone());
         } else {
             resultMap.put("teacherMobile", "027-87718176");

+ 149 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentVisitServiceImpl.java

@@ -1,15 +1,18 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.BasicUserDto;
-import com.ym.mec.biz.dal.dto.StudentPreVisitDto;
-import com.ym.mec.biz.dal.dto.StudentVisitDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.HumanCostTypeEnum;
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
+import com.ym.mec.biz.dal.enums.TemplateTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.StudentPreVisitQueryInfo;
 import com.ym.mec.biz.dal.page.StudentVisitQueryInfo;
 import com.ym.mec.biz.service.StudentVisitService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
@@ -17,10 +20,17 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.excel.POIUtil;
+import com.ym.mec.util.ini.IniFileUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -45,6 +55,8 @@ public class StudentVisitServiceImpl extends BaseServiceImpl<Integer, StudentVis
     private StudentAttendanceDao studentAttendanceDao;
     @Autowired
     private StudentOperatingVisitDao studentOperatingVisitDao;
+    @Autowired
+    private SysUserService sysUserService;
 
 
     @Override
@@ -96,6 +108,44 @@ public class StudentVisitServiceImpl extends BaseServiceImpl<Integer, StudentVis
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void batchAddVisit(List<StudentVisit> studentVisit) {
+        Integer userId = sysUserService.getUserId();
+        StudentVisit.VisiterTypeEnum visitType = StudentVisit.VisiterTypeEnum.EDU_TEACHER;
+        List<Integer> studentIds = studentVisit.stream().map(e -> e.getStudentId()).collect(Collectors.toList());
+        List<SimpleUserDto> userDtos = teacherDao.getUsersSimpleInfo(studentIds);
+        Date now = new Date();
+        Map<Integer, SimpleUserDto> userDtoMap = userDtos.stream().collect(Collectors.groupingBy(e -> e.getUserId(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
+        Map<String,List<Integer>> visitMap = new HashMap<>();
+        for (StudentVisit visit : studentVisit) {
+            visit.setType("其他");
+            visit.setPurpose("其他");
+            visit.setTeacherId(userId);
+            visit.setVisiterType(visitType);
+            SimpleUserDto userDto = userDtoMap.get(visit.getStudentId());
+            if (Objects.isNull(userDto)){
+                throw new BizException("学员编号{}用户信息不存在",visit.getStudentId());
+            }
+            visit.setOrganId(Integer.parseInt(userDto.getOrganIds()));
+            visit.setCreateTime(now);
+            String month = DateUtil.format(visit.getVisitTime(), DateUtil.ISO_YEAR_MONTH_FORMAT);
+            List<Integer> userIds;
+            if(visitMap.containsKey(month)){
+                userIds = visitMap.get(month);
+            }else {
+                userIds = new ArrayList<>();
+            }
+            userIds.add(visit.getStudentId());
+            visitMap.put(month,userIds);
+        }
+        studentVisitDao.batchInsert(studentVisit);
+        //更新学员回访统计数据
+        for (String month : visitMap.keySet()) {
+            studentOperatingVisitDao.batchUpdateVisit(visitMap.get(month),month);
+        }
+    }
+
+    @Override
     public StudentVisitDto getInfo(Integer id) {
         return studentVisitDao.getInfo(id);
     }
@@ -185,4 +235,100 @@ public class StudentVisitServiceImpl extends BaseServiceImpl<Integer, StudentVis
         pageInfo.setRows(dataList);
         return pageInfo;
     }
+
+    @Override
+    public List<String> importMusicVisit(MultipartFile file) throws Exception{
+        Map<String, List<Map<String, Object>>> sheetsListMap = POIUtil.importExcel(new ByteArrayInputStream(file.getBytes()), 2, file.getOriginalFilename());
+        InputStream inputStream = new ClassPathResource("columnMapper.ini").getInputStream();
+        Map<String, String> columns = IniFileUtil.readIniFile(inputStream, TemplateTypeEnum.PAYMENT_MUSIC_VISIT_IMPORT.getMsg());
+        List<StudentVisit> importDtos = new ArrayList<>();
+        List<String> errMsg = new ArrayList();
+        StringBuffer sb = new StringBuffer();
+        for (String sheetName : sheetsListMap.keySet()) {
+            List<Map<String, Object>> sheet = sheetsListMap.get(sheetName);
+            for (int i = 0; i < sheet.size(); i++) {
+                int rowNum = i + 2;
+                Map<String, Object> row = sheet.get(i);
+                if (row.size() == 0) {
+                    continue;
+                }
+                JSONObject objectMap = new JSONObject();
+                valueIsNull: for (String s : row.keySet()) {
+                    String columnValue = columns.get(s);
+                    if (columnValue.equals("musicGroupId")) {
+                        if (StringUtils.isEmpty(row.get(s).toString())) {
+                            sb.append("第" + rowNum).append("行数据导入失败:乐团编号不可为空;");
+                            continue valueIsNull;
+                        } else {
+                            objectMap.put(columnValue, row.get(s));
+                        }
+                    } else if (columnValue.equals("studentId")) {
+                        if (StringUtils.isEmpty(row.get(s).toString())) {
+                            sb.append("第" + rowNum).append("行数据导入失败:学员编号不可为空;");
+                            continue valueIsNull;
+                        } else {
+                            objectMap.put(columnValue, row.get(s));
+                        }
+                    } else if (columnValue.equals("visitTime")) {
+                        if (StringUtils.isEmpty(row.get(s).toString())) {
+                            sb.append("第" + rowNum).append("行数据导入失败:回访日期不可为空;");
+                            continue valueIsNull;
+                        } else {
+                            objectMap.put(columnValue, row.get(s));
+                        }
+                    } else if (columnValue.equals("overview")) {
+                        if (StringUtils.isEmpty(row.get(s).toString())) {
+                            sb.append("第" + rowNum).append("行数据导入失败:学员情况不可为空;");
+                            continue valueIsNull;
+                        } else {
+                            objectMap.put(columnValue, row.get(s));
+                        }
+                    } else if (columnValue.equals("feedback")) {
+                        if (StringUtils.isEmpty(row.get(s).toString())) {
+                            sb.append("第" + rowNum).append("行数据导入失败:家长反馈不可为空;");
+                            continue valueIsNull;
+                        } else {
+                            objectMap.put(columnValue, row.get(s));
+                        }
+                    } else if (columnValue.equals("probStatus")) {
+                        if (StringUtils.isEmpty(row.get(s).toString())) {
+                            sb.append("第" + rowNum).append("行数据导入失败:问题状态不可为空;");
+                            continue valueIsNull;
+                        } else {
+                            for (HumanCostTypeEnum costTypeEnum : HumanCostTypeEnum.values()) {
+                                if (costTypeEnum.getMsg().equals(row.get(s).toString())) {
+                                    objectMap.put(columnValue, costTypeEnum);
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                }
+                try {
+                    StudentVisit cost = JSONObject.parseObject(objectMap.toJSONString(), StudentVisit.class);
+                    StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(cost.getStudentId(), cost.getMusicGroupId());
+                    if(Objects.isNull(studentRegistration)){
+                        throw new BizException("学员{}不在乐团{}中,无需回访",studentRegistration.getUserId(),studentRegistration.getMusicGroupId());
+                    }
+                    if(studentRegistration.getMusicGroupStatus() != StudentMusicGroupStatusEnum.APPLY){
+                        throw new BizException("学员{}已缴费无需回访",studentRegistration.getUserId());
+                    }
+                    Integer visitStudent = studentVisitDao.getMusicVisitStudent(studentRegistration.getMusicGroupId(), studentRegistration.getUserId());
+                    if(Objects.nonNull(visitStudent)){
+                        throw new BizException("学员{}已回访",visitStudent);
+                    }
+                    importDtos.add(cost);
+                } catch (Exception ex) {
+                    throw new BizException("导入数据出错", ex);
+                }
+            }
+        }
+        if (!org.springframework.util.CollectionUtils.isEmpty(errMsg)) {
+            return errMsg;
+        }
+        if(!org.springframework.util.CollectionUtils.isEmpty(importDtos)){
+            this.batchAddVisit(importDtos);
+        }
+        return null;
+    }
 }

+ 12 - 6
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -774,12 +774,6 @@
             <if test="search!=null and search!=''">
                 AND (t.user_id_=#{search} OR su.username_ LIKE CONCAT('%', #{search}, '%'))
             </if>
-            <if test="cloudTeacherTrainStartDate != null">
-                AND date(smcr.create_time_) &gt;= #{cloudTeacherTrainStartDate}
-            </if>
-            <if test="cloudTeacherTrainEndDate != null">
-                AND date(smcr.create_time_) &lt;= #{cloudTeacherTrainEndDate}
-            </if>
         </where>
     </sql>
 
@@ -820,6 +814,12 @@
             LEFT JOIN sys_user su ON stu.user_id_=su.id_
             LEFT JOIN `subject` sub ON stu.subject_id_list_ = sub.id_
             LEFT JOIN sys_music_compare_record smcr ON stu.user_id_ = smcr.user_id_
+            <if test="cloudTeacherTrainStartDate != null">
+                AND date(smcr.create_time_) &gt;= #{cloudTeacherTrainStartDate}
+            </if>
+            <if test="cloudTeacherTrainEndDate != null">
+                AND date(smcr.create_time_) &lt;= #{cloudTeacherTrainEndDate}
+            </if>
         <include refid="queryCloudStudyStudentDataCondition" />
         GROUP BY stu.user_id_
         <trim prefix="ORDER BY " suffixOverrides=",">
@@ -861,6 +861,12 @@
         )) t
         LEFT JOIN sys_user su ON t.user_id_ = su.id_
         LEFT JOIN sys_music_compare_record smcr ON t.user_id_ = smcr.user_id_
+        <if test="cloudTeacherTrainStartDate != null">
+            AND date(smcr.create_time_) &gt;= #{cloudTeacherTrainStartDate}
+        </if>
+        <if test="cloudTeacherTrainEndDate != null">
+            AND date(smcr.create_time_) &lt;= #{cloudTeacherTrainEndDate}
+        </if>
         <include refid="queryCloudStudyStudentDataCondition" />
     </select>
 

+ 7 - 0
mec-biz/src/main/resources/config/mybatis/StudentOperatingVisitMapper.xml

@@ -61,6 +61,13 @@ month_ = #{month},
 		update student_operating_visit set visit_flag_ = 1
 		where user_id_ = #{studentId} and visit_flag_ = 0 and month_ = #{month}
 	</update>
+    <update id="batchUpdateVisit">
+		update student_operating_visit set visit_flag_ = 1
+		where visit_flag_ = 0 and month_ = #{month} AND user_id_ IN
+		<foreach collection="studentIds" separator="," item="studentId" open="(" close=")">
+			#{studentId}
+		</foreach>
+	</update>
 
 	<!-- 根据主键删除一条记录 -->
 	<delete id="delete" >

+ 18 - 0
mec-biz/src/main/resources/config/mybatis/StudentVisitMapper.xml

@@ -53,6 +53,21 @@
         #{type,jdbcType=VARCHAR}, #{purpose,jdbcType=VARCHAR}, #{overview,jdbcType=VARCHAR},
         #{feedback,jdbcType=VARCHAR}, #{visitTime}, #{createTime},#{objectId},#{tenantId},#{attachments},#{probStatus})
     </insert>
+    <insert id="batchInsert">
+        insert into student_visit (music_group_id_, organ_id_, student_id_, teacher_id_, visiter_type_, feedback_type_,feedback_type_desc_,
+        type_, purpose_, overview_,
+        feedback_, visit_time_, create_time_,object_id_,tenant_id_,attachments_,prob_status)
+        VALUES
+        <foreach collection="studentVisit" item="item" separator=",">
+            (#{item.musicGroupId,jdbcType=VARCHAR}, #{item.organId,jdbcType=INTEGER}, #{item.studentId,jdbcType=INTEGER},
+            #{item.teacherId,jdbcType=INTEGER},#{item.visiterType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            #{item.feedbackType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            #{item.feedbackTypeDesc,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            #{item.type,jdbcType=VARCHAR}, #{item.purpose,jdbcType=VARCHAR}, #{item.overview,jdbcType=VARCHAR},
+            #{item.feedback,jdbcType=VARCHAR}, #{item.visitTime}, #{item.createTime},#{item.objectId},#{item.tenantId},
+             #{item.attachments},#{item.probStatus})
+        </foreach>
+    </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentVisit">
         <!--@mbg.generated-->
         update student_visit
@@ -211,6 +226,9 @@
             #{studentId}
         </foreach>
     </select>
+    <select id="getMusicVisitStudent" resultType="java.lang.Integer">
+        SELECT student_id_ FROM student_visit WHERE music_group_id_ = #{musicGroupId} AND student_id_ = #{studentId}
+    </select>
     <select id="getTeacherVisitCount" resultType="com.ym.mec.biz.dal.dto.TeacherVisitDto">
         SELECT teacher_id_ teacherId,date_format(visit_time_, '%Y-%m') month, COUNT(*) num
         FROM student_visit

+ 16 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ImportController.java

@@ -3,6 +3,7 @@ package com.ym.mec.web.controller;
 import com.ym.mec.biz.dal.entity.FinancialExpenditure;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
+import com.ym.mec.biz.dal.entity.StudentVisit;
 import com.ym.mec.biz.dal.enums.TemplateTypeEnum;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
@@ -22,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.CollectionUtils;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -55,6 +57,8 @@ public class ImportController extends BaseController {
     private TempBuyFreeLiveTheoryCourseService liveTheoryCourseService;
     @Autowired
     private MusicGroupService musicGroupService;
+    @Autowired
+    private StudentVisitService studentVisitService;
 
 
     @ApiOperation(value = "导入商品")
@@ -204,4 +208,16 @@ public class ImportController extends BaseController {
             return failed(StringUtils.join(errMsg, ","));
         }
     }
+
+    @ApiOperation(value = "批量导入乐团回访")
+    @PostMapping(value = "/importMusicVisit")
+    @PreAuthorize("@pcs.hasPermissions('import/importMusicVisit')")
+    public HttpResponseResult<StudentVisit> importMusicVisit(@RequestParam("file") MultipartFile file) throws Exception {
+        List<String> errMsg = studentVisitService.importMusicVisit(file);
+        if (CollectionUtils.isEmpty(errMsg)) {
+            return succeed();
+        } else {
+            return failed(StringUtils.join(errMsg, ","));
+        }
+    }
 }

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/VisitController.java

@@ -54,6 +54,7 @@ public class VisitController extends BaseController {
         studentVisit.setVisiterType(StudentVisit.VisiterTypeEnum.EDU_TEACHER);
         return succeed(studentVisitService.addVisit(studentVisit));
     }
+
     @ApiOperation(value = "修改问题状态")
     @PostMapping(value = "/updateProbStatus")
     @PreAuthorize("@pcs.hasPermissions('visit/updateProbStatus')")
@@ -64,7 +65,6 @@ public class VisitController extends BaseController {
         }else{
             return failed(s);
         }
-
     }
 
 

+ 9 - 1
mec-web/src/main/resources/columnMapper.ini

@@ -121,4 +121,12 @@ ID = id
 手机号 = phone
 声部 = subjectName
 年级 = grade
-班级 = currentClass
+班级 = currentClass
+
+[缴费中乐团批量回访]
+乐团编号 = musicGroupId
+学员编号 = studentId
+回访日期 = visitTime
+学员情况 = overview
+家长反馈 = feedback
+问题状态 = probStatus