瀏覽代碼

Merge remote-tracking branch 'origin/saas' into saas

zouxuan 3 年之前
父節點
當前提交
f0f88a16a5

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java

@@ -204,12 +204,15 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     EMAIL_TENANT_EXPIRATION_REMINDERS("EMAIL_TENANT_EXPIRATION_REMINDERS",   "服务即将到期"),
     EMAIL_TENANT_RECHARGE("EMAIL_TENANT_RECHARGE",   "云教室充值"),
     EMAIL_TENANT_INSUFFICIENT_BALANCE("EMAIL_TENANT_INSUFFICIENT_BALANCE",  "余额不足"),
+    EMAIL_TENANT_EXPIRE("EMAIL_TENANT_EXPIRE",  "云教室欠费"),
+
 
     SMS_TENANT_ACTIVATION_SUCCESSFUL("SMS_TENANT_ACTIVATION_SUCCESSFUL",   "开通成功"),
     SMS_TENANT_RENEWAL_SUCCESSFUL("SMS_TENANT_RENEWAL_SUCCESSFUL", "续费成功"),
     SMS_TENANT_EXPIRATION_REMINDERS("SMS_TENANT_EXPIRATION_REMINDERS",   "服务即将到期"),
     SMS_TENANT_RECHARGE("SMS_TENANT_RECHARGE",   "云教室充值"),
     SMS_TENANT_INSUFFICIENT_BALANCE("SMS_TENANT_INSUFFICIENT_BALANCE",  "余额不足"),
+    SMS_TENANT_EXPIRE("SMS_TENANT_EXPIRE",  "云教室欠费"),
 
 
     STUDENT_SMS_CLOUD_PAYMENT("STUDENT_SMS_CLOUD_PAYMENT",  "待缴费订单"),

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

@@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.ym.mec.biz.dal.dao.TenantInfoDao;
 import com.ym.mec.biz.dal.dto.TenantInfoDto;
 import com.ym.mec.biz.dal.entity.TenantInfo;
+import com.ym.mec.biz.dal.entity.TenantOrderRecord;
 import com.ym.mec.biz.dal.entity.TenantProductInfo;
 import com.ym.mec.biz.dal.entity.TenantProductSumm;
+import com.ym.mec.biz.dal.enums.TenantOrderRecordEnum;
 import com.ym.mec.biz.dal.vo.TenantInfoInfoPageVo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.thirdparty.yqpay.Msg;
@@ -41,6 +43,9 @@ public interface TenantInfoService extends IService<TenantInfo> {
 
     void renewSuccess(Integer val, TenantProductInfo productInfo, BigDecimal amount);
 
+    TenantOrderRecord createOrderRecord(Integer tenantId, BigDecimal payAmount, String orderNo, TenantOrderRecordEnum
+            tenantEnum, Integer orderState, String merNos);
+
     Map<String, Object> recharge(Integer tenantId, BigDecimal amount) throws Exception;
 
     Boolean rechargeCheck(String orderNo) throws Exception;

+ 4 - 23
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -76,6 +76,8 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     private RedissonClient redissonClient;
     @Autowired
     private SysMessageService sysMessageService;
+    @Autowired
+    private TenantInfoService tenantInfoService;
 
     @Override
     public boolean addStudents(CloudTeacherAddQueryInfo cloudTeacherAddQueryInfo) {
@@ -226,7 +228,7 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         } else { // 消费大于 0 元 已支付 直接激活
             orderState = 1;
         }
-        TenantOrderRecord record = createOrderRecord(tenantId, payAmount, orderNo, tenantEnum, orderState, cloudTeacherStudents);
+        TenantOrderRecord record = tenantInfoService.createOrderRecord(tenantId, payAmount, orderNo, tenantEnum, orderState, WrapperUtil.toStr(payMap, "routingMerNos"));
         if (orderState == 1) { // 成功手直接成功
             this.paySuccess(record);
         }
@@ -357,31 +359,10 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         }
 
         log.info("tenant orderNotify update order status end");
+        sendSms(record);
         return true;
     }
 
