Преглед изворни кода

缴费项目外部订单导入

zouxuan пре 2 година
родитељ
комит
ebd736c460

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

@@ -365,4 +365,6 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
 
 
     List<TempCampUserTrainingSequenceVo> getStudentCloudStudySequenceDaysV2(@Param("studentIds") List<Integer> studentIds,@Param("campId") String campId);
+
+    List<String> queryExistStuByPhone(@Param("phones") List<String> phones);
 }

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

@@ -759,4 +759,6 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
     List<Map<Integer, String>> queryStudentEduMap(Integer userId);
 
     void updateCourseFee(@Param("id") Long id, @Param("musicalFee") BigDecimal musicalFee);
+
+    void batchUpdate(@Param("studentRegistrations") List<StudentRegistration> studentRegistrations);
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java

@@ -535,4 +535,13 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
     * @date 2022/7/15 15:43
     */
     List<BaseMapDto<Integer, String>> queryOrganList(@Param("userId") Integer userId);
+
+    /**
+    * @description: 根据手机号获取用户列表
+     * @param phones
+    * @return java.util.List<com.ym.mec.auth.api.entity.SysUser>
+    * @author zx
+    * @date 2023/5/8 11:59
+    */
+    List<BasicUserDto> queryUserByPhones(@Param("phones") List<String> phones);
 }

+ 17 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupPaymentImportDto.java

@@ -12,8 +12,8 @@ public class MusicGroupPaymentImportDto {
     @ApiModelProperty(value = "缴费批次")
     private String batchNo;
 
-    @ApiModelProperty(value = "学员手机号")
-    private String phone;
+    @ApiModelProperty(value = "学员号")
+    private Integer userId;
 
     @ApiModelProperty(value = "交易流水号")
     private String transNo;
@@ -23,5 +23,20 @@ public class MusicGroupPaymentImportDto {
 
     @ApiModelProperty(value = "交易时间")
     private Date payTime;
+
+    @ApiModelProperty(value = "学员姓名")
+    private String studentName;
+
+    @ApiModelProperty(value = "学员性别")
+    private String gender;
+
+    @ApiModelProperty(value = "学员手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "声部")
+    private String subjectName;
+
+    @ApiModelProperty(value = "年级")
+    private String grade;
 }
 

+ 0 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseFeeDetail.java

@@ -1,8 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
-import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
 import com.ym.mec.common.entity.BaseEntity;
-
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 /**

+ 0 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderService.java

@@ -211,13 +211,4 @@ public interface MusicGroupPaymentCalenderService extends BaseService<Long, Musi
 	Map<Long, Integer>  findCooperationByIds(List<Long> calenderIds);
 
     Object queryUser(MusicGroupPaymentCalenderQueryInfo queryInfo);
-
-	/**
-	* @description: 缴费项目外部订单导入
-	 * @param file
-	* @return java.util.List<java.lang.String>
-	* @author zx
-	* @date 2023/5/5 14:03
-	*/
-    List<String> importMusicGroupPayment(MultipartFile file) throws Exception;
 }

+ 18 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java

@@ -9,6 +9,8 @@ import com.ym.mec.biz.dal.vo.MusicGroupDeliveryVo;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.math.BigDecimal;
@@ -26,7 +28,10 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	 * @return
 	 */
 	boolean importStudentToMusicGroup(String musicGroupId, Map<String, List<Map<String, Object>>> excelData);
-	
+
+    @Transactional(rollbackFor = Exception.class)
+    void importStudentToMusicGroup1(List<MusicGroupPaymentImportDto> importDtos, MusicGroupPaymentCalender calender) throws Exception;
+
     /**
      * 建团申请数据提交
      *
@@ -71,6 +76,9 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
      */
     Map sporadicPay(SporadicPayDto sporadicPayDto) throws Exception;
 
+    @Transactional(rollbackFor = Exception.class)
+    void importRenew(List<MusicGroupPaymentImportDto> importDtos) throws Exception;
+
     /**
      * 缴费
      *
@@ -448,4 +456,13 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
      * @return
      */
     boolean confirmDelivery(Integer userId, MusicGroupDeliveryVo musicGroupDeliveryVo);
+
+    /**
+     * @description: 缴费项目外部订单导入
+     * @param file
+     * @return java.util.List<java.lang.String>
+     * @author zx
+     * @date 2023/5/5 14:03
+     */
+    List<String> importMusicGroupPayment(MultipartFile file) throws Exception;
 }

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java

@@ -8,6 +8,8 @@ import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
 import java.math.BigDecimal;
@@ -97,6 +99,15 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
     StudentPaymentOrder addOrder(StudentRegistration studentRegistration,
                                  StudentPaymentOrder studentPaymentOrder, MusicGroupApplyGoodsDto goodsDto, RegisterPayDto registerPayDto, CouponPayParam couponPayParam) throws Exception;
 
