Selaa lähdekoodia

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

zouxuan 5 vuotta sitten
vanhempi
commit
c81dc9cf9c
23 muutettua tiedostoa jossa 470 lisäystä ja 40 poistoa
  1. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java
  2. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserCashAccountDetailDao.java
  3. 7 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java
  4. 34 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupSalaryBaseInfo.java
  5. 7 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/PlatformCashAccountDetailTypeEnum.java
  6. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupTeacherSalaryService.java
  7. 11 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
  8. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  9. 31 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  10. 14 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  11. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java
  12. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentWithdrawServiceImpl.java
  13. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  14. 12 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  15. 9 0
      mec-biz/src/main/resources/config/mybatis/SysUserCashAccountDetailMapper.xml
  16. 1 1
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  17. 9 6
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java
  18. 23 7
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  19. BIN
      mec-thirdparty/libs/adapay-java-sdk-1.0.2.jar
  20. 14 0
      mec-thirdparty/pom.xml
  21. 82 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/NotifyCallback.java
  22. 159 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Pay.java
  23. 17 3
      mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java

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

@@ -132,4 +132,13 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
      * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
      */
     List<CourseScheduleTeacherSalary> findByCourseSchedules(@Param("courseScheduleIds") List<Long> courseScheduleIds);
+
+	/**
+	 * @describe 统计班级上老师的先上课,线下课课酬
+	 * @author Joburgess
+	 * @date 2019/11/5
+	 * @param classGroupId: 班级编号
+	 * @return java.util.List<java.util.Map<java.lang.String,java.math.BigDecimal>>
+	 */
+	List<Map<String, BigDecimal>> countTeacherOnlineOfflineSalaryByClass(@Param("classGroupId") Integer classGroupId);
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserCashAccountDetailDao.java

@@ -2,9 +2,11 @@ package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
 import com.ym.mec.common.dal.BaseDAO;
+
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 public interface SysUserCashAccountDetailDao extends BaseDAO<Long, SysUserCashAccountDetail> {
 
@@ -19,4 +21,5 @@ public interface SysUserCashAccountDetailDao extends BaseDAO<Long, SysUserCashAc
      */
     int batchInsert(@Param("sysUserCashAccountDetails") List<SysUserCashAccountDetail> sysUserCashAccountDetails);
 
+    Map<String, Object> queryStatistics();
 }

+ 7 - 6
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.School;
 import com.ym.mec.biz.dal.entity.VipGroup;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -118,13 +119,13 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	VipGroupManageDetailDto getVipGroupBaseInfo(Long vipGroupId);
 
 	/**
-	 * @Author: Joburgess
-	 * @Date: 2019/10/11
-	 * @params [vipGroupId]
-	 * @return com.ym.mec.biz.dal.dto.VipGroupSalaryBaseInfo
 	 * @describe 获取vip课财务基本信息
+	 * @author Joburgess
+	 * @date 2019/11/5
+	 * @param vipGroupId: vip课编号
+	 * @return com.ym.mec.biz.dal.dto.VipGroupSalaryBaseInfo
 	 */
-	VipGroupSalaryBaseInfo getVipGroupSalaryInfo(Long vipGroupId);
+	VipGroupSalaryBaseInfo getVipGroupSalaryInfo(@Param("vipGroupId") Long vipGroupId);
 
 	/**
 	 * @Author: Joburgess
@@ -241,4 +242,4 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return
 	 */
 	Integer queryCurrentMonthCoursesNum(Integer organId);
-}
+}

+ 34 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupSalaryBaseInfo.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import org.codehaus.jackson.annotate.JsonIgnore;
 
 import java.math.BigDecimal;
