Bläddra i källkod

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

yonge 3 år sedan
förälder
incheckning
53ad7176be
38 ändrade filer med 4246 tillägg och 4019 borttagningar
  1. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java
  2. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysCouponIssueRecordDao.java
  3. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysEmailDao.java
  4. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Subject.java
  5. 31 9
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantProductSumm.java
  6. 31 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/CouponDetailTypeEnum.java
  7. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CloudTeacherOrderService.java
  8. 0 9
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  9. 24 1
      mec-biz/src/main/java/com/ym/mec/biz/service/SysCouponCodeService.java
  10. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysEmailService.java
  11. 7 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java
  12. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java
  13. 4 59
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  14. 7 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java
  15. 196 199
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  16. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  17. 29 26
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java
  18. 98 98
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java
  19. 93 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponCodeServiceImpl.java
  20. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponIssueRecordServiceImpl.java
  21. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponServiceImpl.java
  22. 4 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysEmailServiceImpl.java
  23. 10 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java
  24. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java
  25. 3518 3513
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  26. 13 1
      mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml
  27. 1 1
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  28. 6 4
      mec-biz/src/main/resources/config/mybatis/SubjectMapper.xml
  29. 1 0
      mec-biz/src/main/resources/config/mybatis/SysCouponCodeMapper.xml
  30. 48 35
      mec-biz/src/main/resources/config/mybatis/SysCouponIssueRecordMapper.xml
  31. 2 5
      mec-biz/src/main/resources/config/mybatis/SysCouponMapper.xml
  32. 27 22
      mec-biz/src/main/resources/config/mybatis/SysEmailMapper.xml
  33. 2 2
      mec-biz/src/main/resources/config/mybatis/TenantInfoMapper.xml
  34. 10 6
      mec-biz/src/main/resources/config/mybatis/TenantOrderRecordMapper.xml
  35. 12 0
      mec-common/common-core/src/main/java/com/ym/mec/common/page/WrapperUtil.java
  36. 14 0
      mec-web/src/main/java/com/ym/mec/web/controller/CloudTeacherOrderController.java
  37. 22 3
      mec-web/src/main/java/com/ym/mec/web/controller/SysEmailController.java
  38. 4 3
      mec-web/src/main/java/com/ym/mec/web/controller/TenantInfoController.java

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

@@ -106,4 +106,6 @@ public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
     int checkOrdered(@Param("cloudTeacherStudentIds")String join);
     
     List<CloudTeacherOrder> queryByUserIdAndStatus(@Param("userId")Integer userId, @Param("status")Integer status);
+
+    Map<Integer, String> findUserNameByOrderId(@Param("platformOrderId")Integer platformOrderId);
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysCouponIssueRecordDao.java

@@ -37,6 +37,6 @@ public interface SysCouponIssueRecordDao extends BaseMapper<SysCouponIssueRecord
      */
     void opsConsume(@Param("id") Integer id, @Param("consumeNum") Integer consumeNum);
 
-    List<SysCoupon> queryUserCanGetCoupon(@Param("userId") Integer userId);
+    List<SysCoupon> queryUserCanGetCoupon(@Param("userId") Integer userId,@Param("tenantId") Integer tenantId);
 }
 

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysEmailDao.java

@@ -15,6 +15,7 @@ import java.util.List;
 public interface SysEmailDao extends BaseMapper<SysEmail> {
 
    int insertBatch(@Param("entities") List<SysEmail> entities);
-   
+
+    SysEmail query();
 }
 

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Subject.java

@@ -20,7 +20,10 @@ public class Subject {
 	/**  */
 	@ApiModelProperty(value = "科目名称",required = false)
 	private String name;
-	
+
+	@ApiModelProperty(value = "父类目录名")
+	private String parentSubjectName;
+
 	/**  */
 	@ApiModelProperty(value = "科目编号",required = false)
 	private String code;
@@ -147,4 +150,11 @@ public class Subject {
 		return ToStringBuilder.reflectionToString(this);
 	}
 
+	public String getParentSubjectName() {
+		return parentSubjectName;
+	}
+
+	public void setParentSubjectName(String parentSubjectName) {
+		this.parentSubjectName = parentSubjectName;
+	}
 }

+ 31 - 9
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantProductSumm.java