+    @Transactional(rollbackFor = Exception.class)
+    void addOrder1(StudentPaymentOrder studentPaymentOrder,
+                   MusicGroupPaymentCalender calender,
+                   List<MusicGroupPaymentCalenderCourseSettings> newCourses,
+                   MusicGroupPaymentCalenderMember calenderMember,
+                   MusicGroupPaymentCalenderRepair calenderRepair,
+                   List<MusicGroupPaymentCalenderActivity> calenderActivities
+    ) throws Exception;
+
     /**
      * 查询用户指定乐团的报名信息
      *
@@ -397,4 +408,6 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
      * @date 2021/11/9 10:27
      */
     PageInfo<StudentInstrument> queryMusicStudentInstrument(StudentPreRegistrationQueryInfo queryInfo);
+
+    void batchUpdate(@Param("studentRegistrations") List<StudentRegistration> studentRegistrations);
 }

+ 0 - 44
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -1273,50 +1273,6 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
     }
 
     @Override
-    public List<String> importMusicGroupPayment(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.MUSIC_GROUP_PAYMENT_IMPORT.getMsg());
-        List<MusicGroupPaymentImportDto> importDtos = new ArrayList<>();
-        List<String> errMsg = new ArrayList();
-        for (String sheetName : sheetsListMap.keySet()) {
-            List<Map<String, Object>> sheet = sheetsListMap.get(sheetName);
-            for (int i = 0; i < sheet.size(); i++) {
-                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 (StringUtils.isEmpty(columnValue)) {
-                        continue;
-                    }
-                    if (null == row.get(s)) {
-                        continue;
-                    }
-                    objectMap.put(columnValue, row.get(s));
-                }
-                try {
-                    MusicGroupPaymentImportDto cost = JSONObject.parseObject(objectMap.toJSONString(), MusicGroupPaymentImportDto.class);
-                    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)){
-            //处理数据导入
-            List<String> phoneList = importDtos.stream().map(e -> e.getPhone()).collect(Collectors.toList());
-
-        }
-        return null;
-    }
-
-    @Override
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public boolean autoUpdateMusicGroupPaymentCalenderStatus() {
         Date date = new Date();

+ 324 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -30,7 +30,9 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 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.http.HttpUtil;
+import com.ym.mec.util.ini.IniFileUtil;
 import com.ym.mec.util.json.JsonUtil;
 import com.ym.mec.util.validator.CommonValidator;
 import org.apache.commons.collections.CollectionUtils;
@@ -39,13 +41,17 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
+import org.springframework.core.io.ClassPathResource;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -55,6 +61,7 @@ import java.util.stream.Collectors;
 import static com.ym.mec.biz.dal.entity.ApprovalStatus.APPROVED;
 import static com.ym.mec.biz.dal.entity.ApprovalStatus.PROCESSING;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType.SCHOOL;
+import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType.*;
 import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED;
 import static com.ym.mec.biz.dal.enums.DealStatusEnum.ING;
 import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
@@ -82,6 +89,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Autowired
     private MusicGroupPaymentCalenderDao musicGroupPaymentCalenderDao;
     @Autowired
+    private MusicGroupPaymentCalenderMemberDao musicGroupPaymentCalenderMemberDao;
+    @Autowired
     private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
     @Autowired
     private MusicGroupPaymentEntitiesDao musicGroupPaymentEntitiesDao;
@@ -204,6 +213,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     private StudentDao studentDao;
     @Autowired
     private MusicGroupPaymentCalenderRepairDao musicGroupPaymentCalenderRepairDao;
+    @Autowired
+    private MusicGroupPaymentCalenderActivityDao musicGroupPaymentCalenderActivityDao;
 
     private SimpleDateFormat sdf_ymd = new SimpleDateFormat("yyyy-MM-dd");
 
@@ -439,6 +450,196 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 		return true;
 	}
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+	public void importStudentToMusicGroup1(List<MusicGroupPaymentImportDto> importDtos, MusicGroupPaymentCalender calender) throws Exception {
+		String musicGroupId = calender.getMusicGroupId();
+		//查询导入的声部是否正确
+    	List<String> subjectNameList = importDtos.stream().distinct().map(t->t.getSubjectName()).collect(Collectors.toList());
+
+    	List<MusicGroupSubjectPlan> musicGroupSubjectPlanList = musicGroupSubjectPlanDao.getMusicSubjectClassPlan(musicGroupId);
+
+    	Map<String,Integer> subjectMap = musicGroupSubjectPlanList.stream().collect(Collectors.toMap(MusicGroupSubjectPlan :: getSubName, MusicGroupSubjectPlan :: getSubjectId));
+
+    	List<String> allSubjectNameList = musicGroupSubjectPlanList.stream().map(t -> t.getSubName()).collect(Collectors.toList());
+
+    	for(String subName : subjectNameList){
+    		if(!allSubjectNameList.contains(subName)){
+    			throw new BizException("当前乐团不支持[{}]声部", subName);
+    		}
+    	}
+    	MusicGroupPaymentCalender musicGroupPaymentCalender = musicGroupPaymentCalenderDao.findByMusicGroupRegCalender(musicGroupId);
+    	if(musicGroupPaymentCalender == null){
+    		throw new BizException("请先创建乐团报名缴费");
+    	}
+        if(musicGroupPaymentCalender.getPaymentType() != MUSIC_APPLY){
+            throw new BizException("当前入口仅支持报名缴费项目导入");
+        }
+		Date now = new Date();
+		Long calenderId = musicGroupPaymentCalender.getId();
+		Boolean freeFlag = musicGroupPaymentCalender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) == 0;
+		List<String> phones = importDtos.stream().map(e -> e.getPhone()).collect(Collectors.toList());
+        List<BasicUserDto> userList = teacherDao.queryUserByPhones(phones);
+		List<String> existPhones = studentDao.queryExistStuByPhone(phones);
+		Map<String, BasicUserDto> userDtoMap = userList.stream().collect(Collectors.groupingBy(e -> e.getPhone(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
+		Organization organization = organizationDao.get(calender.getOrganId());
+		//检查用户是否已入团或在其他机构已注册
+		List<StudentRegistration> insertList = new ArrayList<>();
+		List<StudentRegistration> updateList = new ArrayList<>();
+		List<StudentRegistration> allList = new ArrayList<>();
+		StudentRegistration studentRegistration = null;
+		SysUser sysUser = null;
+		Student student = null;
+		Integer applyNum = 0;
+		MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+		MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberDao.findByCalenderId(calenderId);
+		MusicGroupPaymentCalenderRepair calenderRepair = musicGroupPaymentCalenderRepairDao.findByCalenderId(calenderId);
+		List<MusicGroupPaymentCalenderActivity> calenderActivities = musicGroupPaymentCalenderActivityDao.findByCalenderId(calenderId);
+		List<MusicGroupPaymentCalenderCourseSettings> courseSettings = musicGroupPaymentCalenderCourseSettingsDao.queryCalenderCourseSettings(calenderId);
+		for(MusicGroupPaymentImportDto si : importDtos){
+			BasicUserDto userDto = userDtoMap.get(si.getPhone());
+			if (Objects.isNull(userDto)) {
+				sysUser = new SysUser();
+				sysUser.setPhone(si.getPhone());
+				int phoneStrLen = sysUser.getPhone().length();
+				sysUser.setPassword(new BCryptPasswordEncoder().encode("gym" + sysUser.getPhone().substring(phoneStrLen - 4, phoneStrLen)));
+				sysUser.setUsername(si.getStudentName());
+				sysUser.setGender(si.getGender().equals("男") ? 1 : 0);
+				sysUser.setUserType("STUDENT");
+				sysUser.setOrganId(calender.getOrganId());
+				sysUser.setCreateTime(now);
+				sysUser.setUpdateTime(now);
+				teacherDao.addSysUser(sysUser);
+            }
+			Integer userId = si.getUserId();
+			if(!existPhones.contains(si.getPhone())){
+				student = new Student(userId, subjectMap.get(si.getSubjectName()) + "");
+				student.setCurrentGradeNum(SixPlusGradeEnum.get(si.getGrade()).getCode());
+				studentDao.insert(student);
+				// 添加用户现金账户
+				sysUserCashAccountDao.insert(new SysUserCashAccount(userId, "CNY"));
+			}
+			studentRegistration = studentRegistrationService.queryByUserIdAndMusicGroupId(userId, musicGroupId);
+			if(studentRegistration == null){
+				studentRegistration = new StudentRegistration();
+				String studentGrade = studentService.getStudentGrade(organization.getGradeType(), student.getCurrentGradeNum());
+				studentRegistration.setCurrentGrade(studentGrade);
+				studentRegistration.setActualSubjectId(subjectMap.get(si.getSubjectName()));
+				studentRegistration.setIsAllowAdjust(YesOrNoEnum.YES);
+				studentRegistration.setSubjectId(subjectMap.get(si.getSubjectName()));
+				studentRegistration.setUserId(userId);
+				studentRegistration.setParentsPhone(si.getPhone());
+				studentRegistration.setName(si.getStudentName());
+				studentRegistration.setGender(sysUser.getGender());
+				studentRegistration.setPaymentStatus(PaymentStatusEnum.YES);
+				studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
+				studentRegistration.setTemporaryCourseFee(BigDecimal.ZERO);
+				studentRegistration.setMusicGroupPaymentCalenderId(calenderId);
+				studentRegistration.setTenantId(calender.getTenantId());
+				studentRegistration.setMusicGroupId(musicGroupId);
+				studentRegistration.setCreateTime(now);
+				studentRegistration.setUpdateTime(now);
+				insertList.add(studentRegistration);
+				applyNum ++;
+			} else{
+				if (studentRegistration.getMusicGroupStatus() != StudentMusicGroupStatusEnum.APPLY) {
+					throw new BizException("学员{}乐团状态不支持导入",si.getStudentName());
+				}
+				studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
+				updateList.add(studentRegistration);
+			}
+			allList.add(studentRegistration);
+			String channelType = "";
+			String orderNo = idGeneratorService.generatorId("payment") + "";
+			//生成订单,校验优惠券的使用情况
+			StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
+			studentPaymentOrder.setExpectAmount(calender.getCurrentTotalAmount());
+			studentPaymentOrder.setActualAmount(calender.getCurrentTotalAmount());
+			studentPaymentOrder.setCouponRemitFee(BigDecimal.ZERO);
+			studentPaymentOrder.setUserId(studentRegistration.getUserId());
+			studentPaymentOrder.setGroupType(GroupType.OUTORDER);
+			studentPaymentOrder.setOrderNo(orderNo);
+			studentPaymentOrder.setType(OrderTypeEnum.APPLY);
+			studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
+			studentPaymentOrder.setPaymentChannel(channelType);
+			studentPaymentOrder.setMusicGroupId(studentRegistration.getMusicGroupId());
+			studentPaymentOrder.setCalenderId(calenderId);
+			studentPaymentOrder.setOrganId(calender.getOrganId());
+			studentPaymentOrder.setRoutingOrganId(calender.getOrganId());
+			studentPaymentOrder.setMemo("缴费项目外部订单导入");
+			studentPaymentOrder.setMerNos(si.getMerNos());
+			studentPaymentOrder.setTransNo(si.getTransNo());
+			studentPaymentOrder.setPayTime(si.getPayTime());
+			studentPaymentOrderService.insert(studentPaymentOrder);
+			studentRegistrationService.addOrder1(studentPaymentOrder,calender,courseSettings, calenderMember, calenderRepair, calenderActivities);
+			studentPaymentRouteOrderService.addRouteOrder(orderNo, calender.getOrganId(), calender.getCurrentTotalAmount());
+			studentPaymentOrderDetailService.addOrderDetailTo(studentPaymentOrder, musicGroup, studentRegistration);
+		}
+		if (CollectionUtils.isNotEmpty(insertList)) {
+			studentRegistrationService.batchInsert(insertList);
+		}
+		if (CollectionUtils.isNotEmpty(updateList)) {
+			studentRegistrationService.batchUpdate(updateList);
+		}
+		if (CollectionUtils.isNotEmpty(allList)) {
+			Map<Integer, Long> subjectCountMap = allList.stream().collect(
+					Collectors.groupingBy(StudentRegistration::getActualSubjectId, Collectors.counting()));
+
+			MusicGroupSubjectPlan musicOneSubjectClassPlan = null;
+			for (Entry<Integer, Long> entry : subjectCountMap.entrySet()) {
+				musicOneSubjectClassPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, entry.getKey());
+				if (musicOneSubjectClassPlan == null) {
+					throw new BizException("系统数据[乐团声部设置]异常");
+				}
+				int num = musicOneSubjectClassPlan.getApplyStudentNum() == null ? 0 : musicOneSubjectClassPlan.getApplyStudentNum();
+				musicOneSubjectClassPlan.setApplyStudentNum(num + applyNum);
+				musicOneSubjectClassPlan.setPaidStudentNum((musicOneSubjectClassPlan.getPaidStudentNum() == null ? 0 : musicOneSubjectClassPlan
+						.getPaidStudentNum()) + entry.getValue().intValue());
+				if(freeFlag){
+					musicOneSubjectClassPlan.setPaidZeroNum((musicOneSubjectClassPlan.getPaidZeroNum() == null ? 0 : musicOneSubjectClassPlan.getPaidZeroNum())
+							+ entry.getValue().intValue());
+				}
+				musicOneSubjectClassPlan.setUpdateTime(now);
+				musicGroupSubjectPlanDao.update(musicOneSubjectClassPlan);
+			}
+			// 更新实际缴费人数
+			if (musicGroupPaymentCalender.getActualNum() == null) {
+				musicGroupPaymentCalender.setActualNum(allList.size());
+			} else {
+				musicGroupPaymentCalender.setActualNum(musicGroupPaymentCalender.getActualNum() + allList.size());
+			}
+			if (musicGroupPaymentCalender.getExpectNum() == null) {
+				musicGroupPaymentCalender.setExpectNum(allList.size());
+			} else {
+				musicGroupPaymentCalender.setExpectNum(musicGroupPaymentCalender.getExpectNum() + allList.size());
+			}
+			musicGroupPaymentCalender.setUpdateTime(now);
+			musicGroupPaymentCalenderDao.update(musicGroupPaymentCalender);
+
+			MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = null;
+			List<MusicGroupPaymentCalenderDetail> insertMusicGroupPaymentCalenderDetailList = new ArrayList<>();
+			for (MusicGroupPaymentImportDto si : importDtos) {
+				musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
+				musicGroupPaymentCalenderDetail.setTenantId(calender.getTenantId());
+				musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId());
+				musicGroupPaymentCalenderDetail.setUserId(si.getUserId());
+				musicGroupPaymentCalenderDetail.setResponsibleUserId(musicGroupPaymentCalender.getOperator());
+				musicGroupPaymentCalenderDetail.setPaymentStatus(PAID_COMPLETED);
+				musicGroupPaymentCalenderDetail.setPayTime(now);
+				musicGroupPaymentCalenderDetail.setPaymentOrderId(null);
+				musicGroupPaymentCalenderDetail.setUseInCourse(0);
+				musicGroupPaymentCalenderDetail.setOpen(1);
+				musicGroupPaymentCalenderDetail.setUserStatus(null);
+				musicGroupPaymentCalenderDetail.setDeadlinePaymentDate(musicGroupPaymentCalender.getDeadlinePaymentDate());
+				musicGroupPaymentCalenderDetail.setStartPaymentDate(musicGroupPaymentCalender.getStartPaymentDate());
+				insertMusicGroupPaymentCalenderDetailList.add(musicGroupPaymentCalenderDetail);
+			}
+			if (insertMusicGroupPaymentCalenderDetailList.size() > 0) {
+				musicGroupPaymentCalenderDetailDao.batchInsert(insertMusicGroupPaymentCalenderDetailList);
+			}
+		}
+	}
+
 	@Override
     @Transactional(rollbackFor = Exception.class)
     public String createGroup(SubFeeSettingDto subFeeSettingDto) {
@@ -945,6 +1146,72 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         return BaseController.succeed(payMap);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void importRenew(List<MusicGroupPaymentImportDto> importDtos) throws Exception {
+        Map<String, List<MusicGroupPaymentImportDto>> dtoMap = importDtos.stream().collect(Collectors.groupingBy(e -> e.getBatchNo()));
+        Date now = new Date();
+        for (String batchNo : dtoMap.keySet()) {
+            List<MusicGroupPaymentCalender> byBatchNo = musicGroupPaymentCalenderDao.findByBatchNo(batchNo);
+            if(CollectionUtils.isEmpty(byBatchNo)){
+                throw new BizException("缴费项目批次{}不存在",batchNo);
+            }
+			MusicGroupPaymentCalender calender = byBatchNo.get(0);
+			if(calender.getPaymentType() != MUSIC_RENEW && calender.getPaymentType() != ADD_COURSE && calender.getPaymentType() != MUSIC_APPLY){
+				throw new BizException("不支持类型 {} 的缴费项目导入",calender.getPaymentType().getDesc());
+			}
+			if(calender.getPaymentType() == MUSIC_APPLY){
+				this.importStudentToMusicGroup1(importDtos,calender);
+			}else {
+				Long calenderId = calender.getId();
+				List<MusicGroupPaymentImportDto> userDtoList = dtoMap.get(batchNo);
+				List<MusicGroupPaymentCalenderDetail> detailList = musicGroupPaymentCalenderDetailDao.getCalenderDetailWithCalender(calenderId);
+				Map<Integer, MusicGroupPaymentCalenderDetail> detailMap = detailList.stream().collect(Collectors.groupingBy(e -> e.getUserId(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
+				for (MusicGroupPaymentImportDto userDto : userDtoList) {
+					MusicGroupPaymentCalenderDetail calenderDetail = detailMap.get(userDto.getUserId());
+					if(Objects.isNull(calenderDetail)){
+						throw new BizException("缴费项不存在学员{},请检查导入Excel",userDto.getUserId());
+					}
+					if (calenderDetail.getPaymentStatus() == PaymentStatus.PAID_COMPLETED) {
+						throw new BizException("学员{}已缴费,请勿重复录入",userDto.getUserId());
+					}
+				}
+				for (MusicGroupPaymentImportDto userDto : userDtoList) {
+					String orderNo = idGeneratorService.generatorId("payment") + "";
+					StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
+					studentPaymentOrder.setExpectAmount(calender.getCurrentTotalAmount());
+					studentPaymentOrder.setActualAmount(calender.getCurrentTotalAmount());
+					studentPaymentOrder.setCouponRemitFee(BigDecimal.ZERO);
+					studentPaymentOrder.setGroupType(GroupType.OUTORDER);
+					studentPaymentOrder.setUserId(userDto.getUserId());
+					studentPaymentOrder.setOrderNo(orderNo);
+					studentPaymentOrder.setType(OrderTypeEnum.RENEW);
+					studentPaymentOrder.setStatus(SUCCESS);
+					studentPaymentOrder.setMusicGroupId(calender.getMusicGroupId());
+					studentPaymentOrder.setBatchNo(calenderId + "");
+					studentPaymentOrder.setCreateTime(now);
+					studentPaymentOrder.setUpdateTime(now);
+					studentPaymentOrder.setVersion(0);
+					studentPaymentOrder.setCalenderId(calenderId);
+					studentPaymentOrder.setOrganId(calender.getOrganId());
+					studentPaymentOrder.setRoutingOrganId(calender.getOrganId());
+					studentPaymentOrder.setMemo("缴费项目外部订单导入");
+					studentPaymentOrder.setMerNos(userDto.getMerNos());
+					studentPaymentOrder.setTransNo(userDto.getTransNo());
+					studentPaymentOrder.setPayTime(userDto.getPayTime());
+					studentPaymentOrderDao.insert(studentPaymentOrder);
+					studentPaymentRouteOrderService.addRouteOrder(orderNo, calender.getOrganId(), calender.getCurrentTotalAmount());
+					Integer userId = studentPaymentOrder.getUserId();
+					String musicGroupId = studentPaymentOrder.getMusicGroupId();
+					StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
+					MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+					//支付成功后处理课程、云教练、活动等数据
+					studentPaymentOrderDetailService.addOrderDetailTo(studentPaymentOrder, musicGroup, studentRegistration);
+				}
+			}
+        }
+    }
+
     private MusicGroupApplyGoodsDto getCalenderTotalAmount(RegisterPayDto registerPayDto, MusicGroupPaymentCalender calender) {
 
     	String musicGroupId = calender.getMusicGroupId();
@@ -1236,6 +1503,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         return BaseController.succeed(payMap);
     }
 
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateSubjectInfo(SubFeeSettingDto subFeeSettingDto) throws Exception {
@@ -3033,6 +3301,18 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         return false;
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    public boolean importRenewForCallback(StudentPaymentOrder studentPaymentOrder) throws IOException {
+        Integer userId = studentPaymentOrder.getUserId();
+        String musicGroupId = studentPaymentOrder.getMusicGroupId();
+
+        StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
+        MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+        //支付成功后处理课程、云教练、活动等数据
+        studentPaymentOrderDetailService.addOrderDetailTo(studentPaymentOrder, musicGroup, studentRegistration);
+        return false;
+    }
+
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public boolean updateTeacherCoursesSalary(Long courseScheduleId, Integer teacherId, BigDecimal salary, BigDecimal subsidy, String scope) {
@@ -3885,4 +4165,48 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         return true;
     }
+
+    @Override
+	@Transactional(rollbackFor = Exception.class)
+    public List<String> importMusicGroupPayment(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.MUSIC_GROUP_PAYMENT_IMPORT.getMsg());
+        List<MusicGroupPaymentImportDto> importDtos = new ArrayList<>();
+        List<String> errMsg = new ArrayList();
+        for (String sheetName : sheetsListMap.keySet()) {
+            List<Map<String, Object>> sheet = sheetsListMap.get(sheetName);
+            for (int i = 0; i < sheet.size(); i++) {
+                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 (StringUtils.isEmpty(columnValue)) {
+                        continue;
+                    }
+                    if (null == row.get(s)) {
+                        continue;
+                    }
+                    objectMap.put(columnValue, row.get(s));
+                }
+                try {
+                    MusicGroupPaymentImportDto cost = JSONObject.parseObject(objectMap.toJSONString(), MusicGroupPaymentImportDto.class);
+                    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.importRenew(importDtos);
+        }
+        return null;
+    }
+
 }

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -545,6 +545,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     //        }
 
     //调用相应业务回调接口
+    @Override
     public void callOrderCallBack(StudentPaymentOrder order) throws Exception {
         if(order.getGroupType() == GroupType.ACTIVITY){
             vipGroupActivityService.orderCallback(order);

+ 82 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -927,6 +927,83 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         return studentPaymentOrder;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void addOrder1(StudentPaymentOrder studentPaymentOrder,
+                          MusicGroupPaymentCalender calender,
+                          List<MusicGroupPaymentCalenderCourseSettings> newCourses,
+                          MusicGroupPaymentCalenderMember calenderMember,
+                          MusicGroupPaymentCalenderRepair calenderRepair,
+                          List<MusicGroupPaymentCalenderActivity> calenderActivities
+                          ){
+        Date date = new Date();
+        List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = new ArrayList<>();
+        //新的课程形态  todo  合奏课  单技课
+        if (CollectionUtils.isNotEmpty(newCourses)) {
+            for (MusicGroupPaymentCalenderCourseSettings newCourse : newCourses) {
+                StudentPaymentOrderDetail studentPaymentOrderDetailCourse = new StudentPaymentOrderDetail();
+                studentPaymentOrderDetailCourse.setType(OrderDetailTypeEnum.valueOf(newCourse.getCourseType().getCode()));
+                studentPaymentOrderDetailCourse.setPrice(newCourse.getCourseCurrentPrice());
+                studentPaymentOrderDetailCourse.setRemitFee(BigDecimal.ZERO);
+                studentPaymentOrderDetailCourse.setCreateTime(date);
+                studentPaymentOrderDetailCourse.setUpdateTime(date);
+                studentPaymentOrderDetailCourse.setPaymentOrderId(studentPaymentOrder.getId());
+                studentPaymentOrderDetailList.add(studentPaymentOrderDetailCourse);
+            }
+        }
+
+        //乐保 todo  乐保
+        if (Objects.nonNull(calenderRepair)) {
+            StudentPaymentOrderDetail maintenanceOrderDetail = new StudentPaymentOrderDetail();
+            maintenanceOrderDetail.setType(MAINTENANCE);
+            maintenanceOrderDetail.setPrice(calenderRepair.getActualAmount());
+            maintenanceOrderDetail.setRemitFee(BigDecimal.ZERO);
+            maintenanceOrderDetail.setCreateTime(date);
+            maintenanceOrderDetail.setUpdateTime(date);
+            maintenanceOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+            maintenanceOrderDetail.setIsRenew(0);
+            studentPaymentOrderDetailList.add(maintenanceOrderDetail);
+        }
+
+        //活动 todo  VIP 或 网管课
+        if(CollectionUtils.isNotEmpty(calenderActivities)){
+            for (MusicGroupPaymentCalenderActivity calenderActivity : calenderActivities) {
+                StudentPaymentOrderDetail maintenanceOrderDetail = new StudentPaymentOrderDetail();
+                maintenanceOrderDetail.setType("网管课".equals(calenderActivity.getCategoryName()) ? PRACTICE : VIP);
+                maintenanceOrderDetail.setPrice(calenderActivity.getActualAmount());
+                if(calender.getPayUserType() == MusicGroupPaymentCalender.PayUserType.SCHOOL){
+                    maintenanceOrderDetail.setPrice(BigDecimal.ZERO);
+                }
+                maintenanceOrderDetail.setRemitFee(BigDecimal.ZERO);
+                maintenanceOrderDetail.setCreateTime(date);
+                maintenanceOrderDetail.setUpdateTime(date);
+                maintenanceOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+                maintenanceOrderDetail.setIsRenew(0);
+                //保存的是活动编号
+                maintenanceOrderDetail.setStudentInstrumentId(calenderActivity.getActivityId().longValue());
+                studentPaymentOrderDetailList.add(maintenanceOrderDetail);
+            }
+        }
+
+        //云教练/云教练+  todo  团练宝
+        if(Objects.nonNull(calenderMember)){
+            StudentPaymentOrderDetail cloudTeacherOrderDetail = new StudentPaymentOrderDetail();
+            cloudTeacherOrderDetail.setType(OrderDetailTypeEnum.CLOUD_TEACHER);
+            cloudTeacherOrderDetail.setPrice(calenderMember.getActualAmount());
+            if(calender.getPayUserType() == MusicGroupPaymentCalender.PayUserType.SCHOOL){
+                cloudTeacherOrderDetail.setPrice(BigDecimal.ZERO);
+            }
+            cloudTeacherOrderDetail.setRemitFee(BigDecimal.ZERO);
+            cloudTeacherOrderDetail.setCreateTime(date);
+            cloudTeacherOrderDetail.setUpdateTime(date);
+            cloudTeacherOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+            cloudTeacherOrderDetail.setIsRenew(0);
+            studentPaymentOrderDetailList.add(cloudTeacherOrderDetail);
+        }
+        //添加订单明细
+        studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);
+    }
+
     /**
      * 计算使用优惠券后的每个明细均摊的金额
      *
@@ -2101,6 +2178,11 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     }
 
     @Override
+    public void batchUpdate(List<StudentRegistration> studentRegistrations) {
+        studentRegistrationDao.batchUpdate(studentRegistrations);
+    }
+
+    @Override
     public PageInfo<StudentRegisterInstrumentsDetailDto> queryStudentRegisterInstrumentsDetailList(MusicGroupRecordStudentQueryInfo queryInfo) {
         PageInfo<StudentRegisterInstrumentsDetailDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<>();

+ 9 - 0
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -1285,6 +1285,15 @@
         </foreach>
         and ucamp.train_time_ &gt;= camp.sign_standard_ * 60
     </select>
+    <select id="queryExistStuByPhone" resultType="java.lang.String">
+        select su.phone_ from student s
+        left join sys_user su ON su.id_ = s.user_id_
+        where su.del_flag_ = 0 AND tenant_id_ = 1 AND su.phone_ IN
+        <foreach collection="phones" item="phone" separator="," open="(" close=")">
+            #{phone}
+        </foreach>
+        AND su.id_ = s.user_id_
+    </select>
     <sql id="queryStudentBasicInfoSql">
         <where>
             AND su.lock_flag_ = 0 AND su.del_flag_ = 0

+ 87 - 0
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -1365,6 +1365,93 @@
     <update id="updateCourseFee">
         UPDATE student_registration SET surplus_course_fee_ = surplus_course_fee_ + #{musicalFee} WHERE id_ = #{id}
     </update>
+    <update id="batchUpdate">
+        <foreach collection="studentRegistrations" item="bean" index="index" open="" close="" separator=";">
+            UPDATE student_registration
+            <set>
+                <if test="bean.expectSurplusCourseFee != null">
+                    expect_surplus_course_fee_ = #{bean.expectSurplusCourseFee},
+                </if>
+                <if test="bean.parentsPhone != null">
+                    parents_phone_ = #{bean.parentsPhone},
+                </if>
+                <if test="bean.subjectId != null">
+                    subject_id_ = #{bean.subjectId},
+                </if>
+                <if test="bean.currentGrade != null">
+                    current_grade_ = #{bean.currentGrade},
+                </if>
+                <if test="bean.currentGradeNum != null">
+                    current_grade_num_ = #{bean.currentGradeNum},
+                </if>
+                <if test="bean.currentGradeDate != null">
+                    current_grade_date_ = #{bean.currentGradeDate},
+                </if>
+                <if test="bean.currentClass != null">
+                    current_class_ = #{bean.currentClass},
+                </if>
+                <if test="bean.isAllowAdjust != null">
+                    is_allow_adjust_ = #{bean.isAllowAdjust,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+                </if>
+                <if test="bean.kitPurchaseMethod != null">
+                    kit_purchase_method_ = #{bean.kitPurchaseMethod,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+                </if>
+                <if test="bean.musicGroupStatus != null">
+                    music_group_status_ = #{bean.musicGroupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+                </if>
+                <if test="bean.userId != null">
+                    user_id_ = #{bean.userId},
+                </if>
+                <if test="bean.name != null">
+                    name_ = #{bean.name},
+                </if>
+                <if test="bean.remark != null">
+                    remark_ = #{bean.remark},
+                </if>
+                <if test="bean.paymentStatus != null">
+                    payment_status_ = #{bean.paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+                </if>
+                <if test="bean.parentsName != null">
+                    parents_name_ = #{bean.parentsName},
+                </if>
+                <if test="bean.updateTime != null">
+                    update_time_ = NOW(),
+                </if>
+                <if test="bean.parentsCompany != null">
+                    parents_company_ = #{bean.parentsCompany},
+                </if>
+                <if test="bean.musicGroupId != null">
+                    music_group_id_ = #{bean.musicGroupId},
+                </if>
+                <if test="bean.actualSubjectId != null">
+                    actual_subject_id_ = #{bean.actualSubjectId},
+                </if>
+                <if test="bean.classGroupId != null">
+                    class_group_id_ = #{bean.classGroupId},
+                </if>
+                <if test="bean.temporaryCourseFee != null">
+                    temporary_course_fee_ =#{bean.temporaryCourseFee},
+                </if>
+                <if test="bean.surplusCourseFee != null">
+                    surplus_course_fee_ =#{bean.surplusCourseFee},
+                </if>
+                <if test="bean.payingStatus != null">
+                    paying_status_ =#{bean.payingStatus},
+                </if>
+                <if test="bean.hasCloudTeacher != null">
+                    has_cloud_teacher_ =#{bean.hasCloudTeacher},
+                </if>
+                <if test="bean.noneNeedCloudTeacher != null">
+                    none_need_cloud_teacher_ =#{bean.noneNeedCloudTeacher},
+                </if>
+                <if test="bean.membershipEndTime != null">
+                    membership_end_time_ =#{bean.membershipEndTime},
+                </if>
+                music_group_payment_calender_id_ =#{bean.musicGroupPaymentCalenderId}
+            </set>
+            WHERE id_ = #{bean.id}
+        </foreach>
+    </update>
 
     <select id="countPayingNum" resultType="map">
         SELECT COUNT(DISTINCT user_id_) `value`, actual_subject_id_ `key`

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -1561,5 +1561,13 @@
         where t.id_ = #{userId} group by t.id_)c ON 1 = 1
         where FIND_IN_SET(o.id_,c.organ_id_)
     </select>
+    <select id="queryUserByPhones" resultType="com.ym.mec.biz.dal.dto.BasicUserDto">
+        select id_ as userId,organ_id_ as organId,
+        username_ as name,avatar_ as headUrl,phone_ as phone,
+        buser_type_ as userType from sys_user where tenant_id_ = 1 AND phone_ IN
+        <foreach collection="phones" item="phone" separator="," open="(" close=")">
+            #{phone}
+        </foreach>
+    </select>
 
 </mapper>

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

@@ -55,8 +55,6 @@ public class ImportController extends BaseController {
     private TempBuyFreeLiveTheoryCourseService liveTheoryCourseService;
     @Autowired
     private MusicGroupService musicGroupService;
-    @Autowired
-    private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
 
 
     @ApiOperation(value = "导入商品")
@@ -96,7 +94,6 @@ public class ImportController extends BaseController {
     public HttpResponseResult<List<StudentPaymentRouteOrder>> importStudentToMusicGroup(String musicGroupId, @RequestParam("file") MultipartFile file) throws Exception {
         Map<String, List<Map<String, Object>>> sheetsListMap = POIUtil.importExcel(new ByteArrayInputStream(file.getBytes()), 2, file.getOriginalFilename());
         boolean result = musicGroupService.importStudentToMusicGroup(musicGroupId, sheetsListMap);
-
         return result ? succeed() : failed();
     }
 
@@ -200,7 +197,7 @@ public class ImportController extends BaseController {
     @PostMapping(value = "importMusicGroupPayment")
     @PreAuthorize("@pcs.hasPermissions('import/importMusicGroupPayment')")
     public HttpResponseResult<List<String>> importMusicGroupPayment(@RequestParam("file") MultipartFile file) throws Exception {
-        List<String> errMsg = musicGroupPaymentCalenderService.importMusicGroupPayment(file);
+        List<String> errMsg = musicGroupService.importMusicGroupPayment(file);
         if (CollectionUtils.isEmpty(errMsg)) {
             return succeed();
         } else {

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

@@ -112,7 +112,7 @@ ID = id
 
 [缴费项目外部订单导入]
 缴费批次 = batchNo
-学员手机号 = phone
+学员编号 = userId
 交易流水号 = transNo
 收款账户 = merNos
 交易日期 = payTime