+import java.util.Objects;
 
 /**
  * @Author Joburgess
@@ -24,6 +25,39 @@ public class VipGroupSalaryBaseInfo {
     @ApiModelProperty(value = "课酬总额")
     private BigDecimal totalSalary;
 
+    @ApiModelProperty(value = "课程总价")
+    private BigDecimal totalCoursePrice;
+
+    @ApiModelProperty(value = "教师线上课总课酬")
+    private BigDecimal totalOnlineTeacherSalary;
+
+    @ApiModelProperty(value = "教师线下课总课酬")
+    private BigDecimal totalOfflineTeacherSalary;
+
+    public BigDecimal getTotalCoursePrice() {
+        return totalCoursePrice;
+    }
+
+    public void setTotalCoursePrice(BigDecimal totalCoursePrice) {
+        this.totalCoursePrice = totalCoursePrice;
+    }
+
+    public BigDecimal getTotalOnlineTeacherSalary() {
+        return totalOnlineTeacherSalary;
+    }
+
+    public void setTotalOnlineTeacherSalary(BigDecimal totalOnlineTeacherSalary) {
+        this.totalOnlineTeacherSalary = Objects.isNull(totalOnlineTeacherSalary)?new BigDecimal(0):totalOnlineTeacherSalary;
+    }
+
+    public BigDecimal getTotalOfflineTeacherSalary() {
+        return totalOfflineTeacherSalary;
+    }
+
+    public void setTotalOfflineTeacherSalary(BigDecimal totalOfflineTeacherSalary) {
+        this.totalOfflineTeacherSalary = Objects.isNull(totalOfflineTeacherSalary)?new BigDecimal(0):totalOfflineTeacherSalary;
+    }
+
     public BigDecimal getExpectTotalSalary() {
         return expectTotalSalary;
     }

+ 7 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/PlatformCashAccountDetailTypeEnum.java

@@ -6,8 +6,13 @@ import com.ym.mec.common.enums.BaseEnum;
  * 交易类型 (RECHARGE 充值,WITHDRAW 提现,PAY_FEE 缴费,REFUNDS 退费,FILL_ACCOUNT 人工补账)
  */
 public enum PlatformCashAccountDetailTypeEnum implements BaseEnum<String, PlatformCashAccountDetailTypeEnum> {
-	RECHARGE("RECHARGE", "充值"), WITHDRAW("WITHDRAW", "提现"), PAY_FEE("PAY_FEE", "缴费"), FILL_ACCOUNT("FILL_ACCOUNT", "人工补账"), REFUNDS("REFUNDS", "退费"), REWARDS(
-			"REWARDS", "奖励");
+	RECHARGE("RECHARGE", "充值"),
+	WITHDRAW("WITHDRAW", "提现"),
+	PAY_FEE("PAY_FEE", "缴费"),
+	FILL_ACCOUNT("FILL_ACCOUNT", "人工补账"),
+	REFUNDS("REFUNDS", "退费"),
+	REWARDS("REWARDS", "奖励"),
+	WAGE("WAGE", "工资");
 
 	private String code;
 

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

@@ -3,7 +3,9 @@ package com.ym.mec.biz.service;
 import com.ym.mec.biz.dal.entity.ClassGroupTeacherSalary;
 import com.ym.mec.common.service.BaseService;
 
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 public interface ClassGroupTeacherSalaryService extends BaseService<Long, ClassGroupTeacherSalary> {
     /**
@@ -14,4 +16,4 @@ public interface ClassGroupTeacherSalaryService extends BaseService<Long, ClassG
      */
     List<ClassGroupTeacherSalary> findByMusicGroupId(String musicGroupId);
 
-}
+}

+ 11 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java

@@ -67,7 +67,9 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
         //3、删除学生对应班级的课程
         List<CourseSchedule> courseScheduleList = courseScheduleService.findNoStartCoursesByClassGroupId(classGroupId);
-        courseScheduleStudentPaymentService.deleteStudentCourseSchedule(userId, courseScheduleList);
+        if(courseScheduleList.size() > 0 ) {
+            courseScheduleStudentPaymentService.deleteStudentCourseSchedule(userId, courseScheduleList);
+        }
 
         //4、学生退出班级群组
         ClassGroup classGroup = classGroupService.get(classGroupId);
@@ -117,6 +119,9 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
             courseScheduleStudentPayment.setUpdateTime(date);
             courseScheduleStudentPayments.add(courseScheduleStudentPayment);
         }
+        if(courseScheduleStudentPayments.size() ==0){
+            return true;
+        }
 
         courseScheduleStudentPaymentService.batchInsert(courseScheduleStudentPayments);
         return true;
@@ -143,7 +148,7 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
             classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
             classGroupStudentMappers.add(classGroupStudentMapper);
             if (classGroup.getType().equals(ClassGroupTypeEnum.NORMAL)) {
-                StudentRegistration studentRegistration = studentRegistrationService.queryByUserIdAndMusicGroupId(Integer.parseInt(userIdStr),classGroup.getMusicGroupId());
+                StudentRegistration studentRegistration = studentRegistrationService.queryByUserIdAndMusicGroupId(Integer.parseInt(userIdStr), classGroup.getMusicGroupId());
                 studentRegistration.setClassGroupId(classGroupId);
                 studentRegistrationService.update(studentRegistration);
             }
@@ -181,6 +186,10 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
             }
         }
 
+        if (courseScheduleStudentPayments.size() == 0) {
+            return true;
+        }
+
         courseScheduleStudentPaymentService.batchInsert(courseScheduleStudentPayments);
         return true;
     }

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

@@ -190,7 +190,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             SysUserCashAccount teacherCashAccount = sysUserCashAccountService.get(courseScheduleTeacherSalary.getUserId().intValue());
             SysUserCashAccountDetail teacherCashAccountDetail = new SysUserCashAccountDetail();
             teacherCashAccountDetail.setUserId(courseScheduleTeacherSalary.getUserId());
-            teacherCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.REFUNDS);
+            teacherCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.WAGE);
             teacherCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
             teacherCashAccountDetail.setAmount(actualSalary);
             teacherCashAccountDetail.setBalance(teacherCashAccount.getBalance());
@@ -371,7 +371,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             SysUserCashAccount teacherCashAccount = sysUserCashAccountService.get(courseScheduleTeacherSalary.getUserId().intValue());
             SysUserCashAccountDetail teacherCashAccountDetail = new SysUserCashAccountDetail();
             teacherCashAccountDetail.setUserId(courseScheduleTeacherSalary.getUserId());
