yonge 2 years ago
parent
commit
de62a03be5

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

@@ -328,6 +328,10 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
     SysUser getUser(int userId);
 
     SysUser getUserWithPhone(@Param("phone") String phone);
+    
+    SysUser getUserWithIdCard(@Param("idCard") String idCard);
+    
+    SysUser getUserWithRealName(@Param("realName") String realName);
 
     /**
      * 获取教师基本信息

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempTestDao.java

@@ -0,0 +1,16 @@
+package com.ym.mec.biz.dal.dao;
+
+import java.util.Date;
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+
+import com.ym.mec.biz.dal.entity.TempTest;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface TempTestDao extends BaseDAO<Long, TempTest> {
+	
+	int batchInsert(List<TempTest> list);
+
+	List<TempTest> queryCourseScheduleInfo(@Param("userId") Integer userId, @Param("month") String month);
+}

+ 215 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempTest.java

@@ -0,0 +1,215 @@
+package com.ym.mec.biz.dal.entity;
+
+import java.math.BigDecimal;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(temp_test):
+ */
+public class TempTest {
+
+	/**  */
+	private Long id;
+	
+	/**  */
+	private String groupType;
+	
+	/**  */
+	private String musicGroupId;
+	
+	/** 班级编号 */
+	private Integer classGroupId;
+	
+	/** 上课日期 */
+	private java.util.Date classDate;
+	
+	/** 上课时间 */
+	private java.util.Date startClassTime;
+	
+	/** 结束时间 */
+	private java.util.Date endClassTime;
+	
+	/** 实际上课教师 */
+	private Integer actualTeacherId;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+	
+	/** 教学形式(线上、线下) */
+	private String teachMode;
+	
+	/** 课程类型(单技课、小班课、合奏课、综合课、练习课、启蒙课、集训课、VIP课、试听课) */
+	private String type;
+	
+	/** 课程名 */
+	private String name;
+	
+	/** 实际上课人数 */
+	private Integer studentNum;
+	
+	/**  */
+	private Integer schooleId;
+	
+	/** 备忘录 */
+	private String note;
+	
+	/** 课程分部 */
+	private Integer organId;
+	
+	/** 课酬 */
+	private BigDecimal salary;
+	
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setGroupType(String groupType){
+		this.groupType = groupType;
+	}
+	
+	public String getGroupType(){
+		return this.groupType;
+	}
+			
+	public void setMusicGroupId(String musicGroupId){
+		this.musicGroupId = musicGroupId;
+	}
+	
+	public String getMusicGroupId(){
+		return this.musicGroupId;
+	}
+			
+	public void setClassGroupId(Integer classGroupId){
+		this.classGroupId = classGroupId;
+	}
+	
+	public Integer getClassGroupId(){
+		return this.classGroupId;
+	}
+			
+	public void setClassDate(java.util.Date classDate){
+		this.classDate = classDate;
+	}
+	
+	public java.util.Date getClassDate(){
+		return this.classDate;
+	}
+			
+	public void setStartClassTime(java.util.Date startClassTime){
+		this.startClassTime = startClassTime;
+	}
+	
+	public java.util.Date getStartClassTime(){
+		return this.startClassTime;
+	}
+			
+	public void setEndClassTime(java.util.Date endClassTime){
+		this.endClassTime = endClassTime;
+	}
+	
+	public java.util.Date getEndClassTime(){
+		return this.endClassTime;
+	}
+			
+	public void setActualTeacherId(Integer actualTeacherId){
+		this.actualTeacherId = actualTeacherId;
+	}
+	
+	public Integer getActualTeacherId(){
+		return this.actualTeacherId;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	public void setTeachMode(String teachMode){
+		this.teachMode = teachMode;
+	}
+	
+	public String getTeachMode(){
+		return this.teachMode;
+	}
+			
+	public void setType(String type){
+		this.type = type;
+	}
+	
+	public String getType(){
+		return this.type;
+	}
+			
+	public void setName(String name){
+		this.name = name;
+	}
+	
+	public String getName(){
+		return this.name;
+	}
+			
+	public void setStudentNum(Integer studentNum){
+		this.studentNum = studentNum;
+	}
+	
+	public Integer getStudentNum(){
+		return this.studentNum;
+	}
+			
+	public void setSchooleId(Integer schooleId){
+		this.schooleId = schooleId;
+	}
+	
+	public Integer getSchooleId(){
+		return this.schooleId;
+	}
+			
+	public void setNote(String note){
+		this.note = note;
+	}
+	
+	public String getNote(){
+		return this.note;
+	}
+			
+	public void setOrganId(Integer organId){
+		this.organId = organId;
+	}
+	
+	public Integer getOrganId(){
+		return this.organId;
+	}
+			
+	public BigDecimal getSalary() {
+		return salary;
+	}
+
+	public void setSalary(BigDecimal salary) {
+		this.salary = salary;
+	}
+
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 26 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TempTestService.java

@@ -0,0 +1,26 @@
+package com.ym.mec.biz.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.ym.mec.biz.dal.entity.TempTest;
+import com.ym.mec.common.service.BaseService;
+
+public interface TempTestService extends BaseService<Long, TempTest> {
+
+	/**
+	 * 根据手机号码、身份证、姓名查询用户编号
+	 * @param mobile
+	 * @param idCard
+	 * @param realName
+	 * @return
+	 */
+	Integer queryUserId(String mobile, String idCard, String realName);
+	
+	/**
+	 * 业务逻辑处理
+	 * @param datas
+	 * @return
+	 */
+	boolean processBiz(List<Map<String, Object>> datas);
+}

+ 64 - 91
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java

@@ -204,10 +204,8 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             if (studentPaymentOrder != null && studentPaymentOrder.getStatus() == DealStatusEnum.ING) {
                 // 查询订单状态
                 PayStatus payStatus = studentPaymentOrderService.queryPayStatus(studentPaymentOrder);
-                if (payStatus != PayStatus.FAILED) {
-                    if (payStatus == PayStatus.SUCCESSED) {
-                        throw new BizException("订单已支付成功,请勿重复支付");
-                    }
+                if (payStatus == PayStatus.SUCCESSED) {
+                    throw new BizException("订单已支付成功,请勿重复支付");
                 }
                 studentPaymentOrder.setStatus(DealStatusEnum.CLOSE);
                 studentPaymentOrder.setUpdateTime(date);
@@ -481,27 +479,32 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             }
         }
         Date nowDate = new Date();
-        SubjectChange studentOriginal = getStudentOriginal(subjectChange.getStudentId(), subjectChange.getMusicGroupId());
-        if (studentOriginal != null) {
-            subjectChange.setOriginalOrderId(studentOriginal.getOrderId());
-            subjectChange.setOriginalCost(studentOriginal.getOriginalCost());
-            subjectChange.setOriginalAccessories(studentOriginal.getOriginalAccessories());
+        SubjectChange lastSubjectChange = getStudentOriginal(subjectChange.getStudentId(), subjectChange.getMusicGroupId());
+        if (lastSubjectChange != null) {
+            subjectChange.setEduTeacherId(lastSubjectChange.getEduTeacherId());
+            subjectChange.setOrganId(lastSubjectChange.getOrganId());
+            subjectChange.setOriginalOrderId(lastSubjectChange.getOrderId());
+            subjectChange.setOriginalSubjectId(lastSubjectChange.getChangeSubjectId());
+            subjectChange.setCooperationOrganId(lastSubjectChange.getCooperationOrganId());
+            subjectChange.setMusicGroupId(musicGroupId);
+            subjectChange.setOriginalCourseFee(subjectChange.getChangeCourseFee());
+            subjectChange.setOriginalMusical(lastSubjectChange.getChangeMusical());
+            subjectChange.setOriginalMusicalPrice(lastSubjectChange.getChangeMusicalPrice());
+            subjectChange.setOriginalAccessories(lastSubjectChange.getChangeAccessories());
+            subjectChange.setOriginalAccessoriesPrice(lastSubjectChange.getChangeAccessoriesPrice());
+            subjectChange.setOriginalCost(lastSubjectChange.getChangeCost());
             subjectChange.setOriginalKitGroupPurchaseType(
-                    studentOriginal.getOriginalKitGroupPurchaseType() == null ? KitGroupPurchaseTypeEnum.OWNED : studentOriginal.getOriginalKitGroupPurchaseType());
+                    lastSubjectChange.getOriginalKitGroupPurchaseType() == null ? KitGroupPurchaseTypeEnum.OWNED : lastSubjectChange.getOriginalKitGroupPurchaseType());
+        }
+        if (subjectChange.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.OWNED)) {
+            subjectChange.setChangeMusical(null);
         }
         subjectChange.setStatus(SubjectChangeStatusEnum.WAIT_PAY);
-        MusicGroup musicGroup = musicGroupDao.get(subjectChange.getMusicGroupId());
-        subjectChange.setOrganId(musicGroup.getOrganId());
-        subjectChange.setCooperationOrganId(musicGroup.getCooperationOrganId());
-        subjectChange.setEduTeacherId(musicGroup.getEducationalTeacherId());
         subjectChange.setCourseMargin(subjectChange.getChangeCourseFee().subtract(subjectChange.getOriginalCourseFee()));
         BigDecimal goodsMargin = subjectChange.getChangeMusicalPrice().add(subjectChange.getChangeAccessoriesPrice())
                 .subtract(subjectChange.getOriginalMusicalPrice()).subtract(subjectChange.getOriginalAccessoriesPrice());
         subjectChange.setGoodsMargin(goodsMargin);
         String goodsIds = "";
-        if (subjectChange.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.OWNED)) {
-            subjectChange.setChangeMusical(null);
-        }
         if (subjectChange.getChangeMusical() != null) {
             goodsIds += subjectChange.getChangeMusical() + "";
         }
