ソースを参照

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

zouxuan 3 年 前
コミット
93f7b9d5f3
17 ファイル変更237 行追加78 行削除
  1. 3 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/TenantInfoDao.java
  2. 2 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/TenantInfoService.java
  3. 7 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/TenantInfoServiceImpl.java
  4. 4 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserController.java
  5. 4 1
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/TenantInfoMapper.xml
  6. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantInfoDao.java
  7. 6 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  8. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantInfoSendMsgService.java
  9. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantInfoService.java
  10. 9 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  11. 99 70
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java
  12. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  13. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java
  14. 17 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  15. 62 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoSendMsgServiceImpl.java
  16. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java
  17. 3 0
      mec-biz/src/main/resources/config/mybatis/TenantInfoMapper.xml

+ 3 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/TenantInfoDao.java

@@ -2,8 +2,11 @@ package com.ym.mec.auth.dal.dao;
 
 import com.ym.mec.auth.api.entity.TenantInfo;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
 
 public interface TenantInfoDao extends BaseDAO<Integer, TenantInfo> {
 
     TenantInfo getOpenTenant(Integer tenantId);
+
+    void updatePhone(@Param("newPhone") String newPhone, @Param("oldPhone")String oldPhone);
 }

+ 2 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/TenantInfoService.java

@@ -6,4 +6,6 @@ import com.ym.mec.common.service.BaseService;
 public interface TenantInfoService extends BaseService<Integer, TenantInfo> {
 
     TenantInfo getOpenTenant(Integer tenantId);
+
+    void updatePhone(String newPhone, String oldPhone);
 }

+ 7 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/TenantInfoServiceImpl.java

@@ -23,4 +23,11 @@ public class TenantInfoServiceImpl extends BaseServiceImpl<Integer, TenantInfo>
 	public TenantInfo getOpenTenant(Integer tenantId) {
 		return tenantInfoDao.getOpenTenant(tenantId);
 	}
+
+	@Override
+	public void updatePhone(String newPhone, String oldPhone) {
+		tenantInfoDao.updatePhone(newPhone, oldPhone);
+	}
+
+
 }

+ 4 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserController.java

@@ -1,5 +1,6 @@
 package com.ym.mec.auth.web.controller;
 