-            teacherCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.REFUNDS);
+            teacherCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.WAGE);
             teacherCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
             teacherCashAccountDetail.setAmount(teacherSalary);
             teacherCashAccountDetail.setBalance(teacherCashAccount.getBalance());

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

@@ -20,6 +20,7 @@ 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.string.MessageFormatter;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -662,6 +663,36 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             musicGroupStudentFee.setTemporaryCourseFee(new BigDecimal(0));
             musicGroupStudentFee.setNextPaymentDate(musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId));
             musicGroupStudentFeeDao.update(musicGroupStudentFee);
+            
+            //插入交易明细
+            SysUserCashAccount cashAccount = sysUserCashAccountService.get(userId);
+            BigDecimal amount = studentPaymentOrder.getActualAmount();
+            //充值
+            SysUserCashAccountDetail rechargeDetail = new SysUserCashAccountDetail();
+            rechargeDetail.setAmount(amount);
+            rechargeDetail.setBalance(cashAccount.getBalance().add(amount));
+            rechargeDetail.setComment("缴费前充值");
+            rechargeDetail.setCreateTime(date);
+            rechargeDetail.setStatus(DealStatusEnum.SUCCESS);
+            rechargeDetail.setTransNo(studentPaymentOrder.getTransNo());
+            rechargeDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
+            rechargeDetail.setUpdateTime(date);
+            rechargeDetail.setUserId(userId);
+            sysUserCashAccountDetailService.insert(rechargeDetail);
+            
+            //缴费
+            SysUserCashAccountDetail paymentDetail = new SysUserCashAccountDetail();
+            paymentDetail.setAmount(amount);
+            paymentDetail.setBalance(cashAccount.getBalance());
+            paymentDetail.setComment("缴费");
+            paymentDetail.setCreateTime(date);
+            paymentDetail.setStatus(DealStatusEnum.SUCCESS);
+            paymentDetail.setTransNo(studentPaymentOrder.getTransNo());
+            paymentDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE);
+            paymentDetail.setUpdateTime(date);
+            paymentDetail.setUserId(userId);
+            sysUserCashAccountDetailService.insert(paymentDetail);
+            
             // 发送续费结果通知
 
             sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_MUSIC_GROUP_RENEW_SUCCESS, receivers, null, 0, "",

+ 14 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -5,8 +5,10 @@ import com.ym.mec.biz.dal.entity.SysAccount;
 import com.ym.mec.biz.service.PayService;
 import com.ym.mec.biz.service.StudentPaymentOrderService;
 import com.ym.mec.biz.service.SysAccountService;
+import com.ym.mec.thirdparty.adapay.Pay;
 import com.ym.mec.thirdparty.union.UnionPay;
 import com.ym.mec.thirdparty.union.UnionPayFeignService;
+import com.ym.mec.thirdparty.yqpay.YqPayUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -44,12 +46,20 @@ public class PayServiceImpl implements PayService {
     public Map getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody) throws Exception {
         //支付通道决策
         SysAccount routingAccount = getRoutingAccount(amount);
-        HashMap<String, Object> unionPay = new HashMap<>();
-        Map payMap;
+        Map unionPay = new HashMap();
+        Map payMap = null;
+
+
+        if (routingAccount != null) {
+            payMap = YqPayUtil.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routingAccount.getMerNo());
+        }
+
         payMap = UnionPay.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject);
-        unionPay.put("orderNo", "1017"+orderNo);
+        unionPay.put("orderNo", "1017" + orderNo);
         unionPay.put("type", "UNIONPAY");
         unionPay.put("payMap", payMap);
+
+        //unionPay.put("type","ADAPY");
         return unionPay;
     }
 
@@ -61,6 +71,7 @@ public class PayServiceImpl implements PayService {
 
     /**
      * 获取收款的账户
+     *
      * @param money
      * @return
      */
@@ -73,9 +84,6 @@ public class PayServiceImpl implements PayService {
             routingAccount = sysAccountService.getPerAccount(money);
         }
 
-        //临时全返回双乾
-        routingAccount = sysAccountService.getPerAccount(money);
-
         return routingAccount;
     }
 

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

@@ -47,7 +47,7 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
     @Override
     public List<Goods> getMusicalList(String musicGroupId) {
         List<StudentPaymentOrderDetail> applyOrder = findApplyOrderSuccess(musicGroupId, DealStatusEnum.SUCCESS);
-        if(applyOrder == null){
+        if(applyOrder == null || applyOrder.size()==0){
             return null;
         }
         String goodsIdsStr = "";

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

@@ -98,7 +98,7 @@ public class StudentWithdrawServiceImpl extends BaseServiceImpl<Integer, Student
 			sysUserCashAccountDetail.setUserId(userId);
 			sysUserCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.WITHDRAW);
 			sysUserCashAccountDetail.setStatus(status);
-			sysUserCashAccountDetail.setAmount(amount);
+			sysUserCashAccountDetail.setAmount(amount.negate());
 			sysUserCashAccountDetail.setAttribute(id + "");
 			sysUserCashAccountDetail.setComment(memo);
 			sysUserCashAccountDetail.setTransNo(transNo);
@@ -171,7 +171,7 @@ public class StudentWithdrawServiceImpl extends BaseServiceImpl<Integer, Student
 				SysUserCashAccountDetail cashAccountDetail = new SysUserCashAccountDetail();
 				cashAccountDetail.setUserId(account.getUserId());
 				cashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.WITHDRAW);
