Quellcode durchsuchen

fix: 考级报名钱到课程余额

Joburgess vor 4 Jahren
Ursprung
Commit
f859c9b953

+ 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;

+ 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 = "活动值")
 	private String attribute1;
-	
-	/**  */
+
+	@ApiModelProperty(value = "")
 	private String attribute2;
-	
-	/**  */
+
+	@ApiModelProperty(value = "")
 	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() {

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

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

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

@@ -0,0 +1,31 @@
+package com.ym.mec.biz.event.listener;
+
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
+import com.ym.mec.biz.event.StudentCourseChangeEvent;
+import com.ym.mec.biz.service.LogService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+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 {
+
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    @Autowired
+    private LogService logService;
+
+    @Async
+    @EventListener
+    public void onEntityChangedEvent(Object oldEntity, Object newEntity) {
+        logService.entityVariationAnalysis(oldEntity, newEntity);
+    }
+
+}

+ 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) {
+        applicationContext.publishEvent(new EntityChangeEvent(this, oldEntity, newEntity));
+    }
+}

+ 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);
+
+}

+ 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.SPORADIC, "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.alibaba.druid.sql.visitor.functions.Char;
+import com.ym.mec.biz.dal.dto.VipGroupActivityAddDto;
+import com.ym.mec.biz.dal.enums.VipGroupActivityTypeEnum;
+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.stereotype.Service;
+
+import java.lang.reflect.Field;
+import java.util.*;
+
+/**
+ * @Author qnc99
+ * @Date 2020/12/15 0015
+ */
+@Service
+public class LogServiceImpl implements LogService {
+
+    private static Set<Class<?>> FINAL_CLASS = new HashSet<>(Arrays.asList(int.class,Integer.class,long.class,Long.class,
+            float.class,Float.class,double.class,Double.class,
+            char.class, Char.class,boolean.class, Boolean.class,
+            byte.class,Byte.class,short.class, Short.class, Enum.class));
+
+    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) {
+        List<String> changes = new ArrayList<>();
+        Field[] allFields = getAllFields(oldEntity);
+        for (Field field : allFields) {
+            ApiModelProperty annotation = field.getAnnotation(ApiModelProperty.class);
+            if(Objects.isNull(annotation)){
+                continue;
+            }
+            field.setAccessible(true);
+            try {
+                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();
+            }
+        }
+        System.out.println(StringUtils.join(changes, ";"));
+    }
+
+    public static void main(String[] args) {
+        VipGroupActivityAddDto vipGroupActivityAddDto = new VipGroupActivityAddDto();
+        vipGroupActivityAddDto.setId(1);
+        vipGroupActivityAddDto.setStartTime(DateUtil.stringToDate("2020-12-01", "yyyy-MM-dd"));
+        vipGroupActivityAddDto.setType(VipGroupActivityTypeEnum.BASE_ACTIVITY);
+        vipGroupActivityAddDto.setSalarySettlementJson("默认课酬");
+
+        VipGroupActivityAddDto vipGroupActivityAddDto1 = new VipGroupActivityAddDto();
+        vipGroupActivityAddDto1.setId(1);
+        vipGroupActivityAddDto1.setStartTime(DateUtil.stringToDate("2020-12-11", "yyyy-MM-dd"));
+        vipGroupActivityAddDto1.setType(VipGroupActivityTypeEnum.DISCOUNT);
+        vipGroupActivityAddDto1.setSalarySettlementJson("固定课酬");
+
+        LogServiceImpl logService = new LogServiceImpl();
+        logService.entityVariationAnalysis(vipGroupActivityAddDto, vipGroupActivityAddDto1);
+    }
+}

+ 5 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java

@@ -15,6 +15,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
@@ -77,20 +78,21 @@ 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("请指定活动编号!");
+		VipGroupActivity oldVipGroupActivity = vipGroupActivityDao.get(vipGroupActivityAddDto.getId());
+		if(Objects.isNull(oldVipGroupActivity)){
+			throw new BizException("活动不存在!");
 		}
 		if(Objects.isNull(vipGroupActivityAddDto.getOrganId())){
 			throw new BizException("请指定部门!");
 		}
 		vipGroupActivityAddDto.setSalarySettlementJson(JSON.toJSONString(vipGroupActivityAddDto.getVipGroupSalarySettlement()));
+
 		super.update(vipGroupActivityAddDto);
 	}