+import com.ym.mec.auth.service.TenantInfoService;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -59,6 +60,8 @@ public class UserController extends BaseController {
 	private IdGeneratorService smsCodeService;
 	@Autowired
 	private WebFeignService webFeignService;
+	@Autowired
+	private TenantInfoService tenantInfoService;
 	@Value("${message.debugMode}")
 	private boolean debugMode;
 	@Autowired
@@ -209,6 +212,7 @@ public class UserController extends BaseController {
 			return failed("手机号被占用");
 		}
 		if (smsCodeService.verifyValidCode(newPhone, authCode)) {
+			tenantInfoService.updatePhone(newPhone, oldPhone);
 			sysUser.setPhone(newPhone);
 			sysUser.setUpdateTime(new Date());
 			sysUserService.update(sysUser);

+ 4 - 1
mec-auth/mec-auth-server/src/main/resources/config/mybatis/TenantInfoMapper.xml

@@ -74,8 +74,11 @@
 		</set>
 		WHERE id_ = #{id}
 	</update>
+    <update id="updatePhone">
+		update tenant_info set phone_ = #{newPhone} where phone_ = #{oldPhone}
+	</update>
 
-	<!-- 根据主键删除一条记录 -->
+    <!-- 根据主键删除一条记录 -->
 	<delete id="delete">
 		DELETE FROM tenant_info WHERE id_ = #{id}
 	</delete>

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

@@ -18,4 +18,6 @@ public interface TenantInfoDao extends BaseMapper<TenantInfo> {
     TenantInfo getOpenTenant(Integer tenantId);
 
     TenantInfo queryTenantInfoByOrgan(@Param("organId") Integer organId);
+
+    void updatePhone(@Param("newPhone")String newPhone, @Param("oldPhone")String oldPhone);
 }

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

@@ -198,14 +198,17 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
 
     APP_REDEMPTION_CODE("APP_REDEMPTION_CODE", "兑换码分配量预警"),
     CLOUD_TEACHER_ORDER_SUCCESS("CLOUD_TEACHER_ORDER_SUCCESS", "云教练激活成功"),
+
     EMAIL_TENANT_ACTIVATION_SUCCESSFUL("EMAIL_TENANT_ACTIVATION_SUCCESSFUL",   "开通成功"),
     EMAIL_TENANT_RENEWAL_SUCCESSFUL("EMAIL_TENANT_RENEWAL_SUCCESSFUL", "续费成功"),
-    EMAIL_TENANT_EXPIRATION_REMINDERS("EMAIL_TENANT_EXPIRATION_REMINDERS",   "过期提醒"),
+    EMAIL_TENANT_EXPIRATION_REMINDERS("EMAIL_TENANT_EXPIRATION_REMINDERS",   "服务即将到期"),
+    EMAIL_TENANT_RECHARGE("EMAIL_TENANT_RECHARGE",   "云教室充值"),
     EMAIL_TENANT_INSUFFICIENT_BALANCE("EMAIL_TENANT_INSUFFICIENT_BALANCE",  "余额不足"),
 
-    sms_tenant_activation_successful("EMAIL_TENANT_ACTIVATION_SUCCESSFUL",   "开通成功"),
+    SMS_TENANT_ACTIVATION_SUCCESSFUL("EMAIL_TENANT_ACTIVATION_SUCCESSFUL",   "开通成功"),
     SMS_TENANT_RENEWAL_SUCCESSFUL("EMAIL_TENANT_RENEWAL_SUCCESSFUL", "续费成功"),
-    SMS_TENANT_EXPIRATION_REMINDERS("EMAIL_TENANT_EXPIRATION_REMINDERS",   "过期提醒"),
+    SMS_TENANT_EXPIRATION_REMINDERS("EMAIL_TENANT_EXPIRATION_REMINDERS",   "服务即将到期"),
+    SMS_TENANT_RECHARGE("SMS_TENANT_RECHARGE",   "云教室充值"),
     SMS_TENANT_INSUFFICIENT_BALANCE("EMAIL_TENANT_INSUFFICIENT_BALANCE",  "余额不足"),
     ;
 

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TenantInfoSendMsgService.java

@@ -0,0 +1,6 @@
+package com.ym.mec.biz.service;
+
+public interface TenantInfoSendMsgService {
+
+    void sendToAll(String type, Integer userId, String email, Object... objs);
+}

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

@@ -63,4 +63,5 @@ public interface TenantInfoService extends IService<TenantInfo> {
 
     Boolean testEmail();
 
+    void updatePhone(String newPhone, String oldPhone);
 }

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

@@ -110,7 +110,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 		//新增用户职位
 		employeePositionService.batchAddPosition(employee.getId(),employee.getPositionIds(), tenantId);
 		//添加用户现金账户
-		sysUserCashAccountDao.insert(new SysUserCashAccount(employee.getId(),"CNY"));
+		sysUserCashAccountDao.insert(new SysUserCashAccount(employee.getId(), tenantId,"CNY"));
 		ImResult imResult = imFeignService.register(new ImUserModel(employee.getId().toString(), employee.getUsername(),null));
 		employee.setImToken(imResult.getToken());
 		teacherDao.updateUser(employee);
@@ -139,6 +139,13 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 				sysUser = sysUserFeignService.queryUserInfo();
 			}
 		}
+
+		// 同步更新机构手机号 如果它存在  138xxx -> 159xxx
+		SysUser user = sysUserFeignService.queryUserById(employee.getId());
+		if (!Objects.equals(user.getPhone(), employee.getPhone())) {
+			tenantInfoService.updatePhone(employee.getPhone(), user.getPhone());
+		}
+
 		employeeDao.update(employee);
 		//删除当前用户角色
 		employeeDao.delEmployeeRole(employee.getId());