@@ -515,10 +518,10 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         for (Goods goods : goodies) {
             goodsPrice = goodsPrice.add(goods.getDiscountPrice());
         }
+        subjectChange.setChangeCost(goodsPrice);
         
         Map<Integer,Goods> goodsMap = goodies.stream().collect(Collectors.toMap(Goods :: getId, t -> t));
         
-        subjectChange.setChangeCost(goodsPrice);
         subjectChange.setCostMargin(subjectChange.getChangeCost().subtract(subjectChange.getOriginalCost()));
         //差价 <= 0
         BigDecimal amountMargin = subjectChange.getGoodsMargin().add(subjectChange.getCourseMargin());
@@ -526,6 +529,8 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             subjectChange.setStatus(SubjectChangeStatusEnum.SUCCESSED);
             subjectChange.setSellAmount(BigDecimal.ZERO);
             subjectChange.setSellTime(nowDate);
+        }else{
+        	subjectChange.setSellAmount(amountMargin);
         }
         subjectChange.setCreateTime(nowDate);
         subjectChange.setUpdateTime(nowDate);
@@ -533,18 +538,6 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         subjectChangeDao.insert(subjectChange);
         //差价小于0退到余额
         if (amountMargin.compareTo(BigDecimal.ZERO) <= 0) {
-            /*sysUserCashAccountService.updateBalance(subjectChange.getStudentId(), amountMargin.negate(), PlatformCashAccountDetailTypeEnum.REFUNDS, "声部更换退还");
-            if (amountMargin.compareTo(BigDecimal.ZERO) < 0) {
-                SysUserCashAccountLog sysUserCashAccountLog = new SysUserCashAccountLog();
-                sysUserCashAccountLog.setUserId(subjectChange.getStudentId());
-                sysUserCashAccountLog.setGroupType(SUBJECT_CHANGE);
-                sysUserCashAccountLog.setOrganId(subjectChange.getOrganId());
-                sysUserCashAccountLog.setGroupId(subjectChange.getId().toString());
-                sysUserCashAccountLog.setAmount(amountMargin.negate());
-                sysUserCashAccountLog.setReturnFeeType(ReturnFeeEnum.SUBJECT_CHANGE);
-                sysUserCashAccountLog.setComment("声部更换退还");
-                sysUserCashAccountLogDao.insert(sysUserCashAccountLog);
-            }*/
             studentRegistrationService.changeStudentSubject(subjectChange.getStudentId(), subjectChange.getMusicGroupId(), subjectChange.getOriginalSubjectId(), subjectChange.getChangeSubjectId());
         }
 