-    private TenantOrderRecord createOrderRecord(Integer tenantId, BigDecimal payAmount, String orderNo, TenantOrderRecordEnum tenantEnum, Integer orderState, List<CloudTeacherStudent> cloudTeacherStudents) throws Exception {
-        LocalDateTime now = LocalDateTime.now();
-        TenantOrderRecord record = new TenantOrderRecord();
-        record.setTenantId(tenantId);
-        record.setOrderNo(orderNo);
-        record.setOrderType(tenantEnum.getCode());
-        record.setPaymentChannel(PaymentChannelEnum.ADAPAY.getCode());
-        record.setExpectAmount(payAmount);
-        record.setActualAmount(payAmount);
-        record.setOrderState(orderState);
-        record.setPayDate(now.toLocalDate().toDate());
-        record.setPayTime(now.toDate());
-        record.setCreatedTime(now.toDate());
-        tenantOrderRecordService.save(record);
-        for (CloudTeacherStudent cts : cloudTeacherStudents) {
-            if (cloudTeacherOrderDao.updateOrderId(cts.getCloudTeacherOrderId(), cts.getAmount(), record.getId()) <= 0) {
-                throw new Exception("更新订单失败");
-            }
-        }
-        return record;
-    }
-
     public Boolean payCheck(String orderNo) throws Exception {
         TenantOrderRecord record = tenantOrderRecordService.getOne(new QueryWrapper<TenantOrderRecord>().eq("order_no_", orderNo));
         return record.getOrderState() == 1;

+ 6 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java

@@ -342,7 +342,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
                         .divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP);
                 
             	StudentPaymentOrder st = (StudentPaymentOrder) clazz;
-            	BigDecimal amount = amountTo.apply(st.getActualAmount());
+            	BigDecimal amount = amountTo.apply(st.getActualAmount()).setScale(2, RoundingMode.HALF_UP);
 		        
 				List<Map<String, Object>> divMemberList = new ArrayList<>();
                 // 实时分账
@@ -375,7 +375,11 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
 				Map<String, Object> divMember1 = new HashMap<>();
 				divMember1.put("member_id", st.getMerNos());
 				divMember1.put("amount", payParam.getAmount().subtract(amount));
-				divMember1.put("fee_flag", "N");
+				if (divMemberList.size() > 0) {
+					divMember1.put("fee_flag", "N");
+				} else {
+					divMember1.put("fee_flag", "Y");
+				}
 				divMemberList.add(divMember1);
 				
 				paymentParams.put("div_members", JsonUtil.toJSONString(divMemberList));
@@ -444,9 +448,6 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
                     e.printStackTrace();
                 }
             }
-            if (ret) {
-                cloudTeacherOrderService.sendSms(record);
-            }
             bucket.delete();
         });
     }

+ 75 - 36
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantAssetsInfoServiceImpl.java

