yonge 3 年之前
父節點
當前提交
dca1b475d2

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

@@ -104,10 +104,6 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
      */
     Map<String, Object> pay(List<CloudTeacherStudent> cloudTeacherStudents) throws Exception;
 
-    Msg payNotify(Msg msg) throws Exception;
-
-    Boolean payCheck(TenantOrderRecord record, int i);
-
     Boolean payCheck(String orderNo) throws Exception;
 
     PageInfo<CloudTeacherStudent> queryRecord(CloudTeacherOrderQueryInfo cloudTeacherOrderQueryInfo);

+ 6 - 92
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -177,26 +177,24 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     public Map<String, Object> pay(List<CloudTeacherStudent> cloudTeacherStudents) throws Exception {
 
         if (cloudTeacherStudents.size() == 0) {
-            throw new Exception("至少选择一条记录");
+            throw new Exception("请选择选择一条记录");
         }
         List<Integer> ids = cloudTeacherStudents.stream().map(CloudTeacherStudent::getCloudTeacherOrderId).collect(
                 Collectors.toList());
         if (cloudTeacherOrderDao.checkOrdered(StringUtil.join(ids, ",")) != 0) {
-            throw new Exception("学生已经支付");
+            throw new Exception("存在已经支付完成的学生,请重新选择");
         }
         Integer tenantId = null;
+        BigDecimal sumAmount = new BigDecimal(0);
         for (CloudTeacherStudent cts: cloudTeacherStudents) {
             if (cts.getAmount() == null) {
-                throw new Exception("金额错误在, 学生编号: " + cts.getStudentId().toString());
+                throw new Exception("支付金额异常, 请按规定操作 ");
             }
+            sumAmount = sumAmount.add(cts.getAmount());
             if (tenantId == null) {
                 tenantId = cts.getTenantId();
             }
         }
-        BigDecimal sumAmount = new BigDecimal(0);
-        for (CloudTeacherStudent cts: cloudTeacherStudents) {
-            sumAmount = sumAmount.add(cts.getAmount());
-        }
         return this.payExec(sumAmount, tenantId, cloudTeacherStudents);
     }
 
@@ -235,68 +233,12 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
             }
         }
         if (orderState == 1) { // 成功手直接成功
-            this.paySuccess(record);
+            //this.paySuccess(record);
         }
         log.info("tenant pay >>>>> " + JSON.toJSONString(payMap));
         return payMap;
     }
 
-    @Transactional(rollbackFor = Exception.class)
-    public Msg payNotify(Msg msg) throws Exception {
-        log.info("tenant orderNotify >>>>> " + msg.toString());
-        msg.setMsg("fail");
-        Map<String, String> notifyMap = JSON.parseObject(msg.getResponseParameters(), Map.class);
-        TenantOrderRecord record = tenantOrderRecordService.getOne(
-                new QueryWrapper<TenantOrderRecord>().eq("order_no_", notifyMap.get("orderNo")));
-        record.setOrderNo(notifyMap.get("merMerOrderNo"));
-        record.setTransNo(notifyMap.get("orderNo"));
-        String channelType = notifyMap.get("channelType").equals("1") ? "WXPay" : (notifyMap.get("channelType").equals("2") ? "Alipay" : "quickPay");
-        record.setPayChannel(channelType);
-
-        //支付中订单存在,更新状态
-        if (msg.getResponseType().equals("1") && notifyMap.size() > 0 && msg.getCode().equals("88")) {
-            //tradeState 88就是正确的 其他错误的
-            //            DealStatusEnum
-            //            notifyMap.put("totalMoney", notifyMap.get("payAmount"));
-            this.paySuccess(record);
-            record.setOrderState(1);
-            msg.setCode("000000");
-            msg.setMsg("success");
-        } else {
-            log.info("tenant orderNotify fail");
-            //支付失败
-            record.setOrderState(2);
-        }
-        tenantOrderRecordService.update(record, new QueryWrapper<TenantOrderRecord>()
-                .eq("order_no_", record.getOrderNo()));
-        log.info("tenant orderNotify return>>>>> " + msg.toString());
-        return msg;
-    }
-
-    @Override
-    public Boolean payCheck(TenantOrderRecord record, int i) {
-        RBucket<Object> bucket = redissonClient.getBucket("tenant_check_order");
-        if (!bucket.trySet(1, 3L, TimeUnit.SECONDS)) {
-            return false;
-        }
-        log.info("  团练宝激活 check >>>>> {} ", i);
-        checkTransOrderState(record);
-        if (record.getOrderState() == 1) {
-            tenantOrderRecordService.updateById(record);
-            try {
-                this.paySuccess(record); // 充值成功
-                log.info("  团练宝激活 成功 >>>>> {}", i);
-                return true;
-            } catch (Exception e) {
-                e.printStackTrace();
-                return false;
-            }
-        }
-        bucket.delete();
-        log.info(" 团练宝 支付 失败 >>>>> {} ", i);
-        return false;
-    }
-
     @Override
     public int sendSms(TenantOrderRecord record) {
         List<Mapper> orderUsers = cloudTeacherOrderDao.findUserNameByOrderId(record.getId());
@@ -342,34 +284,6 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         }
     }
 