@@ -776,48 +769,12 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
     public SubjectChange getStudentOriginal(Integer studentId, String musicGroupId) {
 
         //1、存在历史的更换
-        SubjectChange subjectChange = new SubjectChange();
         SubjectChange studentLastChange = subjectChangeDao.getStudentLastChange(studentId, musicGroupId);
         if (studentLastChange != null) {
-            throw new BizException("声部更换只能操作一次,请勿重复操作");
-        	/*List<Long> orderIdList = new ArrayList<Long>();
-        	orderIdList.add(studentLastChange.getOrderId().longValue());
-        	Set<Integer> refundSellOrderGoodsIds = getRefundGoodsId(orderIdList);
-            subjectChange.setStudentId(studentLastChange.getStudentId());
-            subjectChange.setOrderId(studentLastChange.getOrderId());
-            subjectChange.setCooperationOrganId(studentLastChange.getCooperationOrganId());
-            subjectChange.setMusicGroupId(studentLastChange.getMusicGroupId());
-            subjectChange.setOriginalCourseFee(studentLastChange.getChangeCourseFee());
-            subjectChange.setKitGroupPurchaseType(studentLastChange.getKitGroupPurchaseType());
-
-            BigDecimal originalCost = BigDecimal.ZERO;
-            if (studentLastChange.getChangeMusical() != null && !refundSellOrderGoodsIds.contains(studentLastChange.getChangeMusical())) {
-                subjectChange.setOriginalMusical(studentLastChange.getChangeMusical());
-                subjectChange.setOriginalMusicalGoods(goodsDao.get(studentLastChange.getChangeMusical()));
-                subjectChange.setOriginalMusicalPrice(studentLastChange.getChangeMusicalPrice());
-            }
-
-            if (StringUtils.isNotBlank(studentLastChange.getChangeAccessories())) {
-                String[] goodsIdArr = studentLastChange.getChangeAccessories().split(",");
-                String accessoriesId = "";
-                for (String goodsId : goodsIdArr) {
-                    if (refundSellOrderGoodsIds.contains(Integer.parseInt(goodsId))) {
-                        continue;
-                    }
-                    accessoriesId += StringUtils.isBlank(accessoriesId) ? goodsId : "," + goodsId;
-                }
-                if (StringUtils.isNotBlank(accessoriesId)) {
-                    subjectChange.setOriginalAccessories(accessoriesId);
-                    List<Goods> accessoriesGoods = goodsDao.findGoodsByIds(accessoriesId);
-                    subjectChange.setOriginalAccessoriesGoods(accessoriesGoods);
-                    BigDecimal price = accessoriesGoods.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-                    subjectChange.setOriginalAccessoriesPrice(price);
-                }
-            }
-            subjectChange.setOriginalCost(originalCost);
-            return subjectChange;*/
+        	return studentLastChange;
         }
         //2.1不存在历史的更换
+        SubjectChange subjectChange = new SubjectChange();
         StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(studentId, musicGroupId);
         if (studentRegistration == null) {
             throw new BizException("用户注册信息不存在");
@@ -843,6 +800,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 
         //查询乐器订单
         Long paymentOrderId = null;
+        BigDecimal organShareProfit = BigDecimal.ZERO;
 
         for (StudentPaymentOrderDetail detail : details) {
             if (detail.getType() == OrderDetailTypeEnum.ACCESSORIES || detail.getType() == OrderDetailTypeEnum.MUSICAL) {
@@ -850,6 +808,9 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                     paymentOrderId = detail.getPaymentOrderId();
                 }
             }
+            if(detail.getType() == OrderDetailTypeEnum.ORGAN_SHARE_PROFIT) {
+            	organShareProfit = organShareProfit.add(detail.getPrice());
+            }
         }
 
         Set<Integer> refundSellOrderGoodsIds = new HashSet<Integer>();
@@ -859,10 +820,23 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         subjectChange.setStudentId(studentId);
+        subjectChange.setEduTeacherId(musicGroup.getEducationalTeacherId());
         subjectChange.setOrganId(musicGroup.getOrganId());
         subjectChange.setCooperationOrganId(musicGroup.getCooperationOrganId());
         subjectChange.setMusicGroupId(musicGroupId);
-
+        subjectChange.setOriginalOrderId(null);
+        subjectChange.setOriginalSubjectId(null);
+        subjectChange.setOriginalCourseFee(null);
+        subjectChange.setOriginalMusical(null);
+        subjectChange.setOriginalMusicalPrice(null);
+        subjectChange.setOriginalAccessories(null);
+        subjectChange.setOriginalAccessoriesPrice(null);
+        subjectChange.setOriginalCost(null);
+        subjectChange.setOriginalKitGroupPurchaseType(null);
+        
+        subjectChange.setChangeSubjectId(studentRegistration.getActualSubjectId());
+        subjectChange.setChangeCourseFee(organShareProfit);
+        
         if (paymentOrderId != null) {
             subjectChange.setOrderId(paymentOrderId.intValue());
         }
@@ -871,14 +845,14 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         BigDecimal accessoriesPrice = BigDecimal.ZERO;
         for (StudentPaymentOrderDetail detail : details) {
             if (detail.getType().equals(OrderDetailTypeEnum.COURSE)) {
-                subjectChange.setOriginalCourseFee(detail.getPrice());
+                subjectChange.setChangeCourseFee(detail.getPrice());
             } else if (detail.getType().equals(OrderDetailTypeEnum.MUSICAL)) {
-                subjectChange.setOriginalKitGroupPurchaseType(detail.getKitGroupPurchaseType());
+                subjectChange.setKitGroupPurchaseType(detail.getKitGroupPurchaseType());
                 Integer goodsId = Integer.parseInt(detail.getGoodsIdList());
                 if (!refundSellOrderGoodsIds.contains(goodsId)) {
-                    subjectChange.setOriginalMusical(goodsId);
-                    subjectChange.setOriginalMusicalGoods(goodsDao.get(goodsId));
-                    subjectChange.setOriginalMusicalPrice(detail.getPrice());
+                    subjectChange.setChangeMusical(goodsId);
+                    //subjectChange.setOriginalMusicalGoods(goodsDao.get(goodsId));
+                    subjectChange.setChangeMusicalPrice(detail.getPrice());
                 }
             } else if (detail.getType().equals(OrderDetailTypeEnum.ACCESSORIES)) {
                 if (StringUtils.isNotBlank(detail.getGoodsIdList())) {
@@ -897,26 +871,25 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                 accessoriesId += StringUtils.isBlank(accessoriesId) ? goodsId : "," + goodsId;
             }
 
-            subjectChange.setOriginalAccessories(accessoriesId);
-
-            Map<Integer, Goods> goodsMap = goodsService.findGoodsByIds(accessoriesId).stream().collect(Collectors.toMap(Goods::getId, Goods -> Goods));
+            subjectChange.setChangeAccessories(accessoriesId);
+            subjectChange.setChangeAccessoriesPrice(accessoriesPrice);
 
-            String[] accessoriesIdList = StringUtils.split(accessoriesId, ',');
-
-            for (String s : accessoriesIdList) {
-                if (StringUtils.isBlank(s)) {
-                    continue;
-                }
-
-                if (subjectChange.getOriginalAccessoriesGoods() == null) {
-                    subjectChange.setOriginalAccessoriesGoods(new ArrayList<Goods>());
-                }
-                subjectChange.getOriginalAccessoriesGoods().add(goodsMap.get(Integer.parseInt(s)));
-            }
+        }
+        
+        String goodsIds = subjectChange.getChangeAccessories();
+        if(subjectChange.getChangeMusical() != null){
+        	goodsIds = goodsIds + "," + subjectChange.getChangeMusical();
+        }
 
-            //BigDecimal price = accessoriesGoods.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-            subjectChange.setOriginalAccessoriesPrice(accessoriesPrice);
+        BigDecimal goodsPrice = BigDecimal.ZERO;
+        List<Goods> goodies = goodsDao.findGoodsByIds(goodsIds);
+        for (Goods goods : goodies) {
+            goodsPrice = goodsPrice.add(goods.getDiscountPrice());
         }
+        subjectChange.setChangeCost(goodsPrice);
+        subjectChange.setGoodsMargin(subjectChange.getChangeMusicalPrice().add(subjectChange.getChangeAccessoriesPrice()));
+        subjectChange.setCostMargin(goodsPrice);
+        
         //2.2 计算销售成本
         BigDecimal orderSellCost = BigDecimal.ZERO;
         if (paymentOrderIdList != null && paymentOrderIdList.size() > 0) {

+ 227 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempTestServiceImpl.java

@@ -0,0 +1,227 @@
+package com.ym.mec.biz.service.impl;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dao.TempTestDao;
+import com.ym.mec.biz.dal.entity.TempTest;
+import com.ym.mec.biz.service.TempTestService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.date.DateUtil;
+
+@Service
+public class TempTestServiceImpl extends BaseServiceImpl<Long, TempTest> implements TempTestService {
+
+	@Autowired
+	private TempTestDao tempTestDao;
+
+	@Autowired
+	private TeacherDao teacherDao;
+
+	@Override
+	public BaseDAO<Long, TempTest> getDAO() {
+		return tempTestDao;
+	}
+
+	@Override
+	public Integer queryUserId(String mobile, String idCard, String realName) {
+		return null;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean processBiz(List<Map<String, Object>> datas) {
+
+		String mobile, idCard, realName, orderNo;
+		SysUser user = null;
+		Integer userId = null;
+		Date classDate = null;
+		
+		BigDecimal courseFee = null;
+		
+		List<UserSalary> userSalaryList = new ArrayList<UserSalary>();
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+		UserSalary userSalary = null;
+		
+		//数据整合
+		for (Map<String, Object> row : datas) {
+			orderNo = row.get("订单号").toString();
+			mobile = row.get("收款人手机号").toString();
+			idCard = row.get("收款人身份证").toString();
+			realName = row.get("收款人姓名").toString();
+			courseFee = new BigDecimal(row.get("收款金额").toString());
+			classDate = DateUtil.stringToDate(row.get("提交订单时间").toString(), "yyyy/MM/dd HH:mm:ss");
+			classDate = DateUtil.addMonths(classDate, -1);
+			
+			user = teacherDao.getUserWithIdCard(idCard);
+			
+			if (user == null) {
+				user = teacherDao.getUserWithRealName(realName);
+			}
+			if (user == null) {
+				user = teacherDao.getUserWithPhone(mobile);
+			}
+			
+			if(user == null){
+				System.out.println("订单号[" + orderNo + "]用户找不到");
+				continue;
+			}
+			
+			userSalary = new UserSalary(mobile, user, sdf.format(classDate), courseFee, orderNo);
+			userSalaryList.add(userSalary);
+		}
+		
+		Map<String,UserSalary> userSalaryMap = new HashMap<String, UserSalary>();
+		
+		for(UserSalary us : userSalaryList){
+			if(userSalaryMap.containsKey(us.getBatchNo())){
+				userSalary = userSalaryMap.get(us.getBatchNo());
+				userSalary.setCourseFee(userSalary.getCourseFee().add(us.getCourseFee()));
+
+				userSalaryMap.put(us.getBatchNo(), userSalary);
+			}else{
+				userSalaryMap.put(us.getBatchNo(), us);
+			}
+		}
+		
+		
+		
+		for (Entry<String, UserSalary> entry : userSalaryMap.entrySet()) {
+
+			userSalary = entry.getValue();
+			userId = userSalary.getUserId();
+			
+			//查询课程,优先vip课
+			List<TempTest> tempTestList = tempTestDao.queryCourseScheduleInfo(userId, userSalary.getClassMonth());
+			
+			tempTestList = extractCourseSchedule(tempTestList, userSalary.getCourseFee());
+			if(tempTestList.size() > 0){
+				try{
+					tempTestDao.batchInsert(tempTestList);
+				}catch(Exception e){
+					System.out.println("userId:" + userId + "  mobile:" + entry.getValue().getMobile() + " month:" + entry.getValue().getClassMonth() + " message:" + e.getMessage());
+				}
+			}
+			
+		}
+		return true;
+	}
+
+	private List<TempTest> extractCourseSchedule(List<TempTest> srcTempTestList, BigDecimal limitSalary){
+		
+		BigDecimal courseSalary = BigDecimal.ZERO;
+		List<TempTest> result = new ArrayList<TempTest>();
+		
+		for(TempTest tt : srcTempTestList){
+			if(tt.getSalary().compareTo(BigDecimal.ZERO) <= 0){
+				continue;
+			}
+			if(limitSalary.compareTo(courseSalary.add(tt.getSalary())) > 0){
+				courseSalary = courseSalary.add(tt.getSalary());
+				result.add(tt);
+			}else{
+				tt.setSalary(limitSalary.subtract(courseSalary));
+				result.add(tt);
+				break;
+			}
+		}
+		
+		return result;
+	}
+}
+
+class UserSalary{
+	
+	private Integer userId;
+	
+	private SysUser user;
+	
+	private String classMonth;
+	
+	private String orderNo;
+	
+	private BigDecimal courseFee;
+	
+	private String batchNo;
+	
+	private String mobile;
+	
+	public UserSalary(String mobile, SysUser user, String classMonth,BigDecimal courseFee,String orderNo) {
+		this.mobile = mobile;
+		this.user = user;
+		this.classMonth = classMonth;
+		this.courseFee = courseFee;
+		this.orderNo = orderNo;
+		this.batchNo = user.getId() + "#" + classMonth;
+		this.userId = user.getId();
+	}
+
+	public Integer getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+
+	public SysUser getUser() {
+		return user;
+	}
+
+	public void setUser(SysUser user) {
+		this.user = user;
+	}
+
+	public String getClassMonth() {
+		return classMonth;
+	}
+
+	public void setClassMonth(String classMonth) {
+		this.classMonth = classMonth;
+	}
+
+	public String getOrderNo() {
+		return orderNo;
+	}
+
+	public void setOrderNo(String orderNo) {
+		this.orderNo = orderNo;
+	}
+
+	public BigDecimal getCourseFee() {
+		return courseFee;
+	}
+
+	public void setCourseFee(BigDecimal courseFee) {
+		this.courseFee = courseFee;
+	}
+
+	public String getBatchNo() {
+		return batchNo;
+	}
+
+	public void setBatchNo(String batchNo) {
+		this.batchNo = batchNo;
+	}
+
+	public String getMobile() {
+		return mobile;
+	}
+
+	public void setMobile(String mobile) {
+		this.mobile = mobile;
+	}
+}

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

@@ -1062,6 +1062,18 @@
         WHERE su.phone_ = #{phone} LIMIT 1
     </select>
 
+    <select id="getUserWithIdCard" resultMap="SysUser">
+        SELECT su.*
+        FROM sys_user su
+        WHERE su.id_card_no_ = #{idCard} LIMIT 1
+    </select>
+
+    <select id="getUserWithRealName" resultMap="SysUser">
+        SELECT su.*
+        FROM sys_user su
+        WHERE su.real_name_ = #{realName} LIMIT 1
+    </select>
+
     <select id="queryTeacherBaseInfo"  resultMap="com.ym.mec.biz.dal.dao.MusicGroupDao.BasicUserDto">
         SELECT
         CASE WHEN su.user_type_ LIKE '%TEACHER%' OR su.user_type_ LIKE '%SYSTEM%' THEN su.real_name_ ELSE su.username_ END username_,

+ 145 - 0
mec-biz/src/main/resources/config/mybatis/TempTestMapper.xml

@@ -0,0 +1,145 @@
+<?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.ym.mec.biz.dal.dao.TempTestDao">
+
+	<resultMap type="com.ym.mec.biz.dal.entity.TempTest" id="TempTest">
+		<result column="id_" property="id" />
+		<result column="group_type_" property="groupType" />
+		<result column="music_group_id_" property="musicGroupId" />
+		<result column="class_group_id_" property="classGroupId" />
+		<result column="class_date_" property="classDate" />
+		<result column="start_class_time_" property="startClassTime" />
+		<result column="end_class_time_" property="endClassTime" />
+		<result column="actual_teacher_id_" property="actualTeacherId" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+		<result column="teach_mode_" property="teachMode" />
+		<result column="type_" property="type" />
+		<result column="name_" property="name" />
+		<result column="student_num_" property="studentNum" />
+		<result column="schoole_id_" property="schooleId" />
+		<result column="note_" property="note" />
+		<result column="organ_id_" property="organId" />
+		<result column="salary_" property="salary" />
+	</resultMap>
+
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="TempTest">
+		SELECT * FROM temp_test
+		WHERE id_ = #{id}
+	</select>
+
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="TempTest">
+		SELECT * FROM temp_test ORDER BY
+		id_
+	</select>
+
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.TempTest"
+		useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
+			AS ID FROM DUAL </selectKey> -->
+		INSERT INTO temp_test
+		(id_,group_type_,music_group_id_,class_group_id_,class_date_,start_class_time_,end_class_time_,actual_teacher_id_,create_time_,update_time_,teach_mode_,type_,name_,student_num_,schoole_id_,note_,organ_id_,salary_)
+		VALUES(#{id},#{groupType},#{musicGroupId},#{classGroupId},#{classDate},#{startClassTime},#{endClassTime},#{actualTeacherId},#{createTime},#{updateTime},#{teachMode},#{type},#{name},#{studentNum},#{schooleId},#{note},#{organId},#{salary})
+	</insert>
+	
+	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.TempTest">
+		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
+			AS ID FROM DUAL </selectKey> -->
+		INSERT INTO temp_test
+		(id_,group_type_,music_group_id_,class_group_id_,class_date_,start_class_time_,end_class_time_,actual_teacher_id_,create_time_,update_time_,teach_mode_,type_,name_,student_num_,schoole_id_,note_,organ_id_,salary_)
+		VALUES
+        <foreach collection="list" item="item" separator=",">
+		(#{item.id},#{item.groupType},#{item.musicGroupId},#{item.classGroupId},#{item.classDate},#{item.startClassTime},#{item.endClassTime},#{item.actualTeacherId},#{item.createTime},#{item.updateTime},#{item.teachMode},#{item.type},#{item.name},#{item.studentNum},#{item.schooleId},#{item.note},#{item.organId},#{item.salary})
+        </foreach>
+	</insert>
+
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.TempTest">
+		UPDATE temp_test
+		<set>
+			<if test="studentNum != null">
+				student_num_ = #{studentNum},
+			</if>
+			<if test="organId != null">
+				organ_id_ = #{organId},
+			</if>
+			<if test="id != null">
+				id_ = #{id},
+			</if>
+			<if test="classGroupId != null">
+				class_group_id_ = #{classGroupId},
+			</if>
+			<if test="teachMode != null">
+				teach_mode_ = #{teachMode},
+			</if>
+			<if test="createTime != null">
+				create_time_ = #{createTime},
+			</if>
+			<if test="name != null">
+				name_ = #{name},
+			</if>
+			<if test="note != null">
+				note_ = #{note},
+			</if>
+			<if test="classDate != null">
+				class_date_ = #{classDate},
+			</if>
+			<if test="endClassTime != null">
+				end_class_time_ = #{endClassTime},
+			</if>
+			<if test="actualTeacherId != null">
+				actual_teacher_id_ = #{actualTeacherId},
+			</if>
+			<if test="startClassTime != null">
+				start_class_time_ = #{startClassTime},
+			</if>
+			<if test="updateTime != null">
+				update_time_ = #{updateTime},
+			</if>
+			<if test="groupType != null">
+				group_type_ = #{groupType},
+			</if>
+			<if test="schooleId != null">
+				schoole_id_ = #{schooleId},
+			</if>
+			<if test="musicGroupId != null">
+				music_group_id_ = #{musicGroupId},
+			</if>
+			<if test="type != null">
+				type_ = #{type},
+			</if>
+			<if test="salary != null">
+				salary_ = #{salary},
+			</if>
+		</set>
+		WHERE id_ = #{id}
+	</update>
+
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete">
+		DELETE FROM temp_test WHERE id_ = #{id}
+	</delete>
+
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="TempTest" parameterType="map">
+		SELECT * FROM temp_test ORDER BY id_
+		<include refid="global.limit" />
+	</select>
+
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM temp_test
+	</select>
+	
+	<select id="queryCourseScheduleInfo" resultMap="TempTest" parameterType="map">
+		SELECT cs.id_,cs.group_type_,cs.music_group_id_,cs.class_group_id_,cs.class_date_,cs.start_class_time_,cs.end_class_time_,csts.user_id_ actual_teacher_id_,
+		cs.create_time_,cs.update_time_,cs.teach_mode_,cs.type_,cs.name_,cs.student_num_,cs.schoole_id_,cs.note_,cs.organ_id_,csts.expect_salary_ salary_ 
+		FROM course_schedule_teacher_salary csts left join course_schedule cs on csts.course_schedule_id_ = cs.id_
+		where csts.user_id_ = #{userId} and cs.class_date_ like concat(#{month},'%') and cs.del_flag_ = 0
+		order by cs.group_type_ desc
+	</select>
+</mapper>

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java

@@ -41,7 +41,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                         "/tenantInfo/info/*", "/tenantInfo/checkInfo/*", "/tenantInfo/pay/*","/tenantInfo/testCheck", "/tenantInfo/getContract/*",
                         "/tenantPreJoin/add","/imLiveBroadcastRoom/queryRoomInfo","/imLiveBroadcastRoom/test",
                         "/eduOrganization/queryAllOrgan","/eduOrganization/getOrganCooperation","/import/oaUploadFile",
-                        "/tenantInfo/callback","/adapay/callback"
+                        "/tenantInfo/callback","/adapay/callback","/temp/*"
                 )
                 .permitAll().anyRequest().authenticated().and().httpBasic();
     }

+ 64 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TempController.java

@@ -0,0 +1,64 @@
+package com.ym.mec.web.controller;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.ym.mec.biz.service.TempTestService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.util.excel.POIUtil;
+
+@RequestMapping("temp")
+@RestController
+public class TempController extends BaseController {
+	
+	@Autowired
+	private TempTestService tempTestService;
+
+	@PostMapping(value = "/queryOrganMusicInfos")
+	public Object queryOrganMusicInfos(@RequestParam("multipartFile") MultipartFile multipartFile) {
+
+		File file = new File(multipartFile.getOriginalFilename());
+		OutputStream out = null;
+		try {
+			out = new FileOutputStream(file);
+		    byte[] ss = multipartFile.getBytes();
+		    for(int i = 0; i < ss.length; i++){
+		        out.write(ss[i]);
+		    }
+		    
+			//FileUtils.write(file, IOUtils.toString(multipartFile.getBytes()), "utf-8");
+
+			Map<String, List<Map<String, Object>>> sheetMap = POIUtil.importExcel(file, 2);
+			
+			tempTestService.processBiz(sheetMap.get("Sheet1"));
+
+		} catch (IOException e) {
+			e.printStackTrace();
+		} finally {
+			FileUtils.deleteQuietly(file);
+			if(out != null){
+				try {
+					out.close();
+				} catch (IOException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+		}
+
+		return succeed();
+	}
+}