@@ -37,12 +37,18 @@ public class TenantProductSumm extends TenantInfo implements Serializable  {
     @ApiModelProperty(value = "冻结金额")
     private BigDecimal frozenAmount;
 
+    @ApiModelProperty(value = "已有学员")
+    private Integer studentNum;
+
+    @ApiModelProperty(value = "学员上限")
+    private Integer studentUpLimit;
+
     // ----------- 计算字段
-    @ApiModelProperty(value = "服务有效期开始")
-    private Date payDateEnd;
+    @ApiModelProperty(value = "服务有效期结束")
+    private Date expiryDateEnd;
 
     @ApiModelProperty(value = "剩余天数")
-    private String validRemaining;
+    private Integer validRemaining;
 
     @ApiModelProperty(value = "总余额")
     private BigDecimal sumBalance;
@@ -95,19 +101,19 @@ public class TenantProductSumm extends TenantInfo implements Serializable  {
         this.frozenAmount = frozenAmount;
     }
 
-    public Date getPayDateEnd() {
-        return payDateEnd;
+    public Date getExpiryDateEnd() {
+        return expiryDateEnd;
     }
 
-    public void setPayDateEnd(Date payDateEnd) {
-        this.payDateEnd = payDateEnd;
+    public void setExpiryDateEnd(Date expiryDateEnd) {
+        this.expiryDateEnd = expiryDateEnd;
     }
 
-    public String getValidRemaining() {
+    public Integer getValidRemaining() {
         return validRemaining;
     }
 
-    public void setValidRemaining(String validRemaining) {
+    public void setValidRemaining(Integer validRemaining) {
         this.validRemaining = validRemaining;
     }
 
@@ -118,5 +124,21 @@ public class TenantProductSumm extends TenantInfo implements Serializable  {
     public void setSumBalance(BigDecimal sumBalance) {
         this.sumBalance = sumBalance;
     }
+
+    public Integer getStudentNum() {
+        return studentNum;
+    }
+
+    public void setStudentNum(Integer studentNum) {
+        this.studentNum = studentNum;
+    }
+
+    public Integer getStudentUpLimit() {
+        return studentUpLimit;
+    }
+
+    public void setStudentUpLimit(Integer studentUpLimit) {
+        this.studentUpLimit = studentUpLimit;
+    }
 }
 

+ 31 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/CouponDetailTypeEnum.java

@@ -1,7 +1,12 @@
 package com.ym.mec.biz.dal.enums;
 
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 优惠券明细类型
@@ -59,8 +64,18 @@ public enum CouponDetailTypeEnum {
         this.msg = msg;
     }
 
-    //根据传入code找到对应的券类型,默认全类型
+    //根据传入code找到对应的券类型,如果不存在则返回 全类型
     public static String of(String code) {
+        String check = check(code);
+        return StringUtils.isBlank(check) ? FULLCOUPON.getCode() : check;
+    }
+
+    //如果不存在则返回 null
+    public static String ofNull(String code) {
+        return check(code);
+    }
+
+    private static String check(String code) {
         CouponDetailTypeEnum detailTypeEnum = Arrays.stream(CouponDetailTypeEnum.values())
                 .filter(e -> e.code.equalsIgnoreCase(code))
                 .findFirst()
@@ -69,6 +84,8 @@ public enum CouponDetailTypeEnum {
             return detailTypeEnum.getCode();
         }
         switch (code) {
+            case "INSTRUMENT":
+                return MUSICAL.getCode();
             case "TRAINING_SINGLE":
                 return SINGLE.getCode();
             case "THEORY_COURSE":
@@ -79,9 +96,21 @@ public enum CouponDetailTypeEnum {
             case "CLOUD_TEACHER_PLUS":
                 return MEMBER.getCode();
             default:
-                return FULLCOUPON.getCode();
+                return null;
         }
+    }
 
+    public static String[] getAllowType(CouponDetailTypeEnum... type) {
+        List<String> resultList = new ArrayList<>();
+        resultList.add(FULLCOUPON.getCode());
+        if (Objects.nonNull(type)) {
+            List<String> collect = Arrays.stream(type)
+                    .map(CouponDetailTypeEnum::getCode)
+                    .distinct()
+                    .collect(Collectors.toList());
+            resultList.addAll(collect);
+        }
+        return resultList.toArray(new String[0]);
     }
 
 }

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

@@ -114,4 +114,5 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
 
     boolean addStudents(CloudTeacherAddQueryInfo cloudTeacherAddQueryInfo);
 
+    int sendSms(TenantOrderRecord record);
 }

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

@@ -71,15 +71,6 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
     HttpResponseResult pay(RegisterPayDto registerPayDto) throws Exception;
 
     /**
-     * 获取优惠券相关参数-校验优惠券和传入的支付金额是否合法
-     *
-     * @param couponIdList 优惠券集合
-     * @param total        本次订单所有商品的总数量
-     * @param payAmount    页面传入的本次支付的金额
-     */
-    CouponPayParam getCouponPayParam(List<Integer> couponIdList, AtomicInteger total, BigDecimal payAmount);
-
-    /**
      * 继续缴费
      * @param registerPayDto
      * @return

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

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.HorseRaceLampDto;
 import com.ym.mec.biz.dal.dto.SysCouponCodeDto;
+import com.ym.mec.biz.dal.entity.CouponPayParam;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.SysCouponCode;
 import com.ym.mec.biz.dal.page.SysCouponCodeQueryInfo;
@@ -11,6 +12,7 @@ import com.ym.mec.common.service.BaseService;
 
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
 
 public interface SysCouponCodeService extends BaseService<Long, SysCouponCode> {
 
@@ -55,7 +57,28 @@ public interface SysCouponCodeService extends BaseService<Long, SysCouponCode> {
      */
     StudentPaymentOrder use(List<Integer> couponIdList, BigDecimal amount, Boolean useFlag);
 
-    List<SysCouponCodeDto> checkCoupon(List<Integer> couponIdList);
+    StudentPaymentOrder use(List<Integer> couponIdList, BigDecimal amount, Boolean useFlag, String... allowType);
+
+    List<SysCouponCodeDto> checkCoupon(List<Integer> couponIdList, String... allowType);
+
+    /**
+     * 获取优惠券相关参数-校验优惠券和传入的支付金额是否合法
+     *
+     * @param couponIdList 优惠券集合
+     * @param total        本次订单所有商品的总数量
+     * @param payAmount    页面传入的本次支付的金额
+     * @param allowType   本次允许使用的优惠券类型,null则不验证
+     */
+    CouponPayParam getCouponPayParam(List<Integer> couponIdList, Integer total, BigDecimal payAmount, String... allowType);
+
+    /**
+     * 获取优惠券相关参数-校验优惠券和传入的支付金额是否合法
+     *
+     * @param couponIdList 优惠券集合
+     * @param total        本次订单所有商品的总数量
+     * @param payAmount    页面传入的本次支付的金额
+     */
+    CouponPayParam getCouponPayParam(List<Integer> couponIdList, Integer total, BigDecimal payAmount);
 
     List<SysCouponCodeDto> findByIdList(List<Integer> couponIdList);
 

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

@@ -11,5 +11,6 @@ import com.ym.mec.biz.dal.entity.SysEmail;
  */
 public interface SysEmailService extends IService<SysEmail> {
 
+    SysEmail query();
 }
 

+ 7 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -284,14 +284,18 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
                 e.printStackTrace();
                 return false;
             }
-            //TODO 发送短信
-            // Map<Integer, String> userPhone = new HashMap<>();
-            // sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.CLOUD_TEACHER_ORDER_SUCCESS, userPhone, null, 0, null, null);
         }
         bucket.delete();
         return false;
     }
 
+    @Override
+    public int sendSms(TenantOrderRecord record) {
+        Map<Integer, String> userPhone = cloudTeacherOrderDao.findUserNameByOrderId(record.getId());
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.CLOUD_TEACHER_ORDER_SUCCESS, userPhone, null, 0, null, null);
+        return 0;
+    }
+
     //主动去第三方查询订单状态
     private void checkTransOrderState(TenantOrderRecord orderRecord) {
         if (StringUtils.equals(orderRecord.getPaymentChannel(), PaymentChannelEnum.ADAPAY.getCode())) {

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

@@ -733,8 +733,10 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
         
         BigDecimal studentSingleCourseOriginalCost = price.divide(new BigDecimal(practiceCourses.size()), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
 
+        //校验优惠券
+        String[] checkCoupon = CouponDetailTypeEnum.getAllowType(CouponDetailTypeEnum.PRACTICE);
         //使用优惠券
-        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(practiceGroupBuyParams.getCouponIdList(), price, true);
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(practiceGroupBuyParams.getCouponIdList(), price, true,checkCoupon);
         //实际支付金额,去除优惠券
         BigDecimal actualPrice = studentPaymentOrder.getExpectAmount();
         BigDecimal divide = actualPrice.divide(new BigDecimal(practiceCourses.size()), ROUND_DOWN);

+ 4 - 59
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -531,7 +531,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         Integer userId = sporadicPayDto.getUserId();
         String orderNo = idGeneratorService.generatorId("payment") + "";
         String channelType = "";
-        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(sporadicPayDto.getCouponIdList(), amount, true);
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(sporadicPayDto.getCouponIdList(), amount,
+                true,
+                CouponDetailTypeEnum.getAllowType());
         amount = studentPaymentOrder.getActualAmount();
         if (!(amount.compareTo(sporadicPayDto.getAmount()) == 0)) {
             throw new BizException("订单金额异常");
@@ -861,7 +863,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //获取本次商品的总数
             AtomicInteger total = getTotalNum(registerPayDto);
             //校验优惠券的使用
-            couponPayParam = getCouponPayParam(registerPayDto.getCouponIdList(), total, registerPayDto.getAmount());
+            couponPayParam = sysCouponCodeService.getCouponPayParam(registerPayDto.getCouponIdList(), total.get(), registerPayDto.getAmount());
             studentPaymentOrder.setCouponCodeId(StringUtils.join(registerPayDto.getCouponIdList(), ","));
             studentPaymentOrder.setCouponRemitFee(couponPayParam.getCouponRemitTotal());
         }
@@ -870,63 +872,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         return couponPayParam;
     }
 
-    /**
-     * 获取优惠券相关参数-校验优惠券和传入的支付金额是否合法
-     *
-     * @param couponIdList 优惠券集合
-     * @param total        本次订单所有商品的总数量
-     * @param payAmount    页面传入的本次支付的金额
-     */
-    public CouponPayParam getCouponPayParam(List<Integer> couponIdList, AtomicInteger total, BigDecimal payAmount) {
-        //查询本次付款使用的优惠券
-        List<SysCouponCodeDto> sysCouponCodeDtoList = sysCouponCodeService.checkCoupon(couponIdList);
-        //全类型优惠券的总额度
-        BigDecimal fullTypeTotal = new BigDecimal(0);
-        //非全类型优惠券的总额度
-        BigDecimal notFullTypeTotal = new BigDecimal(0);
-        //非全类型优惠券的总数量
-        AtomicInteger notFullTypeTotalNum = new AtomicInteger(0);
-        //优惠券减免的总额度
-        BigDecimal couponRemitTotal = new BigDecimal(0);
-        //交易阈值 最后付款的金额大于该值就不对
-        BigDecimal threshold;
-
-        for (SysCouponCodeDto d : sysCouponCodeDtoList) {
-            if (d.getTypeDetail().equals(CouponDetailTypeEnum.FULLCOUPON.getCode())) {
-                fullTypeTotal = fullTypeTotal.add(d.getFullAmount());
-            } else {
-                notFullTypeTotal = notFullTypeTotal.add(d.getFullAmount());
-                notFullTypeTotalNum.set(notFullTypeTotalNum.incrementAndGet());
-            }
-            couponRemitTotal = couponRemitTotal.add(d.getFaceValue());
-        }
-        //阈值 = (全品类券总面值 ÷ 总商品数量) + (非全品类券总面值 ÷ 非全品类券的数量)
-        threshold = fullTypeTotal.divide(new BigDecimal(total.get()), 3, RoundingMode.HALF_UP)
-                .add(notFullTypeTotal.divide(new BigDecimal(notFullTypeTotalNum.get()), 3, RoundingMode.HALF_UP));
-
-        if (payAmount.compareTo(threshold) < 0) {
-            throw new BizException("优惠券使用错误,交易失败!");
-        }
-        //将各种类型的优惠券合并 算出总面试 总减免金额
-        Map<String, CouponPayTypeInfo> couponTypeInfo = new HashMap<>();
-        //根据CouponDetailTypeEnum 进行分组集合
-        WrapperUtil.groupList(sysCouponCodeDtoList, SysCouponCodeDto::getTypeDetail)
-                .forEach((typeDetail, list) -> {
-                    CouponPayTypeInfo coupon = new CouponPayTypeInfo();
-                    list.forEach(c -> {
-                        coupon.setCouponAmount(coupon.getCouponAmount().add(c.getFullAmount()));
-                        coupon.setFaceValue(coupon.getFaceValue().add(c.getFaceValue()));
-                    });
-                    coupon.setTypeDetail(typeDetail);
-                    couponTypeInfo.put(typeDetail, coupon);
-                });
-
-        CouponPayParam result = new CouponPayParam();
-        result.setCouponRemitTotal(couponRemitTotal);
-        result.setCouponTypeInfo(couponTypeInfo);
-        return result;
-    }
-
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult pay(RegisterPayDto registerPayDto) throws Exception {

+ 7 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java

@@ -74,10 +74,9 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
                         tenantOrderRecord::setTransNo,
                         tenantOrderRecordService::updateById
                 );
-                //主动延迟检查订单
+                //机构开通付款 主动延迟检查订单
                 delayCheckTenant();
             } else if (platform.equals("cloudTeacherOrder")) {
-
                 // 云教练支付
                 TenantOrderRecord tenantOrderRecord = tenantOrderRecordService.getOne(new WrapperUtil<TenantOrderRecord>()
                                                                                               .hasEq("order_no_", payParam.getOrderNo()).queryWrapper());
@@ -93,7 +92,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
                                                 tenantOrderRecord::setTransNo,
                                                 tenantOrderRecordService::updateById
                 );
-                //主动延迟检查订单
+                // 云教练支付 主动延迟检查订单
                 log.info("executePayment delayCheckCloudTeacherOrder >>>>> ");
                 delayCheckCloudTeacherOrder(tenantOrderRecord);
             } else if (platform.equals("tenantRecharge")) {
@@ -277,9 +276,10 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         //异步
         CompletableFuture.runAsync(() -> {
             //检查5次
+            Boolean ret = false;
             for (int i = 0; i <= 5; i++) {
                 try {
-                    Boolean ret = cloudTeacherOrderService.payCheck(record);
+                    ret = cloudTeacherOrderService.payCheck(record);
                     if (ret) break;
                     Thread.sleep(3000);//每3秒触发一次
                     log.info("delayCheckCloudTeacherOrder >>>>>  start {}", i);
@@ -288,6 +288,9 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
                     e.printStackTrace();
                 }
             }
+            if (ret) {
+                cloudTeacherOrderService.sendSms(record);
+            }
             bucket.delete();
         });
     }

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 196 - 199
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java


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