@@ -28,8 +28,7 @@ import java.util.*;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
-import static com.ym.mec.biz.dal.enums.MessageTypeEnum.EMAIL_TENANT_INSUFFICIENT_BALANCE;
-import static com.ym.mec.biz.dal.enums.MessageTypeEnum.SMS_TENANT_INSUFFICIENT_BALANCE;
+import static com.ym.mec.biz.dal.enums.MessageTypeEnum.*;
 
 /**
  * 机构资产信息(TenantAssetsInfo)表服务实现类
@@ -47,8 +46,6 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
     @Autowired
     private TenantCloudCourseRecordService tenantCloudCourseRecordService;
     @Autowired
-    private TenantInfoSendMsgService tenantInfoSendMsgService;
-    @Autowired
     private TenantInfoService tenantInfoService;
     @Autowired
     private SysMessageService sysMessageService;
@@ -156,42 +153,84 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
                 //当前余额
                 BigDecimal balance = assetsInfo.getBalance();
                 //当前余额 减 本次扣费 的剩余额度
-                BigDecimal after = balance.subtract(coursePrice).setScale(2,RoundingMode.HALF_UP);
-                //300
-                BigDecimal threeHundred = new BigDecimal(300);
-                //当前余额大于300 并且 本次扣除后剩余额度小于300 就发信息提醒
-                if (balance.compareTo(threeHundred) >= 0 && after.compareTo(threeHundred) <0) {
-                    TenantInfo t = tenantInfoService.getById(course.getTenantId());
-                    //邮件
-                    if (StringUtils.isNotBlank(t.getEmail())) {
-                        //机构名称 300 余额
-                        Object[] emailMsg = {t.getName(), 300, after.toString()};
-                        Map<Integer, String> sendPar = new HashMap<>();
-                        sendPar.put(t.getUserId(), t.getEmail());
-                        log.info("platformSendToAll>>> 余额不足 receiveUserId {} email {} objs {} sendPar {}", t.getUserId(), t.getEmail(), emailMsg, sendPar);
-                        sysMessageService.batchSendMessage(-1, MessageSenderPluginContext.MessageSender.EMAIL,
-                                EMAIL_TENANT_INSUFFICIENT_BALANCE,
-                                sendPar, null, 0, null,
-                                "SYSTEM", emailMsg);
-                    }
+                BigDecimal after = balance.subtract(coursePrice).setScale(2, RoundingMode.HALF_UP);
+                //判断是否发送信息
+                sendMsg(course.getTenantId(), balance, after);
+            }
+        });
+
+    }
+
+    /**
+     * 判断是否发送信息
+     * <p>
+     * 1.判断扣费前余额大于300并在本次扣费后剩余额度小于300就发信息提醒
+     * <p>
+     * 2.当前扣费为负数后要发邮件和短信提醒
+     *
+     * @param tenantId 机构id
+     * @param balance  扣费前金额
+     * @param after    扣费后金额
+     */
+    private void sendMsg(Integer tenantId, BigDecimal balance, BigDecimal after) {
+        TenantInfo t = tenantInfoService.getById(tenantId);
+        //当前余额大于300 并且 本次扣除后剩余额度小于300
+        BigDecimal threeHundred = new BigDecimal(300);
+        if (balance.compareTo(threeHundred) >= 0 && after.compareTo(threeHundred) < 0) {
 
-                    //短信
-                    if (StringUtils.isNotBlank(t.getPhone())) {
-                        //机构名称
-                        Object[] phoneMsg = {t.getName()};
-                        Map<Integer, String> sendPar2 = new HashMap<>();
-                        sendPar2.put(t.getUserId(), t.getPhone());
-                        log.info("platformSendToAll>>> 余额不足 receiveUserId {} phone {} objs {} sendPar {}", t.getUserId(), t.getPhone(), phoneMsg, sendPar2);
-                        sysMessageService.batchSendMessage(-1, MessageSenderPluginContext.MessageSender.AWSMS,
-                                SMS_TENANT_INSUFFICIENT_BALANCE,
-                                sendPar2, null, 0, null,
-                                "SYSTEM", phoneMsg);
-                    }
+            //邮件
+            if (StringUtils.isNotBlank(t.getEmail())) {
+                //机构名称 300 余额
+                Object[] emailMsg = {t.getName(), 300, after.toString()};
+                Map<Integer, String> sendPar = new HashMap<>();
+                sendPar.put(t.getUserId(), t.getEmail());
+                log.info("platformSendToAll>>> 余额不足 receiveUserId {} email {} objs {} sendPar {}", t.getUserId(), t.getEmail(), emailMsg, sendPar);
+                sysMessageService.batchSendMessage(-1, MessageSenderPluginContext.MessageSender.EMAIL,
+                        EMAIL_TENANT_INSUFFICIENT_BALANCE,
+                        sendPar, null, 0, null,
+                        "SYSTEM", emailMsg);
+            }
 
-                }
+            //短信
+            if (StringUtils.isNotBlank(t.getPhone())) {
+                //机构名称
+                Object[] phoneMsg = {t.getName()};
+                Map<Integer, String> sendPar2 = new HashMap<>();
+                sendPar2.put(t.getUserId(), t.getPhone());
+                log.info("platformSendToAll>>> 余额不足 receiveUserId {} phone {} objs {} sendPar {}", t.getUserId(), t.getPhone(), phoneMsg, sendPar2);
+                sysMessageService.batchSendMessage(-1, MessageSenderPluginContext.MessageSender.AWSMS,
+                        SMS_TENANT_INSUFFICIENT_BALANCE,
+                        sendPar2, null, 0, null,
+                        "SYSTEM", phoneMsg);
             }
-        });
+        }
 