-				cashAccountDetail.setAmount(amount);
+				cashAccountDetail.setAmount(amount.negate());
 				cashAccountDetail.setBalance(subtract);
 				cashAccountDetail.setCreateTime(date);
 				cashAccountDetail.setStatus(DealStatusEnum.ING);

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -957,6 +957,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     		throw new BizException("请指定vip课程!");
 		}
 
+		VipGroup vipGroup = vipGroupDao.get(queryInfo.getVipGroupId());
+
+    	if(Objects.isNull(vipGroup)){
+    		throw new BizException("未找到指定vip课");
+		}
+
 		PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
@@ -989,15 +995,29 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.isNull(vipGroupSalaryBaseInfo)){
 			vipGroupSalaryBaseInfo=new VipGroupSalaryBaseInfo();
 		}
+		//预计总课酬
 		if(Objects.isNull(vipGroupSalaryBaseInfo.getExpectTotalSalary())){
 			vipGroupSalaryBaseInfo.setExpectTotalSalary(new BigDecimal(0));
 		}
+		//实际总课酬
 		if(Objects.isNull(vipGroupSalaryBaseInfo.getTotalSalary())){
 			vipGroupSalaryBaseInfo.setTotalSalary(new BigDecimal(0));
 		}
+		//扣费总额
 		vipGroupSalaryBaseInfo.setTotalFeeDeduction(vipGroupSalaryBaseInfo.getExpectTotalSalary().subtract(vipGroupSalaryBaseInfo.getTotalSalary()));
+		//扣费笔数
 		vipGroupSalaryBaseInfo.setFeeDeductionNum(vipGroupDao.countVipGroupDeductionNum(queryInfo.getVipGroupId()));
 
+		ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroup.getId());
+		BigDecimal studentNum=new BigDecimal(classGroup.getStudentNum());
+		//课程总价
+		vipGroupSalaryBaseInfo.setTotalCoursePrice(vipGroup.getTotalPrice().multiply(studentNum));
+
+		List<Map<String, BigDecimal>> teacherSalaryCount = courseScheduleTeacherSalaryDao.countTeacherOnlineOfflineSalaryByClass(classGroup.getId());
+		Map<String,BigDecimal> teacherTeachModeSalaryMap = MapUtil.convertMybatisMap(teacherSalaryCount);
+		vipGroupSalaryBaseInfo.setTotalOfflineTeacherSalary(teacherTeachModeSalaryMap.get(TeachModeEnum.OFFLINE.getCode()));
+		vipGroupSalaryBaseInfo.setTotalOnlineTeacherSalary(teacherTeachModeSalaryMap.get(TeachModeEnum.ONLINE.getCode()));
+
 		Map<String,Object> result=new HashMap<>();
 		result.put("pageInfo",pageInfo);
 		result.put("baseInfo",vipGroupSalaryBaseInfo);

+ 12 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -239,7 +239,18 @@
 		</foreach>
 	</select>
 
-	<update id="batchUpdateWages" parameterType="map">
+    <select id="countTeacherOnlineOfflineSalaryByClass" resultType="map">
+		SELECT
+			cs.teach_mode_ AS 'key',
+			SUM( csts.actual_salary_ ) AS 'value'
+		FROM
+			course_schedule cs
+			LEFT JOIN course_schedule_teacher_salary csts ON cs.id_ = csts.course_schedule_id_
+		WHERE cs.class_group_id_=#{classGroupId} AND cs.id_ IS NOT NULL AND cs.status_='OVER'
+		GROUP BY cs.teach_mode_
+    </select>
+
+    <update id="batchUpdateWages" parameterType="map">
 		UPDATE course_schedule_teacher_salary set
 			subsidy_ = #{subsidy},
 			expect_salary_ = #{salary},

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

@@ -124,4 +124,13 @@
     <select id="selectDetailByTransNo" resultMap="SysUserCashAccountDetail">
 		SELECT * FROM sys_user_cash_account_detail WHERE  trans_no_ = #{transNo}
 	</select>