-    private boolean paySuccess(TenantOrderRecord record) throws Exception {
-        log.info("tenant orderNotify update order status start" + record.getId().toString());
-        if (record.getId() == null) {
-            throw new Exception("订单未找到");
-        }
-        record.setPayDate(new Date());
-        record.setPayTime(new Date());
-        tenantOrderRecordService.updateById(record);
-        // cloudTeacherOrderDao.updateOrderStatusOK(record.getId()
-        List<CloudTeacherOrder> cloudTeacherOrders = cloudTeacherOrderDao.findByPlatformOrderId(record.getId());
-        Date startTime = DateUtil.trunc(new Date());
-        Date endTime = new Date();
-        for (CloudTeacherOrder cto : cloudTeacherOrders) {
-            endTime = calcCloudTeacherOrderTime(cto, startTime, endTime);
-            cto.setStartTime(startTime);
-            cto.setEndTime(endTime);
-            cto.setStatus(2);
-            cloudTeacherOrderDao.update(cto);
-            log.info("团练宝更新订单");
-            studentService.updateMemberRank(cto.getStudentId(), cto.getType(), cto.getTime(), 1);
-            log.info("团练宝更新学生");
-        }
-
-        log.info("tenant orderNotify update order status end");
-        sendSms(record);
-        return true;
-    }
-
     public Boolean payCheck(String orderNo) throws Exception {
         TenantOrderRecord record = tenantOrderRecordService.getOne(new QueryWrapper<TenantOrderRecord>().eq("order_no_", orderNo));
         return record.getOrderState() == 1;

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

@@ -160,13 +160,12 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
     // 团练宝激活支付
     private Map<String, Object> cloudTeacherOrder(PaymentParam payParam) {
         TenantOrderRecord tenantOrderRecord = getTenantOrderRecord(payParam.getOrderNo());
-        if (tenantOrderRecord.getOrderState() == 1) {
-            throw new BizException("订单已完成支付.");
+        if (tenantOrderRecord.getOrderState() != 0) {
+            throw new BizException("订单已处理");
         }
         Map<String, Object> payment = checkOrderGetPayment(payParam, tenantOrderRecord);
         // 团练宝激活支付 主动延迟检查订单
         log.info("executePayment delayCheckCloudTeacherOrder >>>>> ");
-        delayCheckCloudTeacherOrder(tenantOrderRecord);
         return payment;
     }
 
@@ -420,31 +419,6 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         });
     }
 
-    // 检查云教室
-    private void delayCheckCloudTeacherOrder(TenantOrderRecord record) {
-        RBucket<Object> bucket = redissonClient.getBucket("delay_check_cloud_tenant");
-        if (!bucket.trySet(1, 15L, TimeUnit.SECONDS)) {
-            return;
-        }
-        //异步
-        CompletableFuture.runAsync(() -> {
-            //检查5次
-            Boolean ret;
-            for (int i = 0; i <= 20; i++) { // 检查5分钟
-                try {
-                    ret = cloudTeacherOrderService.payCheck(record, i);
-                    if (ret) break;
-                    Thread.sleep(3000);//每3秒触发一次
-                    log.info("团练宝激活支付 重试>>>>>  start {}", i);
-                } catch (Exception e) {
-                    log.info("团练宝激活支付 异常 : {}", e.toString());
-                    e.printStackTrace();
-                }
-            }
-            bucket.delete();
-        });
-    }
-
     // 检查机构充值
     private void delayCheckTenantRecharge(TenantOrderRecord record) {
         RBucket<Object> bucket = redissonClient.getBucket("delay_check_recharge_tenant");

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

@@ -1,10 +1,18 @@
 package com.ym.mec.biz.service.impl;
 
+import static com.ym.mec.biz.dal.enums.PeriodEnum.DAY;
+import static com.ym.mec.biz.dal.enums.PeriodEnum.MONTH;
+import static com.ym.mec.biz.dal.enums.PeriodEnum.QUARTERLY;
+import static com.ym.mec.biz.dal.enums.PeriodEnum.YEAR;
+import static com.ym.mec.biz.dal.enums.PeriodEnum.YEAR_HALF;
+
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
 import com.ym.mec.biz.dal.dao.TenantOrderRecordDao;
+import com.ym.mec.biz.dal.dto.Mapper;
 import com.ym.mec.biz.dal.dto.TenantOrderRecordDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
@@ -12,12 +20,15 @@ import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.enums.TenantOrderRecordEnum;
 import com.ym.mec.biz.service.*;
+import com.ym.mec.common.exception.BizException;
 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 com.ym.mec.thirdparty.message.MessageSenderPluginContext;
+import com.ym.mec.util.date.DateUtil;
+
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.joda.time.LocalDateTime;
@@ -58,6 +69,10 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
     private TenantConfigService tenantConfigService;
     @Autowired
     private SysMessageService sysMessageService;
+    @Autowired
+    private CloudTeacherOrderDao cloudTeacherOrderDao;
+    @Autowired
+    private StudentService studentService;
     //订单不存在
     private static final String PAYMENT_ID_NOT_EXISTS = "payment_id_not_exists";
 
@@ -68,6 +83,10 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
         checkOrder.put(TenantOrderRecordEnum.TENANT_OPEN.getCode(), this::open);
         //续费
         checkOrder.put(TenantOrderRecordEnum.TENANT_RENEW.getCode(), this::renew);
+        //激活团练宝
+        checkOrder.put(TenantOrderRecordEnum.CLOUD_TEACHER.getCode(), this::activeCloudTeacher);
+        //充值
+        checkOrder.put(TenantOrderRecordEnum.TENANT_RECHARGE.getCode(), this::rechargeSuccess);
     }
 
     @Override