+        //当前余额已经扣为负数
+        if (after.compareTo(BigDecimal.ZERO) < 0) {
+            //邮件
+            if (StringUtils.isNotBlank(t.getEmail())) {
+                //机构名称 余额
+                Object[] emailMsg = {t.getName(), after.toString()};
+                Map<Integer, String> sendPar = new HashMap<>();
+                sendPar.put(t.getUserId(), t.getEmail());
+                log.info("platformSendToAll>>> 已欠费 receiveUserId {} email {} objs {} sendPar {}", t.getUserId(), t.getEmail(), emailMsg, sendPar);
+                sysMessageService.batchSendMessage(-1, MessageSenderPluginContext.MessageSender.EMAIL,
+                        EMAIL_TENANT_EXPIRE, sendPar, null, 0, null,
+                        "SYSTEM", emailMsg);
+            }
+
+            //短信
+            if (StringUtils.isNotBlank(t.getPhone())) {
+                //机构名称
+                Object[] phoneMsg = {t.getName()};
+                Map<Integer, String> sendPar2 = new HashMap<>();
+                sendPar2.put(t.getUserId(), t.getPhone());
+                log.info("platformSendToAll>>> 已欠费 receiveUserId {} phone {} objs {} sendPar {}", t.getUserId(), t.getPhone(), phoneMsg, sendPar2);
+                sysMessageService.batchSendMessage(-1, MessageSenderPluginContext.MessageSender.AWSMS,
+                        SMS_TENANT_EXPIRE, sendPar2, null, 0, null,
+                        "SYSTEM", phoneMsg);
+            }
+        }
     }
 
     /**

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

@@ -625,7 +625,8 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     }
 
     //生成订单
-    private void createOrderRecord(Integer tenantId, BigDecimal payAmount, String orderNo, TenantOrderRecordEnum
+    @Override
+    public TenantOrderRecord createOrderRecord(Integer tenantId, BigDecimal payAmount, String orderNo, TenantOrderRecordEnum
             tenantEnum, Integer orderState, String merNos) {
         TenantOrderRecord record = new TenantOrderRecord();
         record.setTenantId(tenantId);
@@ -643,6 +644,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         }
         record.setCreatedTime(now.toDate());
         tenantOrderRecordService.save(record);
+        return record;
     }
 
     /**
@@ -790,7 +792,8 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         if (tps.getExpiryDateEnd() == null) {
             tps.setValidRemaining(0);
         } else {
-            tps.setValidRemaining(DateUtil.daysBetween(new Date(), tps.getExpiryDateEnd()));
+            Date now = LocalDate.now().toDate();//不能直接new Date()的,不要用带时分秒的时间和不带时分秒的时间做对比!!!
+            tps.setValidRemaining(DateUtil.daysBetween(now, tps.getExpiryDateEnd()));
         }
         tps.setSumBalance(tps.getBalance().add(tps.getFrozenAmount()));
 

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

@@ -266,13 +266,19 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
         // 更新 tenantAssetsInfo
         log.info("checkRechargeCheck  updateAmount>>>>>");
         int ret = assetsInfoService.updateAmount(record.getTenantId(), record.getExpectAmount());
+        try {
+            record.setPayDate(new Date());
+            record.setPayTime(new Date());
+            baseMapper.updateById(record); // 添加支付时间
+        } catch (Exception e) {
+            log.error("更新支付时间错误代码 {}", e);
+        }
         // 取余额
         TenantAssetsInfo assets = assetsInfoService.getOne(new WrapperUtil<TenantAssetsInfo>().hasEq("tenant_id_", record.getTenantId()).queryWrapper());
-        TenantInfo tenantInfo = tenantInfoService.getOne(new WrapperUtil<TenantInfo>().hasEq("tenant_id_", record.getTenantId()).queryWrapper());
+        TenantInfo tenantInfo = tenantInfoService.getOne(new WrapperUtil<TenantInfo>().hasEq("id_", record.getTenantId()).queryWrapper());
         Integer receiveUserId = tenantInfo.getUserId();
         String email = tenantInfo.getEmail();
 
-
         Object[] objs = {tenantInfo.getName(), record.getActualAmount(), assets.getBalance()};
 
         // 发邮件, 发短信