浏览代码

Merge branch 'master' of http://git.dayaedu.com/yonge/mec into master_teacherSalary_2020-12-11

zouxuan 4 年之前
父节点
当前提交
a775e151e7
共有 22 个文件被更改,包括 524 次插入51 次删除
  1. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DataChangeLogDao.java
  2. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java
  3. 80 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DataChangeLog.java
  4. 42 36
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupActivity.java
  5. 35 0
      mec-biz/src/main/java/com/ym/mec/biz/event/EntityChangeEvent.java
  6. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/event/listener/EntityChangeListener.java
  7. 33 0
      mec-biz/src/main/java/com/ym/mec/biz/event/source/EntityChangeEventSource.java
  8. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/DataChangeLogService.java
  9. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/service/LogService.java
  10. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupActivityService.java
  11. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DataChangeLogServiceImpl.java
  12. 16 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java
  13. 88 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/LogServiceImpl.java
  14. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  15. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentRouteOrderServiceImpl.java
  16. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  17. 53 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java
  18. 67 0
      mec-biz/src/main/resources/config/mybatis/DataChangeLogMapper.xml
  19. 5 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/VipGroupActivityController.java
  20. 4 0
      mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentRouteOrderController.java
  21. 5 1
      mec-web/src/main/java/com/ym/mec/web/controller/VipGroupActivityController.java
  22. 二进制
      mec-web/src/main/resources/excelTemplate/财务支出导入模板.xls

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

@@ -0,0 +1,9 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.DataChangeLog;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface DataChangeLogDao extends BaseDAO<Long, DataChangeLog> {
+
+	
+}

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