+	
+	<select id="queryStatistics" resultType="map">
+		select sum(case when sucad.type_ = 'RECHARGE' then 1 else 0 end) income_num_,sum(case when sucad.type_ = 'RECHARGE' then sucad.amount_ else 0 end) income_total_,sum(case when (sucad.type_ = 'WITHDRAW' or sucad.type_ = 'REWARDS' or sucad.type_ = 'WAGE') then 1 else 0 end) expend_num_,sum(case when (sucad.type_ = 'WITHDRAW' or sucad.type_ = 'REWARDS' or sucad.type_ = 'WAGE') then sucad.amount_ else 0 end) expend_total_ from sys_user_cash_account_detail sucad
+		left join sys_user u on sucad.user_id_ = u.id_
+		where sucad.status_ = 'SUCCESS'
+		<if test="organId != null">
+   			and u.organ_id_ = #{organId}
+   		</if>
+	</select>
 </mapper>

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml

@@ -560,7 +560,7 @@
             LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_=vgcgm.vip_group_id_
             LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
             LEFT JOIN course_schedule_teacher_salary csts ON cs.id_=csts.course_schedule_id_
-        WHERE vg.id_=#{vipGroupId} AND cs.id_!=NULL AND csts.settlement_time_!=NULL
+        WHERE vg.id_=#{vipGroupId} AND cs.id_ IS NOT NULL
     </select>
     <select id="countVipGroupDeductionNum" resultType="int">
         SELECT

+ 9 - 6
mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java

@@ -1,5 +1,7 @@
 package com.ym.mec.student.controller;
 
+import com.huifu.adapay.model.payment.PayChannelEnum;
+import com.huifu.adapay.model.payment.Payment;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
@@ -12,6 +14,7 @@ import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.IdGeneratorService;
+import com.ym.mec.thirdparty.adapay.Pay;
 import com.ym.mec.util.string.IdWorker;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -315,8 +318,7 @@ public class MusicGroupController extends BaseController {
             return failed("商品价格不符");
         }
 
-        IdWorker idWorker = new IdWorker(0, 0);
-        String orderNo = idWorker.nextId();
+        String orderNo = idGeneratorService.generatorId("payment")+"";
 
         Map payMap = payService.getPayMap(orderAmount, orderNo, "http://47.99.212.176:8000/studentOrder/notify", "http://dev.dayaedu.com", "测试订单", "测试订单");
 
@@ -334,11 +336,12 @@ public class MusicGroupController extends BaseController {
 //
 //        System.out.println(query);
 //
-        IdWorker idWorker = new IdWorker(0, 0);
-        String orderNo = "1017" + idWorker.nextId();
+        String orderNo = idGeneratorService.generatorId("payment")+"";
         BigDecimal amount = new BigDecimal("0.01");
-        Map map = payService.getPayMap(amount, orderNo, "http://47.99.212.176:8000/studentOrder/notify", "https://baodiu.com", "测试订单", "测试订单");
-       return succeed(map);
+        String payChannel = PayChannelEnum.ALIPAY_QR.getCode();
+        Payment payment = Pay.executePayment(amount, orderNo, payChannel, "测试订单", "测试订单");
+        //Map map = payService.getPayMap(amount, orderNo, "http://47.99.212.176:8000/studentOrder/notify", "https://baodiu.com", "测试订单", "测试订单");
+       return succeed(payment);
     }
 
     @ApiOperation(value = "订单状态查询")

+ 23 - 7
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -1,5 +1,7 @@
 package com.ym.mec.student.controller;
 
+import com.huifu.adapay.model.payment.PayChannelEnum;
+import com.huifu.adapay.model.payment.Payment;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
@@ -8,6 +10,7 @@ import com.ym.mec.biz.service.StudentPaymentOrderService;
 import com.ym.mec.biz.service.StudentRegistrationService;
 import com.ym.mec.biz.service.VipGroupService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.thirdparty.adapay.Pay;
 import com.ym.mec.thirdparty.union.NotifyMsg;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -17,6 +20,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.math.BigDecimal;
 import java.util.Objects;
 
 @RequestMapping("studentOrder")
