Selaa lähdekoodia

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

zouxuan 3 vuotta sitten
vanhempi
commit
efe90172f7

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

@@ -27,7 +27,7 @@ public interface TenantInfoService extends IService<TenantInfo> {
 
     TenantInfoDto queryTenantInfoCheck(Integer tenantId);
 
-    void opsTenantState(Integer id, Integer state);
+    Map<String,Object> opsTenantState(Integer id, Integer state);
 
     PageInfo<TenantInfoInfoPageVo> queryPage(Map<String, Object> param);
 

+ 35 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantAssetsInfoServiceImpl.java

@@ -11,8 +11,10 @@ import com.ym.mec.biz.dal.vo.TenantCloudCourseRecordVo;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.WrapperUtil;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.thirdparty.yqpay.DateUtils;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,7 +28,8 @@ import java.util.*;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
-import static com.ym.mec.biz.service.impl.TenantInfoSendMsgServiceImpl.INSUFFICIENT;
+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;
 
 /**
  * 机构资产信息(TenantAssetsInfo)表服务实现类
@@ -47,6 +50,8 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
     private TenantInfoSendMsgService tenantInfoSendMsgService;
     @Autowired
     private TenantInfoService tenantInfoService;
+    @Autowired
+    private SysMessageService sysMessageService;
 
     private final Predicate<String> VipPredicate = (o) -> Objects.equals(o, CourseSchedule.CourseScheduleType.VIP.getCode());
 
@@ -152,10 +157,37 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
                 BigDecimal balance = assetsInfo.getBalance();
                 //当前余额 减 本次扣费 的剩余额度
                 BigDecimal after = balance.subtract(coursePrice);
+                //300
+                BigDecimal threeHundred = new BigDecimal(300);
                 //当前余额大于300 并且 本次扣除后剩余额度小于300 就发信息提醒
-                if (balance.compareTo(new BigDecimal(300)) > -1 && balance.compareTo(after) < 0) {
+                if (balance.compareTo(threeHundred) >= 0 && after.compareTo(threeHundred) <0) {
                     TenantInfo t = tenantInfoService.getById(course.getTenantId());
-                    tenantInfoSendMsgService.platformSendToAll(INSUFFICIENT,t.getUserId(), t.getEmail(), t.getPhone(), new Object[]{t.getName()});
+                    //邮件
+                    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);
+                    }
+
                 }
             }
         });

+ 68 - 23
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java

@@ -49,7 +49,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
 
-import static com.ym.mec.biz.service.impl.TenantInfoSendMsgServiceImpl.*;
+import static com.ym.mec.biz.dal.enums.MessageTypeEnum.*;
 
 @Service
 public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo> implements TenantInfoService {
@@ -92,15 +92,10 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     @Autowired
     private SysMessageService sysMessageService;
     @Autowired
-    private TenantInfoSendMsgService tenantInfoSendMsgService;
-    @Autowired
     private SysConfigService sysConfigService;
     @Autowired
     private ContractService contractService;
 
-    @Value("${spring.profiles.active:dev}")
-    private String profiles;
-
     /**
      * 新增机构
      */
@@ -271,7 +266,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void opsTenantState(Integer id, Integer state) {
+    public Map<String, Object> opsTenantState(Integer id, Integer state) {
         if (Objects.nonNull(state) && state == 1 || state == 2) {
             TenantInfo tenantInfo = baseMapper.selectById(id);
             if (Objects.isNull(tenantInfo)) {
@@ -294,12 +289,10 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
                 }
             }
             baseMapper.updateById(tenantInfo);
-            //在执行了修改机构信息之后,并且有返回密码(第一次开通机构会生成登录密码并返回)就发送邮件及短信提醒
-            if (StringUtils.isNotBlank(pw)) {
-                Object[] msg = {tenantInfo.getName(), tenantInfo.getPhone(), pw, "https://online.dayaedu.com"};
-                tenantInfoSendMsgService.platformSendToAll(OPEN, tenantInfo.getUserId(), tenantInfo.getEmail(), tenantInfo.getPhone(), msg);
-            }
-            return;
+            Map<String, Object> result = new HashMap<>();
+            result.put("pw", pw);
+            result.put("tenantInfo", tenantInfo);
+            return result;
         }
         throw new BizException("传入机构状态参数异常!");
     }
@@ -583,10 +576,37 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         productInfo.setExpiryCount(productInfo.getExpiryCount() + val);
         tenantProductInfoService.updateById(productInfo);
 
-        TenantInfo tenantInfo = this.getById(tenantId);
-        //发送邮件及短信提醒
-        Object[] msg = {tenantInfo.getName()};
-        tenantInfoSendMsgService.platformSendToAll(RENEW, tenantInfo.getUserId(), tenantInfo.getEmail(), tenantInfo.getPhone(), msg);
+        Map<String, Object> par = new HashMap<>();
+        par.put("tenantId", tenantId);
+        List<TenantInfoInfoPageVo> tenantInfos = baseMapper.queryPage(par);
+        if(CollectionUtils.isNotEmpty(tenantInfos)){
+            TenantInfoInfoPageVo tenantInfo = tenantInfos.get(0);
+            //邮件
+            if (StringUtils.isNotBlank(tenantInfo.getEmail())) {
+                //机构名称 服务名称 学员上限 有效期
+                Object[] emailMsg = {tenantInfo.getName(), tenantInfo.getServeName(), tenantInfo.getStudentUpLimit(), DateUtils.formatDate(expiryDate, "yyyy年MM月dd日")};
+                Map<Integer, String> sendPar = new HashMap<>();
+                sendPar.put(tenantInfo.getUserId(), tenantInfo.getEmail());
+                log.info("platformSendToAll>>> 续费 receiveUserId {} email {} objs {} sendPar {}", tenantInfo.getUserId(), tenantInfo.getEmail(), emailMsg, sendPar);
+                sysMessageService.batchSendMessage(-1, MessageSenderPluginContext.MessageSender.EMAIL,
+                        EMAIL_TENANT_RENEWAL_SUCCESSFUL,
+                        sendPar, null, 0, null,
+                        "SYSTEM", emailMsg);
+            }
+            //短信
+            if (StringUtils.isNotBlank(tenantInfo.getPhone())) {
+                //机构名称
+                Object[] phoneMsg = {tenantInfo.getName()};
+                Map<Integer, String> sendPar2 = new HashMap<>();
+                sendPar2.put(tenantInfo.getUserId(), tenantInfo.getPhone());
+                log.info("platformSendToAll>>> 续费 receiveUserId {} phone {} objs {} sendPar {}", tenantInfo.getUserId(), tenantInfo.getPhone(), phoneMsg, sendPar2);
+                sysMessageService.batchSendMessage(-1, MessageSenderPluginContext.MessageSender.AWSMS,
+                        SMS_TENANT_RENEWAL_SUCCESSFUL,
+                        sendPar2, null, 0, null,
+                        "SYSTEM", phoneMsg);
+            }
+        }
+
         //释放锁
         bucket.delete();
     }