@@ -27,8 +27,8 @@ public class CourseSchedule {
 
 	public enum CourseScheduleType implements BaseEnum<String, CourseScheduleType> {
 
-		SINGLE("SINGLE", "单技课"), MIX("MIX", "合奏课"), HIGH("HIGH", "小班课"), VIP("VIP", "vip课"), DEMO("DEMO", "试听课"), COMPREHENSIVE("COMPREHENSIVE", "综合课"), PRACTICE(
-				"PRACTICE", "网管课"), ENLIGHTENMENT("ENLIGHTENMENT", "启蒙课"), TRAINING_SINGLE("TRAINING_SINGLE", "集训单技课"), TRAINING_MIX("TRAINING_MIX", "集训合奏课"), CLASSROOM(
+		SINGLE("SINGLE", "声部课"), MIX("MIX", "合奏课"), HIGH("HIGH", "小班课"), VIP("VIP", "vip课"), DEMO("DEMO", "试听课"), COMPREHENSIVE("COMPREHENSIVE", "综合课"), PRACTICE(
+				"PRACTICE", "网管课"), ENLIGHTENMENT("ENLIGHTENMENT", "启蒙课"), TRAINING_SINGLE("TRAINING_SINGLE", "集训声部课"), TRAINING_MIX("TRAINING_MIX", "集训合奏课"), CLASSROOM(
 				"CLASSROOM", "课堂课"),COMM("COMM","对外课程"),HIGH_ONLINE("HIGH_ONLINE","网络基础训练课"),MUSIC_NETWORK("MUSIC_NETWORK","乐团网管课");
 
 		private String code;

+ 80 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DataChangeLog.java

@@ -0,0 +1,80 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(data_change_log):
+ */
+public class DataChangeLog {
+
+	/**  */
+	private Long id;
+
+	private Long dataId;
+	
+	/** 操作人编号 */
+	private Integer operatorId;
+	
+	/** 变更信息 */
+	private String changeInfo;
+	
+	/** 操作时间 */
+	private java.util.Date createTime;
+	
+	/** 类型名称 */
+	private String className;
+	
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+
+	public Long getDataId() {
+		return dataId;
+	}
+
+	public void setDataId(Long dataId) {
+		this.dataId = dataId;
+	}
+
+	public void setOperatorId(Integer operatorId){
+		this.operatorId = operatorId;
+	}
+	
+	public Integer getOperatorId(){
+		return this.operatorId;
+	}
+			
+	public void setChangeInfo(String changeInfo){
+		this.changeInfo = changeInfo;
+	}
+	
+	public String getChangeInfo(){
+		return this.changeInfo;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setClassName(String className){
+		this.className = className;
+	}
+	
+	public String getClassName(){
+		return this.className;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 42 - 36
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupActivity.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.entity;
 
 import com.ym.mec.biz.dal.enums.VipGroupActivityTypeEnum;
+import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 /**
@@ -8,70 +9,75 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
  */
 public class VipGroupActivity {
 
-	/**  */
+	@ApiModelProperty(value = "活动编号")
 	private Integer id;
-	
-	/**  */
+
+	@ApiModelProperty(value = "活动名称")
 	private String name;
-	
-	/**  */
+
+	@ApiModelProperty(value = "活动描述\n")
 	private String description;
-	
-	/**  */
+
+	@ApiModelProperty(value = "课程形式")
 	private String vipGroupCategoryIdList;
-	
-	/**  */
+
+	@ApiModelProperty(value = "活动开始时间")
 	private java.util.Date startTime;
-	
-	/**  */
+
+	@ApiModelProperty(value = "活动结束时间")
 	private java.util.Date endTime;
-	
-	/**  */
+
+	@ApiModelProperty(value = "适用分部")
 	private String organId;
-	
-	/**  */
+
+	@ApiModelProperty(value = "可排课开始时间")
 	private java.util.Date coursesStartTime;
-	
-	/**  */
+
+	@ApiModelProperty(value = "可排课截至时间")
 	private java.util.Date coursesEndTime;
-	
-	/** 活动类型(基础活动、折扣、赠送课时) */
+
+	@ApiModelProperty(value = "活动类型(基础活动、折扣、赠送课时)")
 	private VipGroupActivityTypeEnum type;
-	
-	/**  */
+
+	@ApiModelProperty(value = "活动变量1")
 	private String attribute1;
-	
-	/**  */
+
+	@ApiModelProperty(value = "活动变量2")
 	private String attribute2;
-	
-	/**  */
+
+	@ApiModelProperty(value = "活动变量3")
 	private String attribute3;
-	
-	/** 薪水只读标识(1-只读 0-可写) */
+
+	@ApiModelProperty(value = "薪水只读标识(1-只读 0-可写)")
 	private String salaryReadonlyFlag;
 
+	@ApiModelProperty(value = "单节课程费用只读标识")
 	private String paymentReadonlyFlag;
-	
-	/** 赠送课时支付薪水标识(1-计课酬  0-不计课酬) */
+
+	@ApiModelProperty(value = "赠送课时支付薪水标识(1-计课酬  0-不计课酬)")
 	private String giveClassPaySalaryFlag;
-	
-	/**  */
+
+	@ApiModelProperty(value = "创建时间")
 	private java.util.Date createTime;
-	
-	/**  */
+
+	@ApiModelProperty(value = "更新时间")
 	private java.util.Date updateTime;
-	
-	/** 结算标准 */
+
+	@ApiModelProperty(value = "结算标准")
 	private String salarySettlementJson;
 
 	private String vipGroupCategoryNames;
-	
+
+	@ApiModelProperty(value = "是否删除")
 	private Boolean delFlag = false;
 
+	@ApiModelProperty(value = "是否可用")
 	private Integer enable;
 
+	@ApiModelProperty(value = "线上课是否参与梯度奖励")
 	private Integer onlineClassJoinGradientRewards;
 
+	@ApiModelProperty(value = "线下课是否参与梯度奖励")
 	private Integer offlineClassJoinGradientRewards;
 
 	public Integer getOnlineClassJoinGradientRewards() {

+ 35 - 0
mec-biz/src/main/java/com/ym/mec/biz/event/EntityChangeEvent.java

@@ -0,0 +1,35 @@
+package com.ym.mec.biz.event;
+
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * @Author qnc99
+ * @Date 2020/12/15 0015
+ */
+public class EntityChangeEvent extends ApplicationEvent {
+
+    private Integer operatorId;
+
+    private Object oldEntity;
+
+    private Object newEntity;
+
+    public EntityChangeEvent(Object source, Object oldEntity, Object newEntity, Integer operatorId) {
+        super(source);
+        this.oldEntity = oldEntity;
+        this.newEntity = newEntity;
+        this.operatorId = operatorId;
+    }
+
+    public Object getOldEntity() {
+        return oldEntity;
+    }
+
+    public Object getNewEntity() {
+        return newEntity;
+    }
+
+    public Integer getOperatorId() {
+        return operatorId;
+    }
+}

+ 26 - 0
mec-biz/src/main/java/com/ym/mec/biz/event/listener/EntityChangeListener.java

@@ -0,0 +1,26 @@
+package com.ym.mec.biz.event.listener;
+
+import com.ym.mec.biz.event.EntityChangeEvent;
+import com.ym.mec.biz.service.LogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Author qnc99
+ * @Date 2020/12/15 0015
+ */
+@Component
+public class EntityChangeListener {
+
+    @Autowired
+    private LogService logService;
+
+    @Async
+    @EventListener
+    public void onEntityChangedEvent(EntityChangeEvent entityChangeEvent) {
+        logService.entityVariationAnalysis(entityChangeEvent.getOldEntity(), entityChangeEvent.getNewEntity(), entityChangeEvent.getOperatorId());
+    }
+
+}

+ 33 - 0
mec-biz/src/main/java/com/ym/mec/biz/event/source/EntityChangeEventSource.java

@@ -0,0 +1,33 @@
+package com.ym.mec.biz.event.source;
+
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.event.EntityChangeEvent;
+import com.ym.mec.biz.event.StudentCourseChangeEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * @Author qnc99
+ * @Date 2020/12/15 0015
+ */
+@Service
+public class EntityChangeEventSource {
+    private Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    @Resource
+    private ApplicationContext applicationContext;
+
+    /**
+     * @describe 数据变更事件源
+     * @author Joburgess
+     * @date 2020.09.24
+     * @return void
+     */
+    public void entityChange(Object oldEntity, Object newEntity, Integer operatorId) {
+        applicationContext.publishEvent(new EntityChangeEvent(this, oldEntity, newEntity, operatorId));
+    }
+}

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/DataChangeLogService.java

@@ -0,0 +1,8 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.DataChangeLog;
+import com.ym.mec.common.service.BaseService;
+
+public interface DataChangeLogService extends BaseService<Long, DataChangeLog> {
+
+}

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/LogService.java

@@ -0,0 +1,19 @@
+package com.ym.mec.biz.service;
+
+/**
+ * @Author qnc99
+ * @Date 2020/12/15 0015
+ **/
+public interface LogService {
+
+    /**
+     * @describe 实体类变动分析
+     * @author qnc99
+     * @date 2020/12/15 0015
+     * @param oldEntity:
+     * @param newEntity:
+     * @return void
+     */
+    void entityVariationAnalysis(Object oldEntity, Object newEntity, Integer operatorId);
+
+}

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

@@ -20,7 +20,7 @@ public interface VipGroupActivityService extends BaseService<Integer, VipGroupAc
      * @Date: 2019/10/1
      * 修改vip课活动方案
      */
-    void updateVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto);
+    void updateVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto, Integer operatorId);
 
     /**
      * @Author: Joburgess

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DataChangeLogServiceImpl.java

@@ -0,0 +1,22 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.ym.mec.biz.dal.entity.DataChangeLog;
+import com.ym.mec.biz.service.DataChangeLogService;
+import com.ym.mec.biz.dal.dao.DataChangeLogDao;
+import org.springframework.stereotype.Service;
+
+@Service
+public class DataChangeLogServiceImpl extends BaseServiceImpl<Long, DataChangeLog> implements DataChangeLogService {
+	
+	@Autowired
+	private DataChangeLogDao dataChangeLogDao;
+
+	@Override
+	public BaseDAO<Long, DataChangeLog> getDAO() {
+		return dataChangeLogDao;
+	}
+	
+}

+ 16 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java

@@ -7,7 +7,8 @@ import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.DegreeRegistrationActivityDto;
 import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -19,9 +20,6 @@ import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.ym.mec.biz.dal.dto.PageInfoDegree;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.page.DegreeQueryInfo;
 import com.ym.mec.biz.service.DegreeRegistrationService;
 import com.ym.mec.biz.service.PayService;
@@ -66,6 +64,9 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
     @Autowired
     private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
 
+    @Autowired
+    private SysUserCashAccountService sysUserCashAccountService;
+
     @Override
     public BaseDAO<Integer, DegreeRegistration> getDAO() {
         return degreeRegistrationDao;
@@ -345,6 +346,17 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
             throw new BizException("订单更新失败");
         }
 
+        if(DealStatusEnum.SUCCESS.equals(studentPaymentOrder.getStatus())){
+            List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailDao.getOrderDetail(studentPaymentOrder.getId());
+            BigDecimal additionCoursePrice = new BigDecimal(0);
+            if(!CollectionUtils.isEmpty(orderDetails)){
+                additionCoursePrice = orderDetails.stream().map(StudentPaymentOrderDetail::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+            if(additionCoursePrice.compareTo(BigDecimal.ZERO)>0){
+                sysUserCashAccountService.appendCourseBalance(studentPaymentOrder.getUserId(), additionCoursePrice, PlatformCashAccountDetailTypeEnum.RECHARGE, "2020考级报名");
+            }
+        }
+
         if(Objects.isNull(studentPaymentOrder.getClassGroupId())){
             return true;
         }

+ 88 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/LogServiceImpl.java

@@ -0,0 +1,88 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.DataChangeLogDao;
+import com.ym.mec.biz.dal.dto.VipGroupActivityAddDto;
+import com.ym.mec.biz.dal.entity.DataChangeLog;
+import com.ym.mec.biz.dal.enums.VipGroupActivityTypeEnum;
+import com.ym.mec.biz.service.DataChangeLogService;
+import com.ym.mec.biz.service.LogService;
+import com.ym.mec.util.date.DateUtil;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.lang.reflect.Field;
+import java.util.*;
+
+/**
+ * @Author qnc99
+ * @Date 2020/12/15 0015
+ */
+@Service
+public class LogServiceImpl implements LogService {
+
+    @Autowired
+    private DataChangeLogDao dataChangeLogDao;
+
+    private Field[] getAllFields(Object object){
+        Class clazz = object.getClass();
+        List<Field> fieldList = new ArrayList<>();
+        while (clazz != null){
+            fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
+            clazz = clazz.getSuperclass();
+        }
+        Field[] fields = new Field[fieldList.size()];
+        fieldList.toArray(fields);
+        return fields;
+    }
+
+    @Override
+    public void entityVariationAnalysis(Object oldEntity, Object newEntity, Integer operatorId) {
+        List<String> changes = new ArrayList<>();
+        Field[] allFields = getAllFields(oldEntity);
+        Long dataId = Long.valueOf(0);
+        for (Field field : allFields) {
+            if(field.getName().equals("createTime")||field.getName().equals("updateTime")){
+                continue;
+            }
+            ApiModelProperty annotation = field.getAnnotation(ApiModelProperty.class);
+            if(Objects.isNull(annotation)){
+                continue;
+            }
+            field.setAccessible(true);
+            try {
+                if(field.getName().equals("id")){
+                    dataId = Long.valueOf(String.valueOf(field.get(oldEntity)));
+                }
+                String oldValue = "", newValue = "";
+                if(field.getType().equals(Date.class)){
+                    if(Objects.nonNull(field.get(oldEntity))){
+                        oldValue = DateUtil.dateToString((Date) field.get(oldEntity), DateUtil.EXPANDED_DATE_TIME_FORMAT);
+                    }
+                    if(Objects.nonNull(field.get(newEntity))){
+                        newValue = DateUtil.dateToString((Date) field.get(newEntity), DateUtil.EXPANDED_DATE_TIME_FORMAT);
+                    }
+                }else{
+                    oldValue = String.valueOf(field.get(oldEntity));
+                    newValue = String.valueOf(field.get(newEntity));
+                }
+                if(!oldValue.equals(newValue)){
+                    changes.add(annotation.value() + ":" + oldValue + " -> " + newValue);
+                }
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+            }
+        }
+        if(CollectionUtils.isEmpty(changes)){
+            return;
+        }
+        DataChangeLog dataChangeLog = new DataChangeLog();
+        dataChangeLog.setClassName(oldEntity.getClass().getName());
+        dataChangeLog.setDataId(dataId);
+        dataChangeLog.setChangeInfo(StringUtils.join(changes, ";"));
+        dataChangeLog.setOperatorId(operatorId);
+        dataChangeLogDao.insert(dataChangeLog);
+    }
+}

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

@@ -23,6 +23,7 @@ import com.ym.mec.thirdparty.yqpay.YqPayFeignService;
 import com.ym.mec.thirdparty.yqpay.YqPayUtil;
 import com.ym.mec.util.collection.MapUtil;
 
+import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -185,7 +186,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                 rpMap.put("tradeState", "0");
             }
 
-            if (status.equals("succeeded")) {
+            if (status.equals("succeeded") ||
+                    (status.equals("failed") && payingOrder.getCreateTime().before(DateUtil.addMinutes(new Date(), -35)))) {
                 try {
                     updateOrder(rpMap); //更新订单
                 } catch (Exception e) {

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentRouteOrderServiceImpl.java

@@ -370,6 +370,7 @@ public class StudentPaymentRouteOrderServiceImpl extends BaseServiceImpl<Long, S
             if (list != null && list.size() > 0) {
                 throw new BizException("导入数据错误  重复的交易流水号:{}", list.get(0));
             }
+            Date nowDate = new Date();
 
             List<Object> calenderIds = sheet.stream().map(m -> m.get("缴费单号")).collect(Collectors.toList());
             List<MusicGroupPaymentCalender> calenders = musicGroupPaymentCalenderDao.getPaymentCalenderWithCalenderIdsAndPayUserType(calenderIds, MusicGroupPaymentCalender.PayUserType.SCHOOL);
@@ -455,6 +456,9 @@ public class StudentPaymentRouteOrderServiceImpl extends BaseServiceImpl<Long, S
                         if (date == null) {
                             sb.append("第" + rowNum).append("行数据导入失败:交易日期格式错误;");
                             continue valueIsNull;
+                        } else if (date.after(nowDate)) {
+                            sb.append("第" + rowNum).append("行数据导入失败:交易日期不能大于当前日期");
+                            continue valueIsNull;
                         } else {
                             objectMap.put(columnValue, DateUtil.format(date, DateUtil.DEFAULT_PATTERN));
                         }

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -1431,7 +1431,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     public BigDecimal updateUserSurplusCourseFee(Integer userId, String musicGroupId, BigDecimal amount, String memo, Integer operatorId) {
         StudentRegistration studentRegistration = studentRegistrationDao.lockWithUserAndMusic(userId, musicGroupId);
         if (Objects.isNull(studentRegistration)) {
-            throw new BizException("学员注册信息不存在");
+            LOGGER.error("学员可用排课余额更新失败{}:学员注册信息不存在", amount);
+            return BigDecimal.ZERO;
         }
 
         if (BigDecimal.ZERO.compareTo(amount) > 0 && amount.abs().compareTo(studentRegistration.getSurplusCourseFee()) > 0) {

+ 53 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java

@@ -7,6 +7,7 @@ import com.ym.mec.biz.dal.dto.VipGroupActivityAddDto;
 import com.ym.mec.biz.dal.dto.VipGroupSalarySettlementDto;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
+import com.ym.mec.biz.event.source.EntityChangeEventSource;
 import com.ym.mec.biz.service.VipGroupActivityService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -14,7 +15,9 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
@@ -25,6 +28,8 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 	private VipGroupActivityDao vipGroupActivityDao;
 	@Autowired
 	private TeacherDao teacherDao;
+	@Autowired
+	private EntityChangeEventSource entityChangeEventSource;
 
 	@Override
 	public BaseDAO<Integer, VipGroupActivity> getDAO() {
@@ -77,21 +82,65 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 			}
 		}
 
-
 		vipGroupActivityAddDto.setSalarySettlementJson(JSON.toJSONString(vipGroupActivityAddDto.getVipGroupSalarySettlement()));
 		super.insert(vipGroupActivityAddDto);
 	}
 
 	@Override
-	public void updateVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto) {
-		if(Objects.isNull(vipGroupActivityAddDto.getId())){
-			throw new BizException("请指定活动编号!");
+	@Transactional(rollbackFor = Exception.class)
+	public void updateVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto, Integer operatorId) {
+		VipGroupActivity oldVipGroupActivity = vipGroupActivityDao.get(vipGroupActivityAddDto.getId());
+		if(Objects.isNull(oldVipGroupActivity)){
+			throw new BizException("活动不存在!");
 		}
 		if(Objects.isNull(vipGroupActivityAddDto.getOrganId())){
 			throw new BizException("请指定部门!");
 		}
+
+		if(Objects.nonNull(vipGroupActivityAddDto.getVipGroupSalarySettlement().getOnlineSalarySettlement())){
+			switch (vipGroupActivityAddDto.getVipGroupSalarySettlement().getOnlineSalarySettlement().getSalarySettlementType()){
+				case TEACHER_DEFAULT:
+					vipGroupActivityAddDto.getVipGroupSalarySettlement().getOnlineSalarySettlement().setSettlementValue(null);
+					break;
+				case RATIO_DISCOUNT:
+					if(Objects.isNull(vipGroupActivityAddDto.getVipGroupSalarySettlement().getOnlineSalarySettlement().getSettlementValue())){
+						throw new BizException("请指定线下课单价折算比例");
+					}
+					break;
+				case FIXED_SALARY:
+					if(Objects.isNull(vipGroupActivityAddDto.getVipGroupSalarySettlement().getOnlineSalarySettlement().getSettlementValue())){
+						throw new BizException("请指定线下课固定课酬");
+					}
+					break;
+				default:
+					throw new BizException("未指定课酬结算标准!");
+			}
+		}
+
+		if(Objects.nonNull(vipGroupActivityAddDto.getVipGroupSalarySettlement().getOfflineSalarySettlement())){
+			switch (vipGroupActivityAddDto.getVipGroupSalarySettlement().getOfflineSalarySettlement().getSalarySettlementType()){
+				case TEACHER_DEFAULT:
+					vipGroupActivityAddDto.getVipGroupSalarySettlement().getOfflineSalarySettlement().setSettlementValue(null);
+					break;
+				case RATIO_DISCOUNT:
+					if(Objects.isNull(vipGroupActivityAddDto.getVipGroupSalarySettlement().getOfflineSalarySettlement().getSettlementValue())){
+						throw new BizException("请指定线线上课单价折算比例");
+					}
+					break;
+				case FIXED_SALARY:
+					if(Objects.isNull(vipGroupActivityAddDto.getVipGroupSalarySettlement().getOfflineSalarySettlement().getSettlementValue())){
+						throw new BizException("请指定线上课固定课酬");
+					}
+					break;
+				default:
+					throw new BizException("未指定课酬结算标准!");
+			}
+		}
+
 		vipGroupActivityAddDto.setSalarySettlementJson(JSON.toJSONString(vipGroupActivityAddDto.getVipGroupSalarySettlement()));
+
 		super.update(vipGroupActivityAddDto);
+		entityChangeEventSource.entityChange(oldVipGroupActivity, vipGroupActivityAddDto, operatorId);
 	}
 
 	@Override

+ 67 - 0
mec-biz/src/main/resources/config/mybatis/DataChangeLogMapper.xml

@@ -0,0 +1,67 @@
+<?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.DataChangeLogDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.DataChangeLog" id="DataChangeLog">
+		<result column="id_" property="id" />
+		<result column="data_id_" property="dataId" />
+		<result column="operator_id_" property="operatorId" />
+		<result column="change_info_" property="changeInfo" />
+		<result column="create_time_" property="createTime" />
+		<result column="class_name_" property="className" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="DataChangeLog" >
+		SELECT * FROM data_change_log WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="DataChangeLog">
+		SELECT * FROM data_change_log ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.DataChangeLog" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO data_change_log (id_,data_id_,operator_id_,change_info_,create_time_,class_name_)
+		VALUES(#{id},#{dataId},#{operatorId},#{changeInfo},NOW(),#{className})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.DataChangeLog">
+		UPDATE data_change_log
+		<set>
+			<if test="operatorId != null">
+				operator_id_ = #{operatorId},
+			</if>
+			<if test="id != null">
+				id_ = #{id},
+			</if>
+			<if test="className != null">
+				class_name_ = #{className},
+			</if>
+			<if test="changeInfo != null">
+				change_info_ = #{changeInfo},
+			</if>
+		</set> WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM data_change_log WHERE id_ = #{id} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="DataChangeLog" parameterType="map">
+		SELECT * FROM data_change_log ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM data_change_log
+	</select>
+</mapper>

+ 5 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/controller/VipGroupActivityController.java

@@ -51,7 +51,11 @@ public class VipGroupActivityController extends BaseController {
     @ApiOperation(value = "修改活动方案")
     @PostMapping("/update")
     public Object update(@RequestBody VipGroupActivityAddDto vipGroupActivityAddDto){
-        vipGroupActivityService.updateVipGroupActivity(vipGroupActivityAddDto);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            return failed("用户信息获取失败");
+        }
+        vipGroupActivityService.updateVipGroupActivity(vipGroupActivityAddDto, sysUser.getId());
         return succeed();
     }
 

+ 4 - 0
mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentRouteOrderController.java

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiOperation;
 
 import java.math.BigDecimal;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -134,6 +135,9 @@ public class StudentPaymentRouteOrderController extends BaseController {
         }
         studentPaymentRouteOrder.setCreateBy(sysUser.getId());
         studentPaymentRouteOrder.setUpdateBy(sysUser.getId());
+        if(studentPaymentRouteOrder.getPayTime().after(new Date())){
+            failed("交易日期不能大于当前时间");
+        }
 
         return succeed(studentPaymentRouteOrderService.addOutOrder(studentPaymentRouteOrder));
     }

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

@@ -75,7 +75,11 @@ public class VipGroupActivityController extends BaseController {
     @PostMapping("/update")
     @PreAuthorize("@pcs.hasPermissions('vipGroupActivity/update')")
     public Object update(@RequestBody VipGroupActivityAddDto vipGroupActivityAddDto){
-        vipGroupActivityService.updateVipGroupActivity(vipGroupActivityAddDto);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            return failed("用户信息获取失败");
+        }
+        vipGroupActivityService.updateVipGroupActivity(vipGroupActivityAddDto, sysUser.getId());
         return succeed();
     }
 

二进制
mec-web/src/main/resources/excelTemplate/财务支出导入模板.xls