@@ -673,6 +673,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             //获取使用了优惠券之后的总金额
             BigDecimal useCouponAmount = WrapperUtil.sumList(studentPaymentOrderDetailList, StudentPaymentOrderDetail::getRemitFee);
             studentPaymentOrder.setCouponRemitFee(useCouponAmount);
+            //核销优惠券
+            sysCouponCodeService.useCoupon(registerPayDto.getCouponIdList());
         }
         //添加订单明细
         studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);

+ 29 - 26
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java

@@ -9,7 +9,6 @@ import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.dto.GoodsSellDto;
 import com.ym.mec.biz.dal.dto.RepairGoodsDto;
-import com.ym.mec.biz.dal.dto.SysCouponCodeDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.RepairStudentQueryInfo;
@@ -22,7 +21,7 @@ import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
-
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,6 +35,7 @@ import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static com.ym.mec.biz.dal.enums.CouponDetailTypeEnum.*;
 import static com.ym.mec.biz.dal.enums.DealStatusEnum.*;
 
 @Service
@@ -130,18 +130,18 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 
             if (orderByOrderNo.getStatus() == SUCCESS) {
                 throw new BizException("您已支付请勿重复提交");
-            }else if(orderByOrderNo.getStatus() == ING){
-            	
-            	// 查询订单状态
+            } else if (orderByOrderNo.getStatus() == ING) {
+
+                // 查询订单状态
                 PayStatus payStatus = studentPaymentOrderService.queryPayStatus(orderByOrderNo.getPaymentChannel(), orderByOrderNo.getOrderNo(), orderByOrderNo.getTransNo());
-                if(payStatus != PayStatus.FAILED){
-                	if(payStatus == PayStatus.SUCCESSED){
-                		throw new BizException("订单已支付成功,请勿重复支付");
-                	}/*else if(payStatus == PayStatus.PAYING){
+                if (payStatus != PayStatus.FAILED) {
+                    if (payStatus == PayStatus.SUCCESSED) {
+                        throw new BizException("订单已支付成功,请勿重复支付");
+                    }/*else if(payStatus == PayStatus.PAYING){
                 		throw new BizException("订单还在交易中,请稍后重试");
                 	}*/
                 }
-                
+
                 orderByOrderNo.setStatus(CLOSE);
                 studentPaymentOrderService.update(orderByOrderNo);
                 if (orderByOrderNo.getBalancePaymentAmount() != null && orderByOrderNo.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
@@ -158,7 +158,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         }
         Integer studentId = studentGoodsSell.getUserId();
         List<GoodsSellDto> goodsSellDtos = studentGoodsSell.getGoodsSellDtos();
-        if (goodsSellDtos == null || goodsSellDtos.size() == 0) {
+        if (CollectionUtils.isEmpty(goodsSellDtos)) {
             throw new BizException("请选择需要购买的商品");
         }
         if (studentId == null) {
@@ -186,7 +186,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 studentGoodsSell.setCooperationOrganId(musicGroup.getCooperationOrganId());
             }
         }
-        List<Integer> goodsIds = goodsSellDtos.stream().map(e -> e.getGoodsId()).collect(Collectors.toList());
+        List<Integer> goodsIds = goodsSellDtos.stream().map(GoodsSellDto::getGoodsId).collect(Collectors.toList());
         Map<Integer, String> integerStringMap = getMap("goods", "id_", "type_", goodsIds, Integer.class, String.class);
         Map<Integer, BigDecimal> map = getMap("goods", "id_", "discount_price_", goodsIds, Integer.class, BigDecimal.class);
         Map<Integer, BigDecimal> groupPriceMap = getMap("goods", "id_", "group_purchase_price_", goodsIds, Integer.class, BigDecimal.class);
@@ -208,14 +208,17 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
             groupAmount = groupAmount.add(goodsSellDto.getGoodsGroupPrice());
         }
         amount = amount.subtract(studentGoodsSell.getMarketAmount());