@@ -158,7 +165,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 		employee.setAvatar(sysUser.getAvatar());
         //更新机构信息
         TenantInfo tenantInfo = tenantInfoService.getOne(new WrapperUtil<TenantInfo>()
-                .hasEq("user_id_",employee.getId()).queryWrapper());
+                .queryWrapper().eq("user_id_",employee.getId()));
         if(Objects.nonNull(tenantInfo) && !Objects.equals(tenantInfo.getPhone(),employee.getPhone())){
             tenantInfo.setPhone(employee.getPhone());
             tenantInfo.setUpdatedTime(new Date());

+ 99 - 70
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java

@@ -13,7 +13,6 @@ import com.ym.mec.thirdparty.adapay.ConfigInit;
 import com.ym.mec.thirdparty.adapay.Payment;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
-import org.apache.commons.lang3.StringUtils;
 import org.redisson.api.RBucket;
 import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
@@ -23,6 +22,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.DigestUtils;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
@@ -50,6 +50,20 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
     @Autowired
     private CloudTeacherOrderService cloudTeacherOrderService;
 
+    //支付类型
+    private static final Map<String, Function<PaymentParam, Map<String, Object>>> checkOrderType = new HashMap<>();
+
+    {
+        //开通缴费/续费
+        checkOrderType.put("tenant", this::openOrRenew);
+        //云教练支付
+        checkOrderType.put("cloudTeacherOrder", this::cloudTeacherOrder);
+        //机构充值
+        checkOrderType.put("tenantRecharge", this::tenantRecharge);
+        //teacher
+        checkOrderType.put("teacher", this::teacher);
+    }
+
     @Override
     public Map<String, Object> executePayment(BigDecimal amount, String orderNo, String payChannel, String returnUrl, String orderSubject, String orderBody, String sign, String code, String platform) throws Exception {
         PaymentParam payParam = new PaymentParam(amount, orderNo, payChannel, returnUrl,
@@ -63,63 +77,10 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
 
         Map<String, Object> payment = new HashMap<>();
         if (platform != null) {
-            if (WrapperUtil.checkStr(platform,"tenant")) {
-                //机构开通、续费付款
-                TenantOrderRecord tenantOrderRecord = tenantOrderRecordService.getOne(new WrapperUtil<TenantOrderRecord>()
-                        .hasEq("order_no_", payParam.getOrderNo()).queryWrapper());
-                payment = checkOrderAndGetParam(payParam,
-                        tenantOrderRecord,
-                        TenantOrderRecord::getEnumOrderState,
-                        TenantOrderRecord::getCreatedTime,
-                        tenantOrderRecord::setTransNo,
-                        tenantOrderRecordService::updateById
-                );
-                //机构开通付款 主动延迟检查订单
-                delayCheckTenant();
-            } else if (platform.equals("cloudTeacherOrder")) {
-                // 云教练支付
-                TenantOrderRecord tenantOrderRecord = tenantOrderRecordService.getOne(new WrapperUtil<TenantOrderRecord>()
-                                                                                              .hasEq("order_no_", payParam.getOrderNo()).queryWrapper());
-                if (tenantOrderRecord.getOrderState() == 1) {
-                    throw new Exception("订单已支付, 订单号:" + payParam.getOrderNo());
-                }
-                payment = checkOrderAndGetParam(payParam,
-                                                tenantOrderRecord,
-                                                TenantOrderRecord::getEnumOrderState,
-                                                TenantOrderRecord::getCreatedTime,
-                                                tenantOrderRecord::setTransNo,
-                                                tenantOrderRecordService::updateById
-                );
-                // 云教练支付 主动延迟检查订单
-                log.info("executePayment delayCheckCloudTeacherOrder >>>>> ");
-                delayCheckCloudTeacherOrder(tenantOrderRecord);
-            } else if (platform.equals("tenantRecharge")) {
-                // 机构充值
-                TenantOrderRecord tenantOrderRecord = tenantOrderRecordService.getOne(new WrapperUtil<TenantOrderRecord>()
-                                                                                              .hasEq("order_no_", payParam.getOrderNo()).queryWrapper());
-                if (tenantOrderRecord.getOrderState() == 1) {
-                    throw new Exception("订单已支付, 订单号:" + payParam.getOrderNo());
-                }
-                payment = checkOrderAndGetParam(payParam,
-                                                tenantOrderRecord,
-                                                TenantOrderRecord::getEnumOrderState,
-                                                TenantOrderRecord::getCreatedTime,
-                                                tenantOrderRecord::setTransNo,
-                                                tenantOrderRecordService::updateById
-                );
-                //主动延迟检查订单
-                log.info("executePayment delayCheckTenantRecharge >>>>> ");
-                delayCheckTenantRecharge(tenantOrderRecord);
-            } else if (platform.equals("teacher")) {
-                TenantPaymentOrder tenantPaymentOrder = tenantPaymentOrderService.queryByOrderNo(payParam.getOrderNo());
-                payment = checkOrderAndGetParam(payParam,
-                        tenantPaymentOrder,
-                        TenantPaymentOrder::getStatus,
-                        TenantPaymentOrder::getCreateTime,
-                        tenantPaymentOrder::setTransNo,
-                        tenantPaymentOrderService::update
-                );
-            } else {
+            //根据传入platform 来判断执行哪个操作
+            Function<PaymentParam, Map<String, Object>> function = checkOrderType.get(platform);
+            //如果以上操作都没有 则应该是这一个,因为老代码就是这样写的。
+            if (Objects.isNull(function)) {
                 StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findOrderByOrderNo(payParam.getOrderNo());
                 payment = checkOrderAndGetParam(payParam,
                         studentPaymentOrder,
@@ -128,16 +89,88 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
                         studentPaymentOrder::setTransNo,
                         studentPaymentOrderService::update
                 );
+            } else {
+                payment = function.apply(payParam);
             }
         }
+        return payment;
+    }
+
+    //teacher
+    private Map<String, Object> teacher(PaymentParam payParam) {
+        Map<String, Object> payment;
+        TenantPaymentOrder tenantPaymentOrder = tenantPaymentOrderService.queryByOrderNo(payParam.getOrderNo());
+        try {
+            payment = checkOrderAndGetParam(payParam,
+                    tenantPaymentOrder,
+                    TenantPaymentOrder::getStatus,
+                    TenantPaymentOrder::getCreateTime,
+                    tenantPaymentOrder::setTransNo,
+                    tenantPaymentOrderService::update
+            );
+        } catch (Exception e) {
+            throw new BizException(e.getMessage());
+        }
+        return payment;
+    }
+
+    // 机构充值
+    private Map<String, Object> tenantRecharge(PaymentParam payParam) {
+        Map<String, Object> payment;
+        TenantOrderRecord tenantOrderRecord = getTenantOrderRecord(payParam.getOrderNo());
+        payment = checkOrderGetPayment(payParam, tenantOrderRecord);
+        //主动延迟检查订单
+        log.info("executePayment delayCheckTenantRecharge >>>>> ");
+        delayCheckTenantRecharge(tenantOrderRecord);
+        return payment;
+    }
+
+    // 云教练支付
+    private Map<String, Object> cloudTeacherOrder(PaymentParam payParam) {
+        TenantOrderRecord tenantOrderRecord = getTenantOrderRecord(payParam.getOrderNo());
+        Map<String, Object> payment = checkOrderGetPayment(payParam, tenantOrderRecord);
+        // 云教练支付 主动延迟检查订单
+        log.info("executePayment delayCheckCloudTeacherOrder >>>>> ");
+        delayCheckCloudTeacherOrder(tenantOrderRecord);
+        return payment;
+    }
+
+    //机构开通、续费付款
+    private Map<String, Object> openOrRenew(PaymentParam payParam) {
+        TenantOrderRecord tenantOrderRecord = getTenantOrderRecord(payParam.getOrderNo());
+        Map<String, Object> payment = checkOrderGetPayment(payParam, tenantOrderRecord);
+        //主动延迟检查订单
+        delayCheckTenant();
+        return payment;
+    }
+
+    //查询订单
+    private TenantOrderRecord getTenantOrderRecord(String orderNo) {
+        return tenantOrderRecordService.getOne(new WrapperUtil<TenantOrderRecord>()
+                .hasEq("order_no_", orderNo).queryWrapper());
+    }
 
+    //获取支付数据
+    private Map<String, Object> checkOrderGetPayment(PaymentParam payParam, TenantOrderRecord tenantOrderRecord) {
+        Map<String, Object> payment;
+        try {
+            payment = checkOrderAndGetParam(payParam,
+                    tenantOrderRecord,
+                    TenantOrderRecord::getEnumOrderState,
+                    TenantOrderRecord::getCreatedTime,
+                    tenantOrderRecord::setTransNo,
+                    tenantOrderRecordService::updateById
+            );
+        } catch (Exception e) {
+            throw new BizException(e.getMessage());
+        }
         return payment;
     }
 
     private void checkSing(PaymentParam param) {
         Map<String, Object> signParams = new LinkedHashMap<>();
         signParams.put("appId", ConfigInit.appId);
-        signParams.put("amount", param.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP));
+        signParams.put("amount", param.getAmount().setScale(2, RoundingMode.HALF_UP));
         signParams.put("orderNo", param.getOrderNo());
         signParams.put("orderSubject", param.getOrderSubject());
         signParams.put("orderBody", param.getOrderBody());
@@ -156,7 +189,9 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         if (Objects.isNull(clazz)) {
             throw new BizException("订单不存在");
         }
+        //校验订单状态
         checkOrderState(clazz, enumFunc);
+        //获取订单创建时间
         Date createTime = dateFunc.apply(clazz);
         //校验订单是否超时
         String timeExpire = checkOrderTimeOut(createTime);
@@ -164,7 +199,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         Map<String, Object> paymentParams = getPaymentParam(payParam);
         paymentParams.put("time_expire", timeExpire);
         paymentParams.put("expend", getExpend(payParam));
-        //获取第三方的支付的信息
+        //向第三方发起支付,获取第三方的支付的信息
         Map<String, Object> payment = Payment.executePayment(paymentParams);
         log.info("executePayment create order param >>>>> {}", JSON.toJSONString(payment));
         String transNo = (String) payment.get("id");
@@ -195,15 +230,8 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
     }
 
     private <T> void setTransNoByApply(String TransNo, T clazz, Consumer<String> setOption, Consumer<T> action) {
-        Optional.ofNullable(clazz)
-                .filter(c -> Objects.nonNull(setOption))
-                .filter(c -> Objects.nonNull(action))
-                .filter(c -> StringUtils.isNotBlank(TransNo))
-                .map(c -> {
-                    setOption.accept(TransNo);
-                    return c;
-                })
-                .ifPresent(action);
+        setOption.accept(TransNo);
+        action.accept(clazz);
     }
 
     private Map<String, Object> getExpend(PaymentParam payParam) throws Exception {
@@ -260,6 +288,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
                     tenantOrderRecordService.checkTenantOrder();
                     log.info("delayCheckTenant >>>>>  start {}", i);
                 } catch (InterruptedException e) {
+                    log.error("delayCheckTenant >>>>", e.getCause());
                     return;
                 }
             }
@@ -284,7 +313,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
                     Thread.sleep(3000);//每3秒触发一次
                     log.info("云教练 支付 重试>>>>>  start {}", i);
                 } catch (Exception e) {
-                    log.info("云教练 支付 异常  ", e.toString());
+                    log.info("云教练 支付 异常 : {}", e.toString());
                     e.printStackTrace();
                 }
             }

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