@@ -827,16 +847,16 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
      */
     @Override
     public void checkTenantState() {
-        Date now = LocalDate.now().toDate();
-
         //查询还差30天和1天过期的机构,并发送邮件和短信
         Integer[] days = {30, 1};
-        Arrays.stream(days).forEach(d -> checkAndSend(now, d));
+        Arrays.stream(days).forEach(this::checkAndSend);
 
+        Date now = LocalDate.now().toDate();
         //查询过期并且没有停用的机构,将其停用
         Date maturity = DateUtils.addDays(now, -1);
         Map<String, Object> par = new HashMap<>();
         par.put("expiryDate", maturity);
+        par.put("state", 1);
         List<TenantInfoInfoPageVo> maturityTenant = baseMapper.queryPage(par);
         maturityTenant.forEach(t -> {
             TenantInfo tenantInfo = baseMapper.selectById(t.getId());
@@ -847,9 +867,11 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         });
     }
 
-    private void checkAndSend(Date now, int i) {
+    private void checkAndSend(int i) {
+        Date now = LocalDate.now().toDate();
         Date expiryDate = DateUtils.addDays(now, i);
         Map<String, Object> par = new HashMap<>();
+        par.put("state", 1);
         par.put("expiryDate", expiryDate);
         List<TenantInfoInfoPageVo> oneTenant = baseMapper.queryPage(par);
         send(oneTenant, DateUtils.formatDate(expiryDate, "yyyy年MM月dd日"));
@@ -857,8 +879,31 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
 
     private void send(List<TenantInfoInfoPageVo> infoList, String dateStr) {
         infoList.forEach(t -> {
-            Object[] objects = {t.getName(), t.getServeName(), dateStr, t.getStudentUpLimit()};
-            tenantInfoSendMsgService.platformSendToAll(EXPIRATION, t.getUserId(), t.getEmail(), t.getPhone(), objects);
+            //邮件
+            if (StringUtils.isNotBlank(t.getEmail())) {
+                //机构名称 服务名称 到期时间 学员数量
+                Object[] emailMsg = {t.getName(), t.getServeName(), dateStr, t.getStudentUpLimit()};
+                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_EXPIRATION_REMINDERS,
+                        sendPar, null, 0, null,
+                        "SYSTEM", emailMsg);
+            }
+            //短信
+            if (StringUtils.isNotBlank(t.getPhone())) {
+                //机构名称 到期时间
+                Object[] phoneMsg = {t.getName(), dateStr};
+                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_EXPIRATION_REMINDERS,
+                        sendPar2, null, 0, null,
+                        "SYSTEM", phoneMsg);
+            }
+
         });
     }
 

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