-        if(amount.compareTo(groupAmount) < 0){
+        if (amount.compareTo(groupAmount) < 0) {
             throw new BizException("操作失败:该金额减免后商品价格不可低于商品团购价");
         }
         if (amount.signum() < 0) {
             throw new BizException("操作失败:订单金额异常");
         }
+        //优惠券使用范围
+        String[] checkCoupon = CouponDetailTypeEnum.getAllowType(ACCESSORIES, MUSICAL);
         //使用优惠券
-        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(studentGoodsSell.getCouponIdList(),amount,studentGoodsSell.getType() != 1);
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(studentGoodsSell.getCouponIdList(),
+                amount, studentGoodsSell.getType() != 1, checkCoupon);
         amount = studentPaymentOrder.getActualAmount();
         // 判断金额是否正确
 //        if (studentGoodsSell.getTotalAmount().compareTo(amount) != 0) {
@@ -228,8 +231,8 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         String orderNo = idGeneratorService.generatorId("payment") + "";
         studentGoodsSell.setOrderNo(orderNo);
         List<Integer> couponIdList = studentGoodsSell.getCouponIdList();
-        if(couponIdList != null && couponIdList.size() > 0){
-            studentGoodsSell.setCouponIds(StringUtils.join(couponIdList,","));
+        if (couponIdList != null && couponIdList.size() > 0) {
+            studentGoodsSell.setCouponIds(StringUtils.join(couponIdList, ","));
         }
         studentGoodsSellDao.insert(studentGoodsSell);
 
@@ -352,10 +355,10 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         studentGoodsSellDao.update(studentGoodsSell);
         String couponIds = studentGoodsSell.getCouponIds();
         List<Integer> couponIdList = new ArrayList<>();
-        if(StringUtils.isNotEmpty(couponIds)){
+        if (StringUtils.isNotEmpty(couponIds)) {
             couponIdList = Arrays.stream(couponIds.split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
         }
-        studentPaymentOrder = sysCouponCodeService.use(couponIdList,amount,true);
+        studentPaymentOrder = sysCouponCodeService.use(couponIdList, amount, true);
         amount = studentPaymentOrder.getActualAmount();
         studentPaymentOrder.setUserId(studentId);
         studentPaymentOrder.setGroupType(GroupType.GOODS_SELL);
@@ -475,10 +478,10 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         if (amount.compareTo(BigDecimal.ZERO) < 0) {
             throw new BizException("特权减免金额不能大于总金额");
         }
-        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(couponIdList,amount,repairInfo.getType() != 1);
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(couponIdList, amount, repairInfo.getType() != 1);
         amount = studentPaymentOrder.getActualAmount();
-        if(couponIdList != null && couponIdList.size() > 0){
-            repairInfo.setCouponIds(StringUtils.join(couponIdList,","));
+        if (couponIdList != null && couponIdList.size() > 0) {
+            repairInfo.setCouponIds(StringUtils.join(couponIdList, ","));
         }
         studentRepairDao.insert(repairInfo);
         if (repairInfo.getType() == 1) {
@@ -606,7 +609,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
     public StudentRepair getRepairInfo(Integer id) {
         StudentRepair repairInfo = studentRepairDao.getRepairInfo(id);
         String couponIds = repairInfo.getCouponIds();
-        if(StringUtils.isNotEmpty(couponIds)){
+        if (StringUtils.isNotEmpty(couponIds)) {
             List<Integer> collect = Arrays.stream(couponIds.split(",")).map(e -> Integer.valueOf(e)).collect(Collectors.toList());
             repairInfo.setCouponCodeDtos(sysCouponCodeService.findByIdList(collect));
         }
@@ -649,10 +652,10 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 
         String channelType = "";
         List<Integer> couponIdList = new ArrayList<>();
-        if(StringUtils.isNotEmpty(studentRepair.getCouponIds())){
+        if (StringUtils.isNotEmpty(studentRepair.getCouponIds())) {
             couponIdList = Arrays.stream(studentRepair.getCouponIds().split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
         }
-        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(couponIdList,amount,true);
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(couponIdList, amount, true);
         amount = studentPaymentOrder.getActualAmount();
         studentPaymentOrder.setUserId(studentRepair.getStudentId());
         studentPaymentOrder.setGroupType(GroupType.REPAIR);
@@ -1121,7 +1124,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
             sysUserCashAccountDetailService.insert(paymentDetail);
             //优惠券减免金额
             BigDecimal couponRemitFee = studentPaymentOrder.getCouponRemitFee();
-            if(couponRemitFee.compareTo(BigDecimal.ZERO) > 0 && repairInfo.getAmount().compareTo(BigDecimal.ZERO) > 0){
+            if (couponRemitFee.compareTo(BigDecimal.ZERO) > 0 && repairInfo.getAmount().compareTo(BigDecimal.ZERO) > 0) {
                 //获取维修金额
                 BigDecimal repairAmount = repairInfo.getAmount();
                 //获取比例
@@ -1140,7 +1143,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                             null,
                             goodsIds,
                             studentPaymentOrder.getExpectAmount().add(repairInfo.getExemptionAmount()),
-                            studentPaymentOrder.getBalancePaymentAmount(),couponRemitFee);
+                            studentPaymentOrder.getBalancePaymentAmount(), couponRemitFee);
                 }
             }
 

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

@@ -1,9 +1,5 @@
 package com.ym.mec.biz.service.impl;
 
-import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
-import static com.ym.mec.biz.dal.enums.GroupType.SUBJECT_CHANGE;
-import static com.ym.mec.biz.dal.enums.GroupType.VIP;
-
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.SubjectChangeParamDto;
 import com.ym.mec.biz.dal.entity.*;
@@ -18,7 +14,6 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
-
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -31,6 +26,9 @@ import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
+import static com.ym.mec.biz.dal.enums.GroupType.SUBJECT_CHANGE;
+
 @Service
 public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectChange> implements SubjectChangeService {
 
@@ -103,18 +101,18 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         List<StudentPaymentOrder> orders = studentPaymentOrderDao.findMusicGroupApplyOrderByStatus(subjectChange.getStudentId(), subjectChange.getMusicGroupId(), SUCCESS);
         //获取原报名订单的乐器费用
         if (subjectChange.getOriginalMusical() != null) {
-            if(orders != null && orders.size() > 0){
+            if (orders != null && orders.size() > 0) {
                 List<Long> collect = orders.stream().map(e -> e.getId()).collect(Collectors.toList());
                 List<Goods> musical = studentPaymentOrderDetailDao.getGoodsSellPrice(collect, "MUSICAL");
-                if(musical != null && musical.size() > 0){
+                if (musical != null && musical.size() > 0) {
                     subjectChange.setOriginalMusicalGoods(musical.get(0));
                 }
             }
         }
         if (subjectChange.getOriginalAccessories() != null) {
-            if(orders != null && orders.size() > 0){
+            if (orders != null && orders.size() > 0) {
                 List<Long> collect = orders.stream().map(e -> e.getId()).collect(Collectors.toList());
-                subjectChange.setOriginalAccessoriesGoods(studentPaymentOrderDetailDao.getGoodsSellPrice(collect,"ACCESSORIES"));
+                subjectChange.setOriginalAccessoriesGoods(studentPaymentOrderDetailDao.getGoodsSellPrice(collect, "ACCESSORIES"));
             }
         }
 
@@ -135,19 +133,19 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         SubjectChange subjectChange = subjectChangeDao.get(subjectChangeParamDto.getId());
         if (subjectChangeParamDto.getRepay()) {
             StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.get(subjectChange.getOrderId().longValue());
-            
-            if(studentPaymentOrder != null && studentPaymentOrder.getStatus() == DealStatusEnum.ING){
-                
+
+            if (studentPaymentOrder != null && studentPaymentOrder.getStatus() == DealStatusEnum.ING) {
+
                 // 查询订单状态
                 PayStatus payStatus = studentPaymentOrderService.queryPayStatus(studentPaymentOrder.getPaymentChannel(), studentPaymentOrder.getOrderNo(), studentPaymentOrder.getTransNo());
-                if(payStatus != PayStatus.FAILED){
-                	if(payStatus == PayStatus.SUCCESSED){
-                		throw new BizException("订单已支付成功,请勿重复支付");
-                	}/*else if(payStatus == PayStatus.PAYING){
+                if (payStatus != PayStatus.FAILED) {
+                    if (payStatus == PayStatus.SUCCESSED) {
+                        throw new BizException("订单已支付成功,请勿重复支付");
+                    }/*else if(payStatus == PayStatus.PAYING){
                 		throw new BizException("订单还在交易中,请稍后重试");
                 	}*/
                 }
-                
+
                 studentPaymentOrder.setStatus(DealStatusEnum.CLOSE);
                 studentPaymentOrder.setUpdateTime(date);
                 studentPaymentOrderService.update(studentPaymentOrder);
@@ -176,7 +174,9 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 
         String channelType = "";
 
-        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(subjectChangeParamDto.getCouponIdList(),amount,true);
+        //只允许使用这类型的优惠券
+        String[] checkCoupon = CouponDetailTypeEnum.getAllowType(CouponDetailTypeEnum.ACCESSORIES, CouponDetailTypeEnum.MUSICAL);
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(subjectChangeParamDto.getCouponIdList(), amount, true, checkCoupon);
         amount = studentPaymentOrder.getActualAmount();
         studentPaymentOrder.setUserId(subjectChange.getStudentId());
         studentPaymentOrder.setGroupType(SUBJECT_CHANGE);
@@ -262,49 +262,49 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
     @Override
     @Transactional(rollbackFor = Exception.class)
     public SubjectChange addChange(SubjectChange subjectChange) {
-    	String musicGroupId = subjectChange.getMusicGroupId();
+        String musicGroupId = subjectChange.getMusicGroupId();
         SubjectChange studentWaitPay = subjectChangeDao.getStudentWaitPay(subjectChange.getStudentId(), musicGroupId);
         if (studentWaitPay != null) {
             throw new BizException("已有未支付的声部更改,请勿重复创建");
         }
-        
+
         studentWaitPay = subjectChangeDao.getStudentLastChange(subjectChange.getStudentId(), musicGroupId);
         if (studentWaitPay != null) {
             throw new BizException("声部更换只能操作一次,请勿重复操作");
         }
-        
+
         Set<String> musicGroupIds = new HashSet<String>();
         musicGroupIds.add(musicGroupId);
-        
+
         List<MusicGroupPurchaseList> musicGroupPurchaseListCount = musicGroupPurchaseListDao.getCount(musicGroupIds);
         if (musicGroupPurchaseListCount.size() > 0) {
             throw new BizException("乐器清单已确认,不能做声部更改");
         }
-        
+
         //判断新声部人数是否已满
         MusicGroupSubjectPlan changeSubjectPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(musicGroupId, subjectChange.getChangeSubjectId());
-		if (changeSubjectPlan.getExpectedStudentNum() <= changeSubjectPlan.getPaidStudentNum()) {
-			throw new BizException("当前声部人数已满");
-		}
-		
-		StudentRegistration studentRegistration = studentRegistrationDao.getStudentRegister(musicGroupId, subjectChange.getStudentId());
-		if(studentRegistration == null){
-			throw new BizException("用户乐团报名信息查询失败");
-		}
-        
-        if(studentRegistration.getNoneNeedCloudTeacher() != null && studentRegistration.getNoneNeedCloudTeacher() == 1){
-        	if(changeSubjectPlan.getPaidZeroNum() != null && changeSubjectPlan.getPaidZeroNum() > 0){
-        		throw new BizException("声部更换失败,当前用户是0元入团,且当前声部已有0元入团学生");
-        	}
-        }        
+        if (changeSubjectPlan.getExpectedStudentNum() <= changeSubjectPlan.getPaidStudentNum()) {
+            throw new BizException("当前声部人数已满");
+        }
+
+        StudentRegistration studentRegistration = studentRegistrationDao.getStudentRegister(musicGroupId, subjectChange.getStudentId());
+        if (studentRegistration == null) {
+            throw new BizException("用户乐团报名信息查询失败");
+        }
+
+        if (studentRegistration.getNoneNeedCloudTeacher() != null && studentRegistration.getNoneNeedCloudTeacher() == 1) {
+            if (changeSubjectPlan.getPaidZeroNum() != null && changeSubjectPlan.getPaidZeroNum() > 0) {
+                throw new BizException("声部更换失败,当前用户是0元入团,且当前声部已有0元入团学生");
+            }
+        }
         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());
+        if (studentOriginal != null) {
+            subjectChange.setOriginalOrderId(studentOriginal.getOrderId());
+            subjectChange.setOriginalCost(studentOriginal.getOriginalCost());
+            subjectChange.setOriginalAccessories(studentOriginal.getOriginalAccessories());
             subjectChange.setOriginalKitGroupPurchaseType(
-            studentOriginal.getOriginalKitGroupPurchaseType() == null ? KitGroupPurchaseTypeEnum.OWNED : studentOriginal.getOriginalKitGroupPurchaseType());
+                    studentOriginal.getOriginalKitGroupPurchaseType() == null ? KitGroupPurchaseTypeEnum.OWNED : studentOriginal.getOriginalKitGroupPurchaseType());
         }
         subjectChange.setStatus(SubjectChangeStatusEnum.WAIT_PAY);
         MusicGroup musicGroup = musicGroupDao.get(subjectChange.getMusicGroupId());
@@ -348,7 +348,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         //差价小于0退到余额
         if (amountMargin.compareTo(BigDecimal.ZERO) <= 0) {
 //            sysUserCashAccountService.updateBalance(subjectChange.getStudentId(), amountMargin.negate(), PlatformCashAccountDetailTypeEnum.REFUNDS, "声部更换退还");
-            if(amountMargin.compareTo(BigDecimal.ZERO) < 0){
+            if (amountMargin.compareTo(BigDecimal.ZERO) < 0) {
                 SysUserCashAccountLog sysUserCashAccountLog = new SysUserCashAccountLog();
                 sysUserCashAccountLog.setUserId(subjectChange.getStudentId());
                 sysUserCashAccountLog.setGroupType(SUBJECT_CHANGE);
@@ -395,7 +395,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                         goodsIdList,
                         BigDecimal.ZERO,
                         BigDecimal.ZERO,
-                        subjectChange.getKitGroupPurchaseType(),BigDecimal.ZERO);
+                        subjectChange.getKitGroupPurchaseType(), BigDecimal.ZERO);
             }
             //乐保处理
             studentInstrumentService.subjectChangeUpdateInstrument(subjectChange);
@@ -419,12 +419,12 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 
     @Override
     public SubjectChange getStudentOriginal(Integer studentId, String musicGroupId) {
-    	
+
         //1、存在历史的更换
         SubjectChange subjectChange = new SubjectChange();
         SubjectChange studentLastChange = subjectChangeDao.getStudentLastChange(studentId, musicGroupId);
         if (studentLastChange != null) {
-        	throw new BizException("声部更换只能操作一次,请勿重复操作");
+            throw new BizException("声部更换只能操作一次,请勿重复操作");
         	/*List<Long> orderIdList = new ArrayList<Long>();
         	orderIdList.add(studentLastChange.getOrderId().longValue());
         	Set<Integer> refundSellOrderGoodsIds = getRefundGoodsId(orderIdList);
@@ -467,51 +467,51 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         if (studentRegistration == null) {
             throw new BizException("用户注册信息不存在");
         }
-        
+
         List<StudentPaymentOrder> studentPaymentOrderList = new ArrayList<StudentPaymentOrder>();
-        
-		if (studentRegistration.getMusicGroupPaymentCalenderId() == null) {
-			if(studentRegistration.getMusicGroupStatus() == StudentMusicGroupStatusEnum.NORMAL){
-				studentPaymentOrderList = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(studentId, musicGroupId, SUCCESS);
-			}
-		} else {
-			studentPaymentOrderList = studentPaymentOrderService.queryByBatchNo(studentId, studentRegistration.getMusicGroupPaymentCalenderId() + "",
-					DealStatusEnum.SUCCESS);
-		}
-        
+
+        if (studentRegistration.getMusicGroupPaymentCalenderId() == null) {
+            if (studentRegistration.getMusicGroupStatus() == StudentMusicGroupStatusEnum.NORMAL) {
+                studentPaymentOrderList = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(studentId, musicGroupId, SUCCESS);
+            }
+        } else {
+            studentPaymentOrderList = studentPaymentOrderService.queryByBatchNo(studentId, studentRegistration.getMusicGroupPaymentCalenderId() + "",
+                    DealStatusEnum.SUCCESS);
+        }
+
         List<Long> paymentOrderIdList = studentPaymentOrderList.stream().map(t -> t.getId()).collect(Collectors.toList());
 
         List<StudentPaymentOrderDetail> details = new ArrayList<StudentPaymentOrderDetail>();
-		if (paymentOrderIdList != null && paymentOrderIdList.size() > 0) {
-			details = studentPaymentOrderDetailDao.getWithIds(paymentOrderIdList);
-		}
+        if (paymentOrderIdList != null && paymentOrderIdList.size() > 0) {
+            details = studentPaymentOrderDetailDao.getWithIds(paymentOrderIdList);
+        }
 
         //查询乐器订单
         Long paymentOrderId = null;
-        		
-        for(StudentPaymentOrderDetail detail : details){
-        	if(detail.getType() == OrderDetailTypeEnum.ACCESSORIES || detail.getType() == OrderDetailTypeEnum.MUSICAL){
-	        	if(paymentOrderId == null || paymentOrderId < detail.getPaymentOrderId()){
-	    			paymentOrderId = detail.getPaymentOrderId();
-	    		}
-        	}
-        }
-
-		Set<Integer> refundSellOrderGoodsIds = new HashSet<Integer>();
-		if (details.size() > 0) {
-			refundSellOrderGoodsIds = getRefundGoodsId(details.stream().map(t -> t.getPaymentOrderId()).collect(Collectors.toList()));
-		}
-		
+
+        for (StudentPaymentOrderDetail detail : details) {
+            if (detail.getType() == OrderDetailTypeEnum.ACCESSORIES || detail.getType() == OrderDetailTypeEnum.MUSICAL) {
+                if (paymentOrderId == null || paymentOrderId < detail.getPaymentOrderId()) {
+                    paymentOrderId = detail.getPaymentOrderId();
+                }
+            }
+        }
+
+        Set<Integer> refundSellOrderGoodsIds = new HashSet<Integer>();
+        if (details.size() > 0) {
+            refundSellOrderGoodsIds = getRefundGoodsId(details.stream().map(t -> t.getPaymentOrderId()).collect(Collectors.toList()));
+        }
+
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         subjectChange.setStudentId(studentId);
         subjectChange.setOrganId(musicGroup.getOrganId());
         subjectChange.setCooperationOrganId(musicGroup.getCooperationOrganId());
         subjectChange.setMusicGroupId(musicGroupId);
 
-        if(paymentOrderId != null){
-        	subjectChange.setOrderId(paymentOrderId.intValue());
+        if (paymentOrderId != null) {
+            subjectChange.setOrderId(paymentOrderId.intValue());
         }
-		
+
         String accessoriesIds = "";
         BigDecimal accessoriesPrice = BigDecimal.ZERO;
         for (StudentPaymentOrderDetail detail : details) {
@@ -525,7 +525,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                     subjectChange.setOriginalMusicalGoods(goodsDao.get(goodsId));
                     subjectChange.setOriginalMusicalPrice(detail.getPrice());
                 }
-            } else if (detail.getType().equals(OrderDetailTypeEnum.ACCESSORIES)){
+            } else if (detail.getType().equals(OrderDetailTypeEnum.ACCESSORIES)) {
                 if (StringUtils.isNotBlank(detail.getGoodsIdList())) {
                     accessoriesPrice = accessoriesPrice.add(detail.getPrice());
                     accessoriesIds = accessoriesIds.length() > 0 ? accessoriesIds + "," + detail.getGoodsIdList() : detail.getGoodsIdList();
@@ -543,29 +543,29 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             }
 
             subjectChange.setOriginalAccessories(accessoriesId);
-            
+
             Map<Integer, Goods> goodsMap = goodsService.findGoodsByIds(accessoriesId).stream().collect(Collectors.toMap(Goods::getId, Goods -> Goods));
 
-			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[] 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)));
+            }
+
             //BigDecimal price = accessoriesGoods.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
             subjectChange.setOriginalAccessoriesPrice(accessoriesPrice);
         }
         //2.2 计算销售成本
         BigDecimal orderSellCost = BigDecimal.ZERO;
         if (paymentOrderIdList != null && paymentOrderIdList.size() > 0) {
-        	orderSellCost = sellOrderDao.getOrderSellCost(paymentOrderIdList);
+            orderSellCost = sellOrderDao.getOrderSellCost(paymentOrderIdList);
         }
         subjectChange.setOriginalCost(orderSellCost == null ? BigDecimal.ZERO : orderSellCost);
         return subjectChange;
@@ -641,8 +641,8 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             if (StringUtils.isNotBlank(goodsIds)) {
                 List<Integer> goodsIdList = Arrays.stream(goodsIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
                 //退原订单商品
-                if(subjectChange.getOriginalOrderId() != null){
-                	sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue(), false);
+                if (subjectChange.getOriginalOrderId() != null) {
+                    sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue(), false);
                 }
                 //添加新订单
                 List<SellOrder> sellOrders = this.addSellOrder(studentPaymentOrder.getId(),
@@ -650,8 +650,8 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                         goodsIdList,
                         studentPaymentOrder.getExpectAmount(),
                         studentPaymentOrder.getBalancePaymentAmount(),
-                        subjectChange.getKitGroupPurchaseType(),studentPaymentOrder.getCouponRemitFee());
-                if(sellOrders != null && sellOrders.size() > 0){
+                        subjectChange.getKitGroupPurchaseType(), studentPaymentOrder.getCouponRemitFee());
+                if (sellOrders != null && sellOrders.size() > 0) {
                     SubjectChange change = subjectChangeDao.get(subjectChange.getId());
                     BigDecimal instrumentAmount = sellOrders.stream().filter(e -> e.getType() == SellTypeEnum.INSTRUMENT).map(e -> e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
                     BigDecimal accessoriesAmount = sellOrders.stream().filter(e -> e.getType() == SellTypeEnum.ACCESSORIES).map(e -> e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -772,7 +772,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                                         List<Integer> goodsIds,
                                         BigDecimal totalAmount,
                                         BigDecimal balance,
-                                        KitGroupPurchaseTypeEnum kitGroupPurchaseType,BigDecimal couponRemitAmount) {
+                                        KitGroupPurchaseTypeEnum kitGroupPurchaseType, BigDecimal couponRemitAmount) {
         if (goodsIds == null || goodsIds.size() <= 0) {
             return null;
         }

+ 93 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponCodeServiceImpl.java

@@ -5,9 +5,8 @@ import com.ym.mec.biz.dal.dao.SysCouponCodeDao;
 import com.ym.mec.biz.dal.dao.SysCouponDao;
 import com.ym.mec.biz.dal.dto.HorseRaceLampDto;
 import com.ym.mec.biz.dal.dto.SysCouponCodeDto;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.entity.SysCoupon;
-import com.ym.mec.biz.dal.entity.SysCouponCode;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.CouponDetailTypeEnum;
 import com.ym.mec.biz.dal.enums.CouponTypeEnum;
 import com.ym.mec.biz.dal.page.SysCouponCodeQueryInfo;
 import com.ym.mec.biz.service.SysCouponCodeService;
@@ -31,7 +30,9 @@ import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 
 @Service
 public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCode> implements SysCouponCodeService {
@@ -156,7 +157,6 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
             SysCouponCode couponCode = new SysCouponCode();
             BeanUtils.copyProperties(sysCouponCode, couponCode);
             couponCode.setCode(String.valueOf(idGeneratorService.generatorId("coupon")));
-            couponCode.setTenantId(tenantId);
             couponCodes.add(couponCode);
         }
         sysCouponCodeDao.batchInsert(couponCodes);
@@ -217,12 +217,18 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
     @Override
     @Transactional(rollbackFor = Exception.class)
     public StudentPaymentOrder use(List<Integer> couponIdList, BigDecimal amount, Boolean useFlag) {
+        return use(couponIdList, amount, useFlag, null);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public StudentPaymentOrder use(List<Integer> couponIdList, BigDecimal amount, Boolean useFlag, String... allowType) {
         StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
         if (CollectionUtils.isNotEmpty(couponIdList)) {
             BigDecimal fullAmount = BigDecimal.ZERO;
             BigDecimal faceAmount = BigDecimal.ZERO;
             //校验优惠券
-            List<SysCouponCodeDto> couponCodeDtoList = checkCoupon(couponIdList);
+            List<SysCouponCodeDto> couponCodeDtoList = checkCoupon(couponIdList, allowType);
 
             for (SysCouponCodeDto sysCouponCodeDto : couponCodeDtoList) {
                 CouponTypeEnum couponType = sysCouponCodeDto.getCouponType();
@@ -258,9 +264,12 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
     }
 
     @Override
-    public List<SysCouponCodeDto> checkCoupon(List<Integer> couponIdList) {
+    public List<SysCouponCodeDto> checkCoupon(List<Integer> couponIdList, String... allowType) {
         Date date = new Date();
         List<SysCouponCodeDto> couponCodeDtoList = findByIdList(couponIdList);
+        if (CollectionUtils.isEmpty(couponCodeDtoList)) {
+            throw new BizException("操作失败:未查询到优惠券");
+        }
         if (couponIdList.size() != couponCodeDtoList.size()) {
             throw new BizException("操作失败:优惠券数据异常");
         }
@@ -275,11 +284,88 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
             if (date.after(sysCouponCodeDto.getUseDeadlineDate())) {
                 throw new BizException("操作失败:优惠券已过期");
             }
+            //该商品只允许使用 allowType参数内的优惠券类型,null则不验证
+            if (Objects.nonNull(allowType) && !WrapperUtil.checkStr(sysCouponCodeDto.getTypeDetail(), allowType)) {
+                throw new BizException("操作失败 : 优惠券类型使用错误");
+            }
         }
-
         return couponCodeDtoList;
     }
 
+    /**
+     * 获取优惠券相关参数-校验优惠券和传入的支付金额是否合法
+     *
+     * @param couponIdList 优惠券集合
+     * @param total        本次订单所有商品的总数量
+     * @param payAmount    页面传入的本次支付的金额
+     * @param allowType    本次允许使用的优惠券类型,null则不验证
+     */
+    @Override
+    public CouponPayParam getCouponPayParam(List<Integer> couponIdList, Integer total, BigDecimal payAmount, String... allowType) {
+        if (CollectionUtils.isEmpty(couponIdList)) {
+            return null;
+        }
+        //查询本次付款使用的优惠券
+        List<SysCouponCodeDto> sysCouponCodeDtoList = checkCoupon(couponIdList, allowType);
+        //全类型优惠券的总额度
+        BigDecimal fullTypeTotal = new BigDecimal(0);
+        //非全类型优惠券的总额度
+        BigDecimal notFullTypeTotal = new BigDecimal(0);
+        //非全类型优惠券的总数量
+        AtomicInteger notFullTypeTotalNum = new AtomicInteger(0);
+        //优惠券减免的总额度
+        BigDecimal couponRemitTotal = new BigDecimal(0);
+        //交易阈值 最后付款的金额大于该值就不对
+        BigDecimal threshold;
+
+        for (SysCouponCodeDto d : sysCouponCodeDtoList) {
+            if (d.getTypeDetail().equals(CouponDetailTypeEnum.FULLCOUPON.getCode())) {
+                fullTypeTotal = fullTypeTotal.add(d.getFullAmount());
+            } else {
+                notFullTypeTotal = notFullTypeTotal.add(d.getFullAmount());
+                notFullTypeTotalNum.set(notFullTypeTotalNum.incrementAndGet());
+            }
+            couponRemitTotal = couponRemitTotal.add(d.getFaceValue());
+        }
+        //阈值 = (全品类券总面值 ÷ 总商品数量) + (非全品类券总面值 ÷ 非全品类券的数量)
+        threshold = fullTypeTotal.divide(new BigDecimal(total), 3, RoundingMode.HALF_UP)
+                .add(notFullTypeTotal.divide(new BigDecimal(notFullTypeTotalNum.get()), 3, RoundingMode.HALF_UP));
+
+        if (payAmount.compareTo(threshold) < 0) {
+            throw new BizException("优惠券使用错误,交易失败!");
+        }
+        //将各种类型的优惠券合并 算出总面试 总减免金额
+        Map<String, CouponPayTypeInfo> couponTypeInfo = new HashMap<>();
+        //根据CouponDetailTypeEnum 进行分组集合
+        WrapperUtil.groupList(sysCouponCodeDtoList, SysCouponCodeDto::getTypeDetail)
+                .forEach((typeDetail, list) -> {
+                    CouponPayTypeInfo coupon = new CouponPayTypeInfo();
+                    list.forEach(c -> {
+                        coupon.setCouponAmount(coupon.getCouponAmount().add(c.getFullAmount()));
+                        coupon.setFaceValue(coupon.getFaceValue().add(c.getFaceValue()));
+                    });
+                    coupon.setTypeDetail(typeDetail);
+                    couponTypeInfo.put(typeDetail, coupon);
+                });
+
+        CouponPayParam result = new CouponPayParam();
+        result.setCouponRemitTotal(couponRemitTotal);
+        result.setCouponTypeInfo(couponTypeInfo);
+        return result;
+    }
+
+    /**
+     * 获取优惠券相关参数-校验优惠券和传入的支付金额是否合法
+     *
+     * @param couponIdList 优惠券集合
+     * @param total        本次订单所有商品的总数量
+     * @param payAmount    页面传入的本次支付的金额
+     */
+    @Override
+    public CouponPayParam getCouponPayParam(List<Integer> couponIdList, Integer total, BigDecimal payAmount) {
+        return getCouponPayParam(couponIdList, total, payAmount, null);
+    }
+
     @Override
     public List<SysCouponCodeDto> findByIdList(List<Integer> couponIdList) {
         return sysCouponCodeDao.findByIdList(couponIdList);

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

@@ -153,7 +153,7 @@ public class SysCouponIssueRecordServiceImpl extends ServiceImpl<SysCouponIssueR
      */
     @Override
     public List<SysCoupon> queryCanBeGetCoupon(Integer userId) {
-        return baseMapper.queryUserCanGetCoupon(userId);
+        return baseMapper.queryUserCanGetCoupon(userId,TenantContextHolder.getTenantId());
     }
 
     /**

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponServiceImpl.java

@@ -153,6 +153,9 @@ public class SysCouponServiceImpl extends BaseServiceImpl<Integer, SysCoupon> im
                 if (Objects.isNull(sysCoupon.getFullAmount())) {
                     throw new BizException("请指定达标金额");
                 }
+                if (sysCoupon.getFaceValue().compareTo(sysCoupon.getFullAmount()) < 0) {
+                    throw new BizException("优惠的金额不能超过优惠券满减额度");
+                }
                 break;
             default:
                 throw new BizException("请指定优惠券类型");

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

@@ -20,6 +20,9 @@ public class SysEmailServiceImpl extends ServiceImpl<SysEmailDao, SysEmail> impl
 
     private final static Logger logger = LoggerFactory.getLogger(SysEmailServiceImpl.class);
 
-
+    @Override
+    public SysEmail query() {
+        return baseMapper.query();
+    }
 }
 

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

@@ -81,6 +81,8 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     private TenantOrderRecordService tenantOrderRecordService;
     @Autowired
     private TenantAssetsInfoService assetsInfoService;
+    @Autowired
+    private StudentService studentService;
 
     /**
      * 新增机构
@@ -658,7 +660,14 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         } else {
             d1 = null;
         }
-        tps.setPayDateEnd(d1);
+        tps.setValidRemaining(DateUtil.daysBetween(new Date(), tps.getExpiryDateEnd()));
+        tps.setSumBalance(tps.getBalance().add(tps.getFrozenAmount()));
+        tps.setExpiryDateEnd(d1);
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("tenantId", tenantId);
+        int studentCount = studentService.findCount(params);
+        tps.setStudentNum(studentCount);
         return tps;
     }
 

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java

@@ -13,6 +13,7 @@ import com.ym.mec.biz.service.*;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageUtil;
 import com.ym.mec.common.page.WrapperUtil;
+import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.thirdparty.adapay.Payment;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -55,6 +56,10 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
 
     @Override
     public PageInfo<TenantOrderRecord> queryPage(TenantOrderRecordDto dto) {
+        Integer tenantId = TenantContextHolder.getTenantId();
+        if (dto.getTenantId() == null) {
+            dto.setTenantId(tenantId.toString());
+        }
         Page<TenantOrderRecord> pageInfo = PageUtil.getPage(dto.getPage(), dto.getRows());
         pageInfo.setDesc("a.created_time_ ");
         WrapperUtil.toListOptional(dto.getTenantId())

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 3518 - 3513
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java


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

@@ -119,7 +119,19 @@
     </update>
 
     <select id="findByPlatformOrderId" resultMap="CloudTeacherOrder">
-        select * from cloud_teacher_order where platform_order_id_ = #{platformOrderId}
+        select * from cloud_teacher_order cto
+        left join sys_user su on cto.student_id_ = su.id_
+        where cto.platform_order_id_ = #{platformOrderId} and su.del_flag_ = 0
+    </select>
+
+    <resultMap id="mapResult" type="java.util.HashMap">
+        <result property="key" column="studentId"/>
+        <result property="value" column="phone" />
+    </resultMap>
+    <select id="findUserNameByOrderId" resultMap="mapResult">
+        select cto.student_id_ as studentId, su.phone_ as phone from cloud_teacher_order cto
+        left join sys_user su on cto.student_id_ = su.id_
+        where platform_order_id_ = #{platformOrderId} and su.del_flag_ = 0
     </select>
 
     <update id="updateOrderStatusOK">

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

@@ -194,7 +194,7 @@
     </select>
     <sql id="queryPageSql">
         <where>
-        	s.tenant_id_ = #{tenantId}
+        	s.tenant_id_ = #{tenantId} and su.del_flag_ = 0
             <if test="organId != null and organId != ''">
                 AND FIND_IN_SET(su.organ_id_,#{organId})
             </if>

+ 6 - 4
mec-biz/src/main/resources/config/mybatis/SubjectMapper.xml

@@ -157,14 +157,16 @@
         </where>
     </select>
     <select id="queryPageByIdOrName" resultMap="Subject">
-        SELECT * FROM `subject`
+        SELECT *,
+               (select name_ from `subject` s1 where s.parent_subject_id_ = s1.id_) as parentSubjectName
+               FROM `subject` s
         <where>
-            del_flag_ = 0 AND parent_subject_id_  != 0
+            s.del_flag_ = 0 AND s.parent_subject_id_  != 0
             <if test="parentSubjectId != null and parentSubjectId != ''">
-                AND parent_subject_id_ = #{parentSubjectId}
+                AND s.parent_subject_id_ = #{parentSubjectId}
             </if>
             <if test="search != null and search != ''">
-                AND (id_ = #{search} or name_ like concat('%', #{search}, '%'))
+                AND (s.id_ = #{search} or s.name_ like concat('%', #{search}, '%'))
             </if>
         </where>
         <include refid="global.limit"/>

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

@@ -145,6 +145,7 @@
 
 	<select id="countWithUserAndCoupon" resultType="int">
 		SELECT COUNT(id_) FROM sys_coupon_code WHERE user_id_=#{userId} AND coupon_id_=#{couponId}
+		                                         AND usage_status_  <![CDATA[ <> ]]> 2
 	</select>
 
 	<sql id="querySysCouponUseListCondition">

+ 48 - 35
mec-biz/src/main/resources/config/mybatis/SysCouponIssueRecordMapper.xml

@@ -96,8 +96,7 @@
     <update id="opsConsume" parameterType="object">
         UPDATE sys_coupon
         SET
-            consume_num_ = consume_num_ - #{consumeNum},
-            stock_count_ = stock_count_ + #{consumeNum}
+            consume_num_ = consume_num_ - #{consumeNum}
         WHERE id_ = #{id}
     </update>
 
@@ -128,39 +127,53 @@
     </resultMap>
 
     <select id="queryUserCanGetCoupon" resultMap="SysCoupon">
-        select id_,
-               name_,
-               description_,
-               status_,
-               issuance_type_,
-               type_,
-               type_detail_,
-               face_value_,
-               full_amount_,
-               limit_exchange_num_,
-               effective_type_,
-               deadline_,
-               effective_start_time_,
-               effective_expire_time_,
-               end_date_,
-               start_date_,
-               stock_count_,
-               consume_num_,
-               warning_stock_num_,
-               warning_status_,
-               create_time_,
-               update_time_,
-               tenant_id_
-        from sys_coupon
-        where issuance_type_ = 0
-          and status_ = 1
-          and (effective_expire_time_ > now() or deadline_ > 0)
-          and (stock_count_ >= consume_num_ or stock_count_ = -1)
-          and id_ not in (
-            select distinct coupon_id_
-            from sys_coupon_code
-            where user_id_ = #{userId}
-        )
+        SELECT DISTINCT
+            id_,
+            name_,
+            description_,
+            status_,
+            issuance_type_,
+            type_,
+            type_detail_,
+            face_value_,
+            full_amount_,
+            limit_exchange_num_,
+            effective_type_,
+            deadline_,
+            effective_start_time_,
+            effective_expire_time_,
+            end_date_,
+            start_date_,
+            stock_count_,
+            consume_num_,
+            warning_stock_num_,
+            warning_status_,
+            create_time_,
+            update_time_,
+            tenant_id_
+        FROM
+            sys_coupon AS a
+                LEFT JOIN
+            (SELECT
+                 COUNT(coupon_id_) AS couponNum,
+                 coupon_id_
+             FROM
+                 sys_coupon_code
+             WHERE usage_status_  <![CDATA[ <> ]]> 2 AND user_id_ = #{userId}
+             GROUP BY coupon_id_) AS b
+            ON a.id_ = b.coupon_id_
+        WHERE issuance_type_ = 0
+          AND status_ = 1
+          AND tenant_id_ = #{tenantId}
+          AND a.`limit_exchange_num_` > IFNULL(b.couponNum,0)
+          AND (
+                    effective_expire_time_ > NOW()
+                OR deadline_ > 0
+            )
+          AND (
+                    stock_count_ > consume_num_
+                OR stock_count_ = - 1
+            )
     </select>
 
 </mapper>

+ 2 - 5
mec-biz/src/main/resources/config/mybatis/SysCouponMapper.xml

@@ -111,10 +111,7 @@
     <update id="updateExchange" parameterType="map">
         UPDATE sys_coupon
         <set>
-            consume_num_ =consume_num_ + #{param.exchangeNum},
-            <if test="param.checkStock != null">
-                stock_count_ = stock_count_ - #{param.exchangeNum},
-            </if>
+            consume_num_ = consume_num_ + #{param.exchangeNum},
             <if test="param.warningStatus != null">
                 warning_status_ = #{param.warningStatus},
             </if>
@@ -123,7 +120,7 @@
         WHERE id_ = #{param.id}
         and tenant_id_ = #{param.tenantId}
         <if test="param.checkStock != null">
-           and stock_count_ >= #{param.exchangeNum}
+           and stock_count_ > (consume_num_ + #{param.exchangeNum})
         </if>
     </update>
 

+ 27 - 22
mec-biz/src/main/resources/config/mybatis/SysEmailMapper.xml

@@ -1,28 +1,33 @@
 <?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.SysEmailDao">
-  <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.SysEmail">
-                       <id column="id_" jdbcType="INTEGER" property="id"/>
-                                  <result column="host_name_" jdbcType="VARCHAR" property="hostName"/>
-                                  <result column="smtp_port_" jdbcType="INTEGER" property="smtpPort"/>
-                                  <result column="user_name_" jdbcType="VARCHAR" property="userName"/>
-                                  <result column="password_" jdbcType="VARCHAR" property="password"/>
-                                  <result column="from_" jdbcType="VARCHAR" property="from"/>
-                                  <result column="from_name_" jdbcType="VARCHAR" property="fromName"/>
-                                  <result column="tenant_id_" jdbcType="INTEGER" property="tenantId"/>
-                </resultMap>
-  
-  <sql id="Base_Column_List">    
-                                            id_, host_name_, smtp_port_, user_name_, password_, from_, from_name_, tenant_id_
-  </sql>
-  
-   <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
+    <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.SysEmail">
+        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="host_name_" jdbcType="VARCHAR" property="hostName"/>
+        <result column="smtp_port_" jdbcType="INTEGER" property="smtpPort"/>
+        <result column="user_name_" jdbcType="VARCHAR" property="userName"/>
+        <result column="password_" jdbcType="VARCHAR" property="password"/>
+        <result column="from_" jdbcType="VARCHAR" property="from"/>
+        <result column="from_name_" jdbcType="VARCHAR" property="fromName"/>
+        <result column="tenant_id_" jdbcType="INTEGER" property="tenantId"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id_, host_name_, smtp_port_, user_name_, password_, from_, from_name_, tenant_id_
+    </sql>
+
+    <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
             parameterType="com.ym.mec.biz.dal.entity.SysEmail">
-       insert into sys_email(host_name_, smtp_port_, user_name_, password_, from_, from_name_, tenant_id_)
-       values
-       <foreach collection="entities" item="entity" separator=",">
-       (#{entity.hostName}, #{entity.smtpPort}, #{entity.userName}, #{entity.password}, #{entity.from}, #{entity.fromName}, #{entity.tenantId})
-       </foreach>
-   </insert>
+        insert into sys_email(host_name_, smtp_port_, user_name_, password_, from_, from_name_, tenant_id_)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.hostName}, #{entity.smtpPort}, #{entity.userName}, #{entity.password}, #{entity.from},
+            #{entity.fromName}, #{entity.tenantId})
+        </foreach>
+    </insert>
+    <select id="query" resultType="com.ym.mec.biz.dal.entity.SysEmail">
+        select *
+        from sys_email
+    </select>
 
 </mapper>

+ 2 - 2
mec-biz/src/main/resources/config/mybatis/TenantInfoMapper.xml

@@ -95,9 +95,9 @@
                    tp.expiry_date_ as expiryDate,
                    tp.expiry_count_  as expiryCount,
                    tp.expiry_unit_ as expiryUnit,
-
                    ta.balance_ as balance,
-                   ta.frozen_amount_ as frozenAmount
+                   ta.frozen_amount_ as frozenAmount,
+                   psd.student_up_limit_ as studentUpLimit
             FROM `tenant_info` t
                      left join tenant_assets_info ta on ta.tenant_id_ = t.id_
                      left join tenant_product_info tp on tp.tenant_id_ = t.id_

+ 10 - 6
mec-biz/src/main/resources/config/mybatis/TenantOrderRecordMapper.xml

@@ -54,6 +54,9 @@
                 LEFT JOIN tenant_info AS b
                           ON a.tenant_id_ = b.id_
     <where>
+        <if test="param.tenantId != null">
+            a.tenant_id_ = #{param.tenantId}
+        </if>
         <if test="param.orderNo != null ">
             AND a.`order_no_` = #{param.orderNo}
         </if>
@@ -66,12 +69,13 @@
         <if test="param.orderState != null ">
             AND a.`order_state_` = #{param.orderState}
         </if>
-        <if test="param.tenantIdList != null ">
-            AND a.`tenant_id_`  IN
-            <foreach collection="param.tenantIdList" item="id" open="(" close=")" separator=",">
-                #{id}
-            </foreach>
-        </if>
+<!--        前端去掉 tenantId 搜索 -->
+<!--        <if test="param.tenantIdList != null ">-->
+<!--            AND a.`tenant_id_`  IN-->
+<!--            <foreach collection="param.tenantIdList" item="id" open="(" close=")" separator=",">-->
+<!--                #{id}-->
+<!--            </foreach>-->
+<!--        </if>-->
         <if test="param.startDate != null">
             AND a.`created_time_` <![CDATA[ >= ]]>  #{param.startDate}
         </if>

+ 12 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/page/WrapperUtil.java

@@ -158,6 +158,18 @@ public class WrapperUtil<T> {
     }
 
     /**
+     * 检查str中是否包含 o
+     * 包含返回true
+     */
+    public static boolean checkStr(String o, String... str) {
+        if (ObjPredicate.test(str)) {
+            return Arrays.asList(str).contains(o);
+        } else {
+            return false;
+        }
+    }
+
+    /**
      * 根据分组groupVal进行聚合分组
      *
      * @param list     待聚合的集合

+ 14 - 0
mec-web/src/main/java/com/ym/mec/web/controller/CloudTeacherOrderController.java

@@ -1,13 +1,17 @@
 package com.ym.mec.web.controller;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.ym.mec.biz.dal.entity.CloudTeacherStudent;
+import com.ym.mec.biz.dal.entity.TenantOrderRecord;
 import com.ym.mec.biz.dal.page.CloudTeacherAddQueryInfo;
 import com.ym.mec.biz.dal.page.CloudTeacherOrderQueryInfo;
 import com.ym.mec.biz.service.CloudTeacherOrderService;
 import com.ym.mec.biz.service.OrderPayOpsService;
+import com.ym.mec.biz.service.TenantOrderRecordService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.WrapperUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
@@ -33,6 +37,9 @@ public class CloudTeacherOrderController extends BaseController {
     @Autowired
     private CloudTeacherOrderService cloudTeacherOrderService;
 
+    @Autowired
+    private TenantOrderRecordService tenantOrderRecordService;
+
     @ApiOperation(value = "手动添加会员")
     @PostMapping("/addStudents")
     @PreAuthorize("@pcs.hasPermissions('cloudTeacherOrder/addStudents')")
@@ -79,4 +86,11 @@ public class CloudTeacherOrderController extends BaseController {
     public HttpResponseResult<Boolean> payCheck(@RequestParam String orderNo) throws Exception {
         return succeed(cloudTeacherOrderService.payCheck(orderNo));
     }
+
+    @ApiOperation(value = "测试短信")
+    @GetMapping("/testsms")
+    public HttpResponseResult<Integer> testsms(@RequestParam String orderNo) throws Exception {
+        TenantOrderRecord tor = tenantOrderRecordService.getOne(new WrapperUtil<TenantOrderRecord>().hasEq("order_no_", orderNo).queryWrapper());
+        return succeed(cloudTeacherOrderService.sendSms(tor));
+    }
 }

+ 22 - 3
mec-web/src/main/java/com/ym/mec/web/controller/SysEmailController.java

@@ -1,9 +1,11 @@
 package com.ym.mec.web.controller;
 
-
-
 import com.ym.mec.biz.dal.entity.SysEmail;
 import com.ym.mec.biz.service.SysEmailService;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import com.ym.mec.common.controller.BaseController;
 
@@ -16,7 +18,8 @@ import javax.annotation.Resource;
  * @since 2022-01-04 17:07:43
  */
 @RestController
-@RequestMapping("/sysEmail")
+@Api(tags = "系统邮件服务")
+@RequestMapping("sysEmail")
 public class SysEmailController extends BaseController {
     /**
      * 服务对象
@@ -24,5 +27,21 @@ public class SysEmailController extends BaseController {
     @Resource
     private SysEmailService sysEmailService;
 
+
+    @ApiOperation(value = "修改")
+    @PostMapping("/update")
+    @PreAuthorize("@pcs.hasPermissions('sysEmail/update')")
+    public HttpResponseResult<SysEmail> update(@RequestBody SysEmail sysEmail) {
+        sysEmailService.updateById(sysEmail);
+        return succeed(sysEmail);
+    }
+
+    @ApiOperation(value = "查询")
+    @GetMapping("/query")
+    @PreAuthorize("@pcs.hasPermissions('sysEmail/query')")
+    public HttpResponseResult<SysEmail> query() {
+        return succeed(sysEmailService.query());
+    }
+
 }
 

+ 4 - 3
mec-web/src/main/java/com/ym/mec/web/controller/TenantInfoController.java

@@ -76,9 +76,10 @@ public class TenantInfoController extends BaseController {
     }
 
     @ApiOperation("查询机构产品")
-    @GetMapping(value = "/queryTenantInfoSumm/{id}")
-    public HttpResponseResult<TenantProductSumm> queryTenantInfoProductSumm(@ApiParam(value = "机构ID", required = true) @PathVariable("id") Integer id) {
-        return succeed(tenantInfoService.queryTenantInfoProductSumm(id));
+    @GetMapping(value = "/queryTenantInfoSumm")
+    public HttpResponseResult<TenantProductSumm> queryTenantInfoProductSumm() {
+        Integer tenantId = TenantContextHolder.getTenantId();
+        return succeed(tenantInfoService.queryTenantInfoProductSumm(tenantId));
     }
 
     @ApiImplicitParams({

Vissa filer visades inte eftersom för många filer har ändrats