@@ -184,6 +203,36 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
         //删除订单数据及订单缓存
     }
 
+    private boolean activeCloudTeacher(TenantOrderRecord record) {
+        if (record.getId() == null) {
+            throw new BizException("订单未找到");
+        }
+        record.setPayDate(new Date());
+        record.setPayTime(new Date());
+		updateById(record);
+		// cloudTeacherOrderDao.updateOrderStatusOK(record.getId()
+		List<CloudTeacherOrder> cloudTeacherOrders = cloudTeacherOrderDao.findByPlatformOrderId(record.getId());
+		Date startTime = DateUtil.trunc(new Date());
+		Date endTime = new Date();
+		for (CloudTeacherOrder cto : cloudTeacherOrders) {
+			endTime = calcCloudTeacherOrderTime(cto, startTime, endTime);
+			cto.setStartTime(startTime);
+			cto.setEndTime(endTime);
+			cto.setStatus(2);
+			cloudTeacherOrderDao.update(cto);
+			studentService.updateMemberRank(cto.getStudentId(), cto.getType(), cto.getTime(), 1);
+		}
+
+		List<Mapper> orderUsers = cloudTeacherOrderDao.findUserNameByOrderId(record.getId());
+		Map<Integer, String> userPhones = new HashMap<>();
+		for (Mapper mapper : orderUsers) {
+			userPhones.put((Integer) mapper.getKey(), mapper.getValue().toString());
+		}
+		sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.CLOUD_TEACHER_ORDER_SUCCESS, userPhones, null,
+				0, null, null);
+
+		return true;
+    }
     //主动去第三方查询订单状态
     private void checkTransOrderState(TenantOrderRecord orderRecord) {
         if (StringUtils.equals(orderRecord.getPaymentChannel(), PaymentChannelEnum.ADAPAY.getCode())) {
@@ -262,12 +311,12 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
         detail.put("num", productInfo.getExpiryCount());
     }
 
-    private void rechargeSuccess(TenantOrderRecord record) throws Exception {
+    private void rechargeSuccess(TenantOrderRecord record) {
         // 更新 tenantAssetsInfo
         log.info("checkRechargeCheck  updateAmount>>>>>");
         int ret = assetsInfoService.updateAmount(record.getTenantId(), record.getExpectAmount());
         if (ret != 1) {
-            throw new Exception("更新支付失败");
+            throw new BizException("更新支付失败");
         }
         record.setPayDate(new Date());
         record.setPayTime(new Date());
@@ -294,6 +343,21 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
 
     }
 
+    private Date calcCloudTeacherOrderTime(CloudTeacherOrder cloudTeacherOrder, Date startTime, Date endTime) {
+        if (cloudTeacherOrder.getType() == DAY) { // 日
+            endTime = DateUtil.addDays(startTime, cloudTeacherOrder.getTime());
+        } else if (cloudTeacherOrder.getType() == MONTH) { // 月
+            endTime = DateUtil.addMonths(startTime, cloudTeacherOrder.getTime());
+        } else if (cloudTeacherOrder.getType() == QUARTERLY) { // 季
+            endTime = DateUtil.addMonths(startTime, cloudTeacherOrder.getTime() * 3);
+        } else if (cloudTeacherOrder.getType() == YEAR_HALF) { // 半年
+            endTime = DateUtil.addMonths(startTime, cloudTeacherOrder.getTime() * 6);
+        } else if (cloudTeacherOrder.getType() == YEAR) { // 年
+            endTime = DateUtil.addYears(startTime, cloudTeacherOrder.getTime());
+        }
+        return endTime;
+    }
+
     @Override
     public Boolean rechargeCheck(TenantOrderRecord record, int i) {
         RBucket<Object> bucket = redissonClient.getBucket("tenant_check_recharge");