@@ -30,7 +34,7 @@ public class StudentOrderController extends BaseController {
     private StudentRegistrationService studentRegistrationService;
     @Autowired
     private VipGroupService vipGroupService;
-    
+
     @Autowired
     private MusicGroupService musicGroupService;
 
@@ -68,10 +72,10 @@ public class StudentOrderController extends BaseController {
         order.setPayTime(notifyMsg.getPayTime());
         if (order.getType().equals(OrderTypeEnum.APPLY)) { //报名订单
             studentRegistrationService.updateApplyOrder(order);
-        }else if (order.getType().equals(OrderTypeEnum.SMALL_CLASS_TO_BUY)){
+        } else if (order.getType().equals(OrderTypeEnum.SMALL_CLASS_TO_BUY)) {
             vipGroupService.orderCallback(order);
-        }else if(order.getType().equals(OrderTypeEnum.RENEW)){
-        	musicGroupService.renewForCallback(order);
+        } else if (order.getType().equals(OrderTypeEnum.RENEW)) {
+            musicGroupService.renewForCallback(order);
         }
         return "SUCCESS";
     }
@@ -79,16 +83,28 @@ public class StudentOrderController extends BaseController {
 
     @ApiOperation(value = "查询订单状态")
     @GetMapping("/checkOrderStatus")
-    public Object checkOrderStatus(String orderNo){
-        if(StringUtils.isBlank(orderNo)){
+    public Object checkOrderStatus(String orderNo) {
+        if (StringUtils.isBlank(orderNo)) {
             return failed("请指定订单");
         }
         StudentPaymentOrder orderByOrderNo = studentPaymentOrderService.findOrderByOrderNo(orderNo);
-        if(Objects.isNull(orderByOrderNo)){
+        if (Objects.isNull(orderByOrderNo)) {
             return failed("未找到指定订单");
         }
         return succeed(orderByOrderNo.getStatus());
     }
 
+    @ApiOperation(value = "台牌支付")
+    @GetMapping("/executePayment")
+    public Object executePayment() throws Exception {
+        String orderNo = "jsdk_payment_" + System.currentTimeMillis();
+        String payChannel = PayChannelEnum.ALIPAY_QR.getCode();
+        BigDecimal amount = new BigDecimal("0.01");
+        String orderSubject = "测试大雅订单";
+        String orderBody = "测试大雅订单";
+        Payment payment = Pay.executePayment(amount, orderNo, payChannel, orderSubject, orderBody);
+        return succeed(payment);
+    }
+
 
 }

BIN
mec-thirdparty/libs/adapay-java-sdk-1.0.2.jar


+ 14 - 0
mec-thirdparty/pom.xml

@@ -67,6 +67,20 @@
 			<systemPath>${project.basedir}/libs/SADK-3.2.5.2.jar</systemPath>
 		</dependency>
 		<dependency>
+			<groupId>adapay</groupId>
+			<artifactId>adapay-java-sdk</artifactId>
+			<version>1.0.2</version>
+			<scope>system</scope>
+			<systemPath>${project.basedir}/libs/adapay-java-sdk-1.0.2.jar
+			</systemPath>
+		</dependency>
+		<dependency>
+			<groupId>org.eclipse.paho</groupId>
+			<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
+			<version>1.2.0</version>
+		</dependency>
+
+		<dependency>
 			<groupId>org.springframework.cloud</groupId>
 			<artifactId>spring-cloud-starter-openfeign</artifactId>
 		</dependency>

+ 82 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/NotifyCallback.java

@@ -0,0 +1,82 @@
+package com.ym.mec.thirdparty.adapay;
+
+import com.alibaba.fastjson.JSON;
+import com.huifu.adapay.model.payment.Payment;
+import com.huifu.adapay.model.refund.Refund;
+import com.huifu.adapay.notify.INotifyCallback;
+/**
+ * @author jane.zhao
+ */
+public class NotifyCallback implements INotifyCallback {
+
+    /**
+     * 用户接收并处理支付成功的异步消息
+     * @param payment 成功的支付对象
+     * @throws Exception 异常
+     */
+    @Override
+    public void paymentSuccessMessageArrived(Payment payment) throws Exception {
+        System.out.println("receive paymentSuccess msg=" + JSON.toJSONString(payment));
+
+    }
+
+    /**
+     * 用户接收并处理支付失败的异步消息
+     * @param payment 失败的支付对象
+     * @throws Exception 异常
+     */
+    @Override
+    public void paymentFailedMessageArrived(Payment payment) throws Exception {
+        System.out.println("receive paymentFailed msg=" + JSON.toJSONString(payment));
+    }
+
+    /**
+     * 用户接收并处理关闭支付交易成功的异步消息
+     * @param payment 关闭成功的支付对象
+     * @throws Exception 异常
+     */
+    @Override
+    public void paymentCloseSuccessMessageArrived(Payment payment) throws Exception {
+        System.out.println("receive paymentCloseSuccess msg=" + JSON.toJSONString(payment));
+    }
+
+    /**
+     * 用户接收并处理关闭支付交易失败的异步消息
+     * @param payment 关闭失败的支付对象
+     * @throws Exception 异常
+     */
+    @Override
+    public void paymentCloseFailedMessageArrived(Payment payment) throws Exception {
+        System.out.println("receive paymentCloseFailed msg=" + JSON.toJSONString(payment));
+    }
+
+    /**
+     * 用户接收并处理退款成功的异步消息
+     * @param refund 成功的退款对象
+     * @throws Exception 异常
+     */
+    @Override
+    public void refundSuccessMessageArrived(Refund refund) throws Exception {
+        System.out.println("receive refundSuccess msg=" + JSON.toJSONString(refund));
+    }
+
+    /**
+     * 用户接收并处理退款失败的异步消息
+     * @param refund 失败的退款对象
+     * @throws Exception 异常
+     */
+    @Override
+    public void refundFailedMessageArrived(Refund refund) throws Exception {
+        System.out.println("receive refundFailed msg=" + JSON.toJSONString(refund));
+    }
+
+    /**
+     * 用户接收并处理未知的异步消息
+     * @param msg 未知消息
+     * @throws Exception 异常
+     */
+    @Override
+    public void unknownMessageArrived(String msg) throws Exception {
+        System.out.println("receive unknown msg=" + msg);
+    }
+}

+ 159 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Pay.java

@@ -0,0 +1,159 @@
+package com.ym.mec.thirdparty.adapay;
+
+import com.alibaba.fastjson.JSON;
+import com.huifu.adapay.AdaPay;
+import com.huifu.adapay.demo.BaseDemo;
+import com.huifu.adapay.demo.NotifyCallbackDemo;
+import com.huifu.adapay.exception.BaseAdaPayException;
+import com.huifu.adapay.model.DeviceInfo;
+import com.huifu.adapay.model.payment.*;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author jane.zhao
+ */
+public class Pay {
+    private static final String appId = "app_7d87c043-aae3-4357-9b2c-269349a980d6";
+
+    /**
+     * 运行支付类接口
+     * @return paymentId
+     * @throws Exception 异常
+     */
+    public static void init() throws Exception {
+        //apiKey,商户联调用
+        String apiKey = "api_test_e640fa26-bbe6-458f-ac44-a71723ee2176";
+        //apiKey,真实交易用(live)
+        String apiKeyLive = "api_live_9c14f264-e390-41df-984d-df15a6952031";
+        //公钥
+        String pubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwN6xgd6Ad8v2hIIsQVnbt8a3JituR8o4Tc3B5WlcFR55bz4OMqrG/356Ur3cPbc2Fe8ArNd/0gZbC9q56Eb16JTkVNA/fye4SXznWxdyBPR7+guuJZHc/VW2fKH2lfZ2P3Tt0QkKZZoawYOGSMdIvO+WqK44updyax0ikK6JlNQIDAQAB";
+        //私钥
+        String privateKey= "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMQhsygJ2pp4nCiDAXiqnZm6AzKSVAh+C0BgGR6QaeXzt0TdSi9VR0OQ7Qqgm92NREB3ofobXvxxT+wImrDNk6R6lnHPMTuJ/bYpm+sx397rPboRAXpV3kalQmbZ3P7oxtEWOQch0zV5B1bgQnTvxcG3REAsdaUjGs9Xvg0iDS2tAgMBAAECgYAqGFmNdF/4234Yq9V7ApOE1Qmupv1mPTdI/9ckWjaAZkilfSFY+2KqO8bEiygo6xMFCyg2t/0xDVjr/gTFgbn4KRPmYucGG+FzTRLH0nVIqnliG5Ekla6a4gwh9syHfstbOpIvJR4DfldicZ5n7MmcrdEwSmMwXrdinFbIS/P1+QJBAOr6NpFtlxVSGzr6haH5FvBWkAsF7BM0CTAUx6UNHb+RCYYQJbk8g3DLp7/vyio5uiusgCc04gehNHX4laqIdl8CQQDVrckvnYy+NLz+K/RfXEJlqayb0WblrZ1upOdoFyUhu4xqK0BswOh61xjZeS+38R8bOpnYRbLf7eoqb7vGpZ9zAkEAobhdsA99yRW+WgQrzsNxry3Ua1HDHaBVpnrWwNjbHYpDxLn+TJPCXvI7XNU7DX63i/FoLhOucNPZGExjLYBH/wJATHNZQAgGiycjV20yicvgla8XasiJIDP119h4Uu21A1Su8G15J2/9vbWn1mddg1pp3rwgvxhw312oInbHoFMxsQJBAJlyDDu6x05MeZ2nMor8gIokxq2c3+cnm4GYWZgboNgq/BknbIbOMBMoe8dJFj+ji3YNTvi1MSTDdSDqJuN/qS0=";
+
+        //设置AdaPay全局参数,不同环境设置不同的apiKey/pubKey/privateKey
+        AdaPay.apiKey = apiKeyLive;
+        AdaPay.pubKey = pubKey;
+        AdaPay.privateKey = privateKey;
+        AdaPay.debug = true;
+
+        //启动 mqtt 异步监听
+        AdaPay.iNotifyCallback = new NotifyCallbackDemo();
+        AdaPay.startNotifyListener();
+    }
+
+    public static String executePaymentTest() throws Exception{
+        //test chargeId = "002112019080716223300005091372336111616";
+        Pay demo = new Pay();
+        //支付接口
+        String orderNo = "jsdk_payment_"+System.currentTimeMillis();
+        String payChannel = PayChannelEnum.ALIPAY_QR.getCode();
+        BigDecimal amount = new BigDecimal("0.01");
+        String orderSubject = "测试大雅订单";
+        String orderBody = "测试大雅订单";
+        Payment payment = Pay.executePayment(amount,orderNo,payChannel,orderSubject,orderBody);
+        //支付查询接口
+        //demo.queryPayment(payment.getId());
+        //关单接口
+        //demo.closePayment(payment.getId());
+
+        return payment.getId();
+    }
+
+    /**
+     * 执行一个支付交易
+     * @return 创建的支付对象
+     * @throws Exception 异常
+     */
+    public static Payment executePayment(BigDecimal amount,String orderNo,String payChannel,String orderSubject,String orderBody) throws Exception {
+        init();
+        System.out.println("=======execute payment begin=======");
+        //创建支付对象的参数,全部参数请参考 https://docs.adapay.tech/api/04-trade.html#id3
+        Map<String, Object> paymentParams = new HashMap<>(10);
+        paymentParams.put("app_id", appId);
+        paymentParams.put("order_no", orderNo);
+        paymentParams.put("pay_channel", payChannel);
+        paymentParams.put("pay_amt", amount);
+        paymentParams.put("currency", CurrencyEnum.CNY.getCode());
+        paymentParams.put("goods_title", orderSubject);
+        paymentParams.put("goods_desc", orderBody);
+
+        DeviceInfo deviceInfo = new DeviceInfo();
+        deviceInfo.setDeviceType(DeviceTypeEnum.MOBILE.getCode());
+        deviceInfo.setDeviceIp("127.0.0.1");
+        paymentParams.put("device_info", deviceInfo);
+
+        List<GoodsDetail> goodsDetailList = new ArrayList<>();
+        GoodsDetail goodsDetail = new GoodsDetail();
+        goodsDetail.setGoodsId("your goods id");
+        goodsDetail.setGoodsName("your goods name");
+        goodsDetail.setQuantity("1");
+        goodsDetail.setPrice("100.00");
+        goodsDetailList.add(goodsDetail);
+
+        PromotionDetail promotionDetail = new PromotionDetail();
+        promotionDetail.setGoodsDetail(goodsDetailList);
+        promotionDetail.setCostPrice("100.00");
+
+        PaymentExpend expend = new PaymentExpend();
+        expend.setPromotionDetail(promotionDetail);
+        expend.setBuyerId("2088012928900274");
+        expend.setBuyerLogonId("");
+
+        paymentParams.put("expend", expend);
+
+        //调用sdk方法,创建支付,得到支付对象
+        Payment payment = null;
+        try {
+            payment = Payment.create(paymentParams);
+        } catch (BaseAdaPayException e) {
+            e.printStackTrace();
+        }
+        System.out.println("payment result="+JSON.toJSONString(payment));
+        return payment;
+    }
+
+    /**
+     * 关闭一个支付交易
+     * @param paymentId 要关闭的支付id
+     * @return 关闭的支付对象
+     * @throws Exception 异常
+     */
+    public Payment closePayment(String paymentId) throws Exception{
+        System.out.println("=======close payment begin=======");
+        //关闭支付对象的参数,全部参数请参考 https://docs.adapay.tech/api/04-trade.html#id11
+        //调用sdk方法,关闭支付,得到支付对象
+        Payment payment = null;
+        try {
+            payment = Payment.close(paymentId);
+        } catch (BaseAdaPayException e) {
+            e.printStackTrace();
+        }
+        System.out.println("close payment result="+JSON.toJSONString(payment));
+        return payment;
+    }
+
+    /**
+     * 查询一个支付交易
+     * @param paymentId 要查询的支付id
+     * @return 查询的支付对象
+     * @throws Exception 异常
+     */
+    public Payment queryPayment(String paymentId) throws Exception{
+        System.out.println("=======query payment begin=======");
+        //查询支付对象的参数,全部参数请参考 https://docs.adapay.tech/api/04-trade.html#id7
+        //调用sdk方法,查询支付交易,得到支付对象
+        Payment payment = null;
+        try {
+            payment = Payment.query(paymentId);
+        } catch (BaseAdaPayException e) {
+            e.printStackTrace();
+        }
+        System.out.println("query payment result="+JSON.toJSONString(payment));
+        return payment;
+    }
+}

+ 17 - 3
mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java

@@ -7,6 +7,7 @@ import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
+import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -16,6 +17,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.DemoGroupDao;
 import com.ym.mec.biz.dal.dao.MusicGroupDao;
 import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.dao.SysUserCashAccountDetailDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dao.VipGroupDao;
 import com.ym.mec.common.controller.BaseController;
@@ -42,6 +44,9 @@ public class IndexController extends BaseController {
 
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
+	
+	@Autowired
+	private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
 
 	@ApiOperation(value = "获取首页数据")
 	@GetMapping("/index")
@@ -73,11 +78,20 @@ public class IndexController extends BaseController {
 		
 		Integer demoGroupNum = demoGroupDao.queryCurrentMonthCoursesNum(organId);
 		
-		//本月收入
+		Map<String, Object> incomeExpendMap = sysUserCashAccountDetailDao.queryStatistics();
 		
-		//本月支出
+		ModelMap model = new ModelMap();
+		model.put("musicDatas", musicDatas);
+		model.put("teacherDatas", teacherDatas);
+		model.put("studentDatas", studentDatas);
+		model.put("vipDatas", vipDatas);
+		model.put("demoDatas", demoDatas);
+		model.put("musicGroupNum", musicGroupNum);
+		model.put("vipGroupNum", vipGroupNum);
+		model.put("demoGroupNum", demoGroupNum);
+		model.put("incomeExpendMap", incomeExpendMap);
 
-		return succeed();
+		return succeed(model);
 	}
 
 }