@@ -85,6 +85,9 @@
                 OR a.`phone_` LIKE CONCAT('%', #{param.search},'%')
                 )
             </if>
+            <if test="param.tenantId != null ">
+                AND a.`id_` = #{param.tenantId}
+            </if>
             <if test="param.createdName != null ">
                 AND u.`real_name_` LIKE CONCAT('%', #{param.createdName},'%')
             </if>

+ 18 - 1
mec-web/src/main/java/com/ym/mec/web/controller/TenantInfoController.java

@@ -3,14 +3,18 @@ package com.ym.mec.web.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.TenantInfoDto;
+import com.ym.mec.biz.dal.entity.TenantInfo;
 import com.ym.mec.biz.dal.entity.TenantProductSumm;
+import com.ym.mec.biz.service.TenantInfoSendMsgService;
 import com.ym.mec.biz.service.TenantInfoService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.WrapperUtil;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.thirdparty.yqpay.Msg;
 import com.ym.mec.util.validator.ValidationKit;
 import io.swagger.annotations.*;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -20,6 +24,9 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 import java.math.BigDecimal;
 import java.util.Map;
+import java.util.Objects;
+
+import static com.ym.mec.biz.service.impl.TenantInfoSendMsgServiceImpl.OPEN;
 
 /**
  * @author hgw
@@ -36,6 +43,9 @@ public class TenantInfoController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
 
+    @Autowired
+    private TenantInfoSendMsgService tenantInfoSendMsgService;
+
     @ApiOperation("添加机构信息")
     @PostMapping(value = "/add")
     @PreAuthorize("@pcs.hasPermissions('tenantInfo/add')")
@@ -57,7 +67,14 @@ public class TenantInfoController extends BaseController {
     @GetMapping(value = "/opsState/{id}")
     @PreAuthorize("@pcs.hasPermissions('tenantInfo/opsState')")
     public Object opsState(@ApiParam(value = "机构ID", required = true) @PathVariable("id") Integer id, Integer state) {
-        tenantInfoService.opsTenantState(id, state);
+        Map<String, Object> openPar = tenantInfoService.opsTenantState(id, state);
+        //有返回密码(第一次开通机构会生成登录密码并返回)就发送邮件及短信提醒
+        String pw = WrapperUtil.toStr(openPar, "pw");
+        TenantInfo tenantInfo =(TenantInfo) openPar.get("tenantInfo");
+        if (StringUtils.isNotBlank(pw) && Objects.nonNull(tenantInfo)) {
+            Object[] msg = {tenantInfo.getName(), tenantInfo.getPhone(), pw, "https://online.dayaedu.com"};
+            tenantInfoSendMsgService.platformSendToAll(OPEN, tenantInfo.getUserId(), tenantInfo.getEmail(), tenantInfo.getPhone(), msg);
+        }
         return succeed();
     }