@@ -104,6 +104,8 @@ public class StudentManageServiceImpl implements StudentManageService {
     private SysTenantConfigService sysTenantConfigService;
     @Autowired
     private SysEmployeePositionService employeePositionService;
+    @Autowired
+    private TenantInfoService tenantInfoService;
 
     @Override
     public PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
@@ -737,6 +739,9 @@ public class StudentManageServiceImpl implements StudentManageService {
         student.setOperatingTempTag(0);
         student.setServiceTag(student.getServiceTag() == 0 ? 2 : 1);
         student.setTeacherId(student.getTeacherId());
+        // 同步更新机构手机号 如果它存在
+        SysUser user = sysUserFeignService.queryUserById(student.getId());
+        tenantInfoService.updatePhone(student.getPhone(), user.getPhone());
         activityUserMapperDao.updateTeacherId(student.getUserId(),student.getTeacherId());
         if(Objects.nonNull(student.getCarePackage())||Objects.nonNull(student.getComeOnPackage())){
             Student oldStudent = studentDao.get(userId);

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

@@ -356,7 +356,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		if (triggerTime == null || date.after(triggerTime)) {
 			status = SendStatusEnum.SENDING;
 			try {
-				debugMode = false;
+				// debugMode = false;
 				if (debugMode == true
 						|| messageSenderPluginContext.batchSend(messageSender, messageConfig.getDescription(),
 								MessageFormatter.arrayFormat(messageConfig.getContent(), args), tos, url,jpushType,"default",null)) {

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

@@ -20,6 +20,7 @@ import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.page.*;
 
+import com.ym.mec.biz.service.TenantInfoService;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -100,7 +101,8 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 	private RedisTemplate<String,String> redisTemplate;
 	@Autowired
 	private CloudTeacherDao cloudTeacherDao;
-
+	@Autowired
+	private TenantInfoService tenantInfoService;
 
 	@Override
 	public BaseDAO<Integer, Teacher> getDAO() {
@@ -162,12 +164,20 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 		if(null==teacher1){
 			throw new BizException("教师信息不存在");
 		}
+
 		if(StringUtils.isNotEmpty(teacher.getPhone())){
 			SysUser sysUser = sysUserFeignService.queryUserByMobile(teacher.getPhone());
 			if(sysUser != null && !sysUser.getId().equals(teacher.getId())){
 				throw new BizException("手机号已存在");
 			}
 		}
+
+		// 同步更新机构手机号 如果它存在
+		SysUser user = sysUserFeignService.queryUserById(teacher.getId()); // 138 -> 159
+		if (!Objects.equals(user.getPhone(), teacher1.getPhone())) {
+			tenantInfoService.updatePhone(teacher1.getPhone(), user.getPhone());
+		}
+
 		if(Objects.nonNull(teacher.getEntryDate())&&Objects.nonNull(teacher.getFormalStaffDate())){
 			if(teacher.getEntryDate().compareTo(teacher.getFormalStaffDate())>0){
 				throw new BizException("入职日期不可晚于转正日期");
@@ -196,6 +206,12 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 				throw new BizException("手机号已存在");
 			}
 		}
+		// 同步更新机构手机号 如果它存在
+		SysUser user = sysUserFeignService.queryUserById(teacher.getId());
+		if (!Objects.equals(user.getPhone(), teacher1.getPhone())) {
+			tenantInfoService.updatePhone(teacher1.getPhone(), user.getPhone());
+		}
+
 		if(Objects.nonNull(teacher.getEntryDate())&&Objects.nonNull(teacher.getFormalStaffDate())){
 			if(teacher.getEntryDate().compareTo(teacher.getFormalStaffDate())>0){
 				throw new BizException("入职日期不可晚于转正日期");

+ 62 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoSendMsgServiceImpl.java

@@ -0,0 +1,62 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.TenantInfoSendMsgService;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+@Service
+public class TenantInfoSendMsgServiceImpl implements TenantInfoSendMsgService {
+    private static final Logger log = LoggerFactory.getLogger(TenantInfoSendMsgServiceImpl.class);
+
+    @Autowired
+    private SysMessageService sysMessageService;
+
+    //开通
+    public static final String OPEN = "open";
+    //续费
+    public static final String RENEW = "renew";
+
+    //发送邮件和短信
+    public static final Object[] sendAll = {MessageSenderPluginContext.MessageSender.EMAIL, MessageSenderPluginContext.MessageSender.AWSMS};
+    //开通
+    private static final Map<MessageSenderPluginContext.MessageSender, MessageTypeEnum> openMsgEnum = new HashMap<>();
+    //续费
+    private static final Map<MessageSenderPluginContext.MessageSender, MessageTypeEnum> renewMsgEnum = new HashMap<>();
+    //init
+    private static final Map<String, Map<MessageSenderPluginContext.MessageSender, MessageTypeEnum>> sendMsgTypeEn = new HashMap<>();
+
+    static {
+        //开通
+        openMsgEnum.put(MessageSenderPluginContext.MessageSender.EMAIL, MessageTypeEnum.EMAIL_TENANT_ACTIVATION_SUCCESSFUL);
+        openMsgEnum.put(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_TENANT_ACTIVATION_SUCCESSFUL);
+        //续费
+        renewMsgEnum.put(MessageSenderPluginContext.MessageSender.EMAIL, MessageTypeEnum.EMAIL_TENANT_RENEWAL_SUCCESSFUL);
+        renewMsgEnum.put(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_TENANT_RENEWAL_SUCCESSFUL);
+        //init
+        sendMsgTypeEn.put(OPEN, openMsgEnum);
+        sendMsgTypeEn.put(RENEW, renewMsgEnum);
+    }
+
+    //发送邮件及短信提醒
+    @Override
+    public void sendToAll(String type, Integer userId, String email, Object... objs) {
+        Map<Integer, String> receivers = new HashMap<>();
+        receivers.put(userId, email);
+        Arrays.stream(sendAll).forEach(o -> {
+            MessageSenderPluginContext.MessageSender msgType = (MessageSenderPluginContext.MessageSender) o;
+            sysMessageService.batchSendMessage(msgType,
+                    sendMsgTypeEn.get(type).get(msgType), receivers, null, 0, null,
+                    "SYSTEM", objs);
+        });
+    }
+
+}

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java

@@ -782,6 +782,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         if (StringUtils.isNotEmpty(tenantId)) {
             TenantContextHolder.setTenantId(Integer.parseInt(tenantId));
             if (Integer.parseInt(tenantId) != -1) {
+                log.info("==> " + request.getRequestURL());
                 TenantInfo tenantInfo = this.baseMapper.getOpenTenant(Integer.parseInt(tenantId));
                 if (tenantInfo != null) {
                     request.setAttribute("datasourceId", tenantInfo.getDataSource());
@@ -793,6 +794,11 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     }
 
     @Override
+    public void updatePhone(String newPhone, String oldPhone) {
+        baseMapper.updatePhone(newPhone, oldPhone);
+    }
+
+    @Override
     public TenantInfo queryTenantInfoByOrgan(Integer organId) {
         return baseMapper.queryTenantInfoByOrgan(organId);
     }

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

@@ -32,6 +32,9 @@
         data_source_, pay_state_, state_, created_by_, created_time_, updated_by_, updated_time_, tsign_code_, tsign_name_,
         area_id_,user_id_
     </sql>
+    <update id="updatePhone">
+        update tenant_info set phone_ = #{newPhone} where phone_ = #{oldPhone}
+    </update>
 
     <resultMap id="TenantInfoInfoResult" type="com.ym.mec.biz.dal.vo.TenantInfoInfoPageVo">
         <!--  机构基础信息-->