|
@@ -1,18 +1,11 @@
|
|
|
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;
|
|
@@ -28,7 +21,6 @@ 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;
|
|
@@ -38,6 +30,7 @@ import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
@@ -72,6 +65,8 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
@Autowired
|
|
|
private CloudTeacherOrderDao cloudTeacherOrderDao;
|
|
|
@Autowired
|
|
|
+ private CloudTeacherOrderService cloudTeacherOrderService;
|
|
|
+ @Autowired
|
|
|
private StudentService studentService;
|
|
|
//订单不存在
|
|
|
private static final String PAYMENT_ID_NOT_EXISTS = "payment_id_not_exists";
|
|
@@ -108,6 +103,7 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
* @param orderNo 我方订单编号
|
|
|
*/
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public Map<String, Object> checkTenantOrder(String orderNo) {
|
|
|
TenantOrderRecord orderRecord = this.getOne(new WrapperUtil<TenantOrderRecord>()
|
|
|
.hasEq("order_no_", orderNo).queryWrapper());
|
|
@@ -115,6 +111,7 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public Map<String, Object> checkTenantOrder(TenantOrderRecord orderRecord) {
|
|
|
return getTenantOrderState(orderRecord);
|
|
|
}
|
|
@@ -122,7 +119,6 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
private Map<String, Object> getTenantOrderState(TenantOrderRecord orderRecord) {
|
|
|
//主动去第三方查询订单状态
|
|
|
checkTransOrderState(orderRecord);
|
|
|
-
|
|
|
//返回
|
|
|
Map<String, Object> result = new HashMap<>();
|
|
|
result.put("groupType", orderRecord.getOrderType());
|
|
@@ -138,7 +134,7 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
//查询该机构的财务公章
|
|
|
TenantConfig tenantConfig = tenantConfigService.getOne(new QueryWrapper<TenantConfig>()
|
|
|
.eq("tenant_id_", orderRecord.getTenantId()));
|
|
|
- result.put("financeChops",tenantConfig.getCorporateFinanceChops());
|
|
|
+ result.put("financeChops", tenantConfig.getCorporateFinanceChops());
|
|
|
|
|
|
log.info("checkTenantOrder getOrderState>>>>> {}", JSON.toJSONString(orderRecord));
|
|
|
getOrderState(orderRecord, result);
|
|
@@ -147,6 +143,7 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public void checkTenantOrder() {
|
|
|
RBucket<Object> bucket = redissonClient.getBucket("tenant_check_order");
|
|
|
if (!bucket.trySet(1, 3L, TimeUnit.SECONDS)) {
|
|
@@ -176,6 +173,7 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
bucket.delete();
|
|
|
}
|
|
|
|
|
|
+ //开通成功
|
|
|
private void open(TenantOrderRecord record) {
|
|
|
//机构产品信息
|
|
|
TenantProductInfo productInfo = tenantProductInfoService.getOne(new WrapperUtil<TenantProductInfo>()
|
|
@@ -191,6 +189,7 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
tenantProductInfoService.updateById(productInfo);
|
|
|
}
|
|
|
|
|
|
+ //续费成功
|
|
|
private void renew(TenantOrderRecord record) {
|
|
|
//机构产品信息
|
|
|
TenantProductInfo productInfo = tenantProductInfoService.getOne(new WrapperUtil<TenantProductInfo>()
|
|
@@ -200,39 +199,68 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
Integer val = bucket.get();
|
|
|
//修改产品信息
|
|
|
tenantInfoService.renewSuccess(val, productInfo, record.getActualAmount());
|
|
|
- //删除订单数据及订单缓存
|
|
|
}
|
|
|
|
|
|
- private boolean activeCloudTeacher(TenantOrderRecord record) {
|
|
|
+ //激活团练宝成功
|
|
|
+ @Autowired
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void 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);
|
|
|
- }
|
|
|
+ updateById(record);
|
|
|
+ List<CloudTeacherOrder> cloudTeacherOrders = cloudTeacherOrderDao.findByPlatformOrderId(record.getId());
|
|
|
+ Date startTime = DateUtil.trunc(new Date());
|
|
|
+ Date endTime = new Date();
|
|
|
+ for (CloudTeacherOrder cto : cloudTeacherOrders) {
|
|
|
+ endTime = cloudTeacherOrderService.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);
|
|
|
+ }
|
|
|
+ //发信息
|
|
|
+ cloudTeacherOrderService.sendSms(record);
|
|
|
+ }
|
|
|
+
|
|
|
+ //充值成功
|
|
|
+ @Autowired
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void rechargeSuccess(TenantOrderRecord record) {
|
|
|
+ // 更新 tenantAssetsInfo
|
|
|
+ log.info("checkRechargeCheck updateAmount>>>>>");
|
|
|
+ int ret = assetsInfoService.updateAmount(record.getTenantId(), record.getExpectAmount());
|
|
|
+ if (ret != 1) {
|
|
|
+ throw new BizException("更新支付失败");
|
|
|
+ }
|
|
|
+ record.setPayDate(new Date());
|
|
|
+ record.setPayTime(new Date());
|
|
|
+ baseMapper.updateById(record); // 添加支付时间
|
|
|
+ // 取余额
|
|
|
+ TenantAssetsInfo assets = assetsInfoService.getOne(new WrapperUtil<TenantAssetsInfo>()
|
|
|
+ .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();
|
|
|
|
|
|
- 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);
|
|
|
+ Object[] objs = {tenantInfo.getName(), record.getActualAmount(), assets.getBalance()};
|
|
|
+
|
|
|
+ // 发邮件, 发短信
|
|
|
+ Map<Integer, String> sendPar = new HashMap<>();
|
|
|
+ sendPar.put(receiveUserId, email);
|
|
|
+ log.info("platformSendToAll 充值成功发送邮件 >>> receiveUserId {} email {} objs {} sendPar {}", receiveUserId, email, objs, sendPar);
|
|
|
+ sysMessageService.batchSendMessage(-1, MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_TENANT_RECHARGE, sendPar, null, 0, null, "SYSTEM", objs);
|
|
|
|
|
|
- return true;
|
|
|
+ Map<Integer, String> sendPar2 = new HashMap<>();
|
|
|
+ sendPar2.put(receiveUserId, email);
|
|
|
+ log.info("platformSendToAll 充值成功发送邮件分发器 >>> receiveUserId {} email {} objs {} sendPar {}", receiveUserId, email, objs, sendPar2);
|
|
|
+ sysMessageService.batchSendMessage(-1, MessageSenderPluginContext.MessageSender.EMAIL, MessageTypeEnum.EMAIL_TENANT_RECHARGE, sendPar2, null, 0, null, "SYSTEM", objs);
|
|
|
}
|
|
|
+
|
|
|
//主动去第三方查询订单状态
|
|
|
private void checkTransOrderState(TenantOrderRecord orderRecord) {
|
|
|
if (StringUtils.equals(orderRecord.getPaymentChannel(), PaymentChannelEnum.ADAPAY.getCode())) {
|
|
@@ -259,7 +287,7 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- log.info(" >>>>> checkTenantOrder payment >>>>> {}", payment);
|
|
|
+ log.info(" >>>>> checkTenantOrder orderType {} payment >>>>> {}", orderRecord.getOrderType(), payment);
|
|
|
log.info(" >>>>> checkTenantOrder orderRecord >>>>> {}", JSON.toJSONString(orderRecord));
|
|
|
} catch (Exception e) {
|
|
|
log.error(" >>>>> checkTenantOrder payment error>>>>> {}", JSON.toJSONString(orderRecord));
|
|
@@ -275,9 +303,12 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
switch (orderRecord.getOrderState()) {
|
|
|
case 1:
|
|
|
tenantOrderSuccess(orderRecord, detail);
|
|
|
-
|
|
|
- checkOrder.get(orderRecord.getOrderType()).accept(orderRecord);
|
|
|
-
|
|
|
+ Consumer<TenantOrderRecord> consumer = checkOrder.get(orderRecord.getOrderType());
|
|
|
+ if (Objects.isNull(consumer)) {
|
|
|
+ code = DealStatusEnum.ING.getCode();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ consumer.accept(orderRecord);
|
|
|
code = DealStatusEnum.SUCCESS.getCode();
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
orderRecord.setPayDate(now.toLocalDate().toDate());
|
|
@@ -311,74 +342,6 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
detail.put("num", productInfo.getExpiryCount());
|
|
|
}
|
|
|
|
|
|
- private void rechargeSuccess(TenantOrderRecord record) {
|
|
|
- // 更新 tenantAssetsInfo
|
|
|
- log.info("checkRechargeCheck updateAmount>>>>>");
|
|
|
- int ret = assetsInfoService.updateAmount(record.getTenantId(), record.getExpectAmount());
|
|
|
- if (ret != 1) {
|
|
|
- throw new BizException("更新支付失败");
|
|
|
- }
|
|
|
- record.setPayDate(new Date());
|
|
|
- record.setPayTime(new Date());
|
|
|
- baseMapper.updateById(record); // 添加支付时间
|
|
|
- // 取余额
|
|
|
- TenantAssetsInfo assets = assetsInfoService.getOne(new WrapperUtil<TenantAssetsInfo>().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()};
|
|
|
-
|
|
|
- // 发邮件, 发短信
|
|
|
- Map<Integer, String> sendPar = new HashMap<>();
|
|
|
- sendPar.put(receiveUserId, email);
|
|
|
- log.info("platformSendToAll 充值成功发送邮件 >>> receiveUserId {} email {} objs {} sendPar {}", receiveUserId, email, objs, sendPar);
|
|
|
- sysMessageService.batchSendMessage(-1, MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_TENANT_RECHARGE, sendPar, null, 0, null, "SYSTEM", objs);
|
|
|
-
|
|
|
- Map<Integer, String> sendPar2 = new HashMap<>();
|
|
|
- sendPar2.put(receiveUserId, email);
|
|
|
- log.info("platformSendToAll 充值成功发送邮件分发器 >>> receiveUserId {} email {} objs {} sendPar {}", receiveUserId, email, objs, sendPar2);
|
|
|
- sysMessageService.batchSendMessage(-1, MessageSenderPluginContext.MessageSender.EMAIL, MessageTypeEnum.EMAIL_TENANT_RECHARGE, sendPar2, null, 0, null, "SYSTEM", objs);
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- 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");
|
|
|
- if (!bucket.trySet(1, 3L, TimeUnit.SECONDS)) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- log.info(" 机构充值 {} rechargeCheck>>>>>", i);
|
|
|
- checkTransOrderState(record);
|
|
|
- if (record.getOrderState() == 1) {
|
|
|
- baseMapper.updateById(record);
|
|
|
- try {
|
|
|
- log.info(" 机构充值 {} rechargeSuccess>>>>>", i);
|
|
|
- this.rechargeSuccess(record); // 充值成功
|
|
|
- return true;
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- bucket.delete();
|
|
|
- return false;
|
|
|
- }
|
|
|
}
|
|
|
|