|
@@ -1,5 +1,6 @@
|
|
|
package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
+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;
|
|
@@ -7,26 +8,34 @@ import com.google.common.collect.Lists;
|
|
|
import com.ym.mec.auth.api.client.SysUserFeignService;
|
|
|
import com.ym.mec.auth.api.entity.SysRole;
|
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
|
+import com.ym.mec.biz.dal.dao.OrganizationDao;
|
|
|
+import com.ym.mec.biz.dal.dao.SysConfigDao;
|
|
|
import com.ym.mec.biz.dal.dao.TenantInfoDao;
|
|
|
import com.ym.mec.biz.dal.dto.TenantConfigDto;
|
|
|
import com.ym.mec.biz.dal.dto.TenantInfoDto;
|
|
|
import com.ym.mec.biz.dal.dto.TenantProductInfoDto;
|
|
|
import com.ym.mec.biz.dal.entity.*;
|
|
|
-import com.ym.mec.biz.dal.enums.JobNatureEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.*;
|
|
|
import com.ym.mec.biz.dal.vo.TenantInfoInfoPageVo;
|
|
|
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.service.IdGeneratorService;
|
|
|
+import com.ym.mec.thirdparty.yqpay.Msg;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.joda.time.LocalDate;
|
|
|
+import org.joda.time.LocalDateTime;
|
|
|
import org.redisson.api.RBucket;
|
|
|
import org.redisson.api.RedissonClient;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.function.Consumer;
|
|
@@ -34,6 +43,7 @@ import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo> implements TenantInfoService {
|
|
|
+ private static final Logger log = LoggerFactory.getLogger(TenantInfoServiceImpl.class);
|
|
|
|
|
|
@Autowired
|
|
|
private SysUserFeignService sysUserFeignService;
|
|
@@ -44,11 +54,25 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
|
|
|
@Autowired
|
|
|
private PlatformProductService platformProductService;
|
|
|
@Autowired
|
|
|
+ private PlatformServeService platformServeService;
|
|
|
+ @Autowired
|
|
|
+ private PlatformServeDetailService platformServeDetailService;
|
|
|
+ @Autowired
|
|
|
private TenantConfigService tenantConfigService;
|
|
|
@Autowired
|
|
|
private RedissonClient redissonClient;
|
|
|
@Autowired
|
|
|
private SysUserTsignService sysUserTsignService;
|
|
|
+ @Autowired
|
|
|
+ private OrganizationDao organizationDao;
|
|
|
+ @Autowired
|
|
|
+ private PayService payService;
|
|
|
+ @Autowired
|
|
|
+ private IdGeneratorService idGenerator;
|
|
|
+ @Autowired
|
|
|
+ private SysConfigDao sysConfigDao;
|
|
|
+ @Autowired
|
|
|
+ private TenantOrderRecordService tenantOrderRecordService;
|
|
|
|
|
|
/**
|
|
|
* 新增机构
|
|
@@ -78,6 +102,20 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
|
|
|
tenantProductInfoService::addTenantProduct);
|
|
|
//添加机构配置
|
|
|
setIdByApply(tenantId, dto.getConfig(), dto.getConfig()::setTenantId, tenantConfigService::addConfig);
|
|
|
+ //创建一个和机构同名称的“分部”
|
|
|
+ createOrg(tenantInfo,dto.getAreaId());
|
|
|
+ }
|
|
|
+
|
|
|
+ //创建一个和机构同名称的“分部”
|
|
|
+ private void createOrg(TenantInfo tenantInfo,Integer areaId) {
|
|
|
+ Organization organization = new Organization();
|
|
|
+ organization.setName(tenantInfo.getName());
|
|
|
+ organization.setDelFlag(YesOrNoEnum.NO);
|
|
|
+ organization.setGradeType(GradeTypeEnum.SIX_PLUS);
|
|
|
+ organization.setCreateTime(new Date());
|
|
|
+ organization.setTenantId(tenantInfo.getId());
|
|
|
+ organization.setAreaId(areaId);
|
|
|
+ organizationDao.insert(organization);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -147,6 +185,18 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
|
|
|
TenantConfig tenantConfig = tenantConfigService.getOne(new QueryWrapper<TenantConfig>()
|
|
|
.eq("tenant_id_", tenantId));
|
|
|
setTenantInfo(tenantConfig, new TenantConfigDto(), tenantInfoDto::setConfig);
|
|
|
+ //获取服务信息
|
|
|
+ PlatformServe platformServe = platformServeService.getOne(new QueryWrapper<PlatformServe>()
|
|
|
+ .eq("id_", productInfo.getServeId()));
|
|
|
+ Optional.ofNullable(platformServe)
|
|
|
+ .map(PlatformServe::getName)
|
|
|
+ .ifPresent(tenantInfoDto::setPlatformServeName);
|
|
|
+ //获取服务详情
|
|
|
+ PlatformServeDetail serveDetail = platformServeDetailService.getOne(new QueryWrapper<PlatformServeDetail>()
|
|
|
+ .eq("id_", productInfo.getServeDetailId()));
|
|
|
+ Optional.ofNullable(serveDetail)
|
|
|
+ .map(PlatformServeDetail::getStudentUpLimit)
|
|
|
+ .ifPresent(tenantInfoDto::setStudentUpLimit);
|
|
|
return tenantInfoDto;
|
|
|
}
|
|
|
|
|
@@ -283,10 +333,96 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
|
|
|
/**
|
|
|
* 机构缴费
|
|
|
*/
|
|
|
- public void pay(){
|
|
|
+ public Map<String, Object> pay(Integer tenantId) throws Exception {
|
|
|
+ TenantInfo tenantInfo = Optional.ofNullable(tenantId)
|
|
|
+ .map(baseMapper::selectById)
|
|
|
+ .orElseThrow(() -> new BizException("未查询到机构信息!"));
|
|
|
+ //机构产品信息
|
|
|
+ TenantProductInfo productInfo = tenantProductInfoService.getOne(new QueryWrapper<TenantProductInfo>()
|
|
|
+ .eq("tenant_id_", tenantId));
|
|
|
+ //生成订单编号
|
|
|
+ String orderNo = idGenerator.generatorId("payment") + "";
|
|
|
+ String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
|
|
|
+ TenantOrderRecordEnum tenantEnum = TenantOrderRecordEnum.TENANT_OPEN;
|
|
|
+ //获取分部信息
|
|
|
+ Organization organization = organizationDao.getByName(tenantInfo.getName(), tenantId);
|
|
|
+ if (Objects.isNull(organization)) {
|
|
|
+ throw new BizException("未查询到机构分部信息!");
|
|
|
+ }
|
|
|
+ Map<String, Object> payMap = new HashMap<>();
|
|
|
+ int orderState = 0;
|
|
|
+ //消费大于0元则拉起支付
|
|
|
+ if (productInfo.getPayAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ payMap = payService.getPayMap(
|
|
|
+ productInfo.getPayAmount(),
|
|
|
+ BigDecimal.ZERO,
|
|
|
+ orderNo,
|
|
|
+ baseApiUrl + "/WEB-SERVER/tenantInfo/notify",
|
|
|
+ baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
|
|
|
+ tenantEnum.getMsg(),
|
|
|
+ tenantEnum.getMsg(),
|
|
|
+ 1,//临时写死
|
|
|
+ tenantEnum.getCode()
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ //已支付
|
|
|
+ orderState = 1;
|
|
|
+ }
|
|
|
+ createOrderRecord(tenantId, productInfo.getPayAmount(), orderNo, tenantEnum, orderState);
|
|
|
+ log.info("tenant pay >>>>> " + JSON.toJSONString(payMap));
|
|
|
+ return payMap;
|
|
|
+ }
|
|
|
|
|
|
+ //生成订单
|
|
|
+ private void createOrderRecord(Integer tenantId, BigDecimal payAmount, String orderNo, TenantOrderRecordEnum tenantEnum, Integer orderState) {
|
|
|
+ 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);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 支付消息回调
|
|
|
+ *
|
|
|
+ * @param msg
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Msg orderNotify(Msg msg) {
|
|
|
+ log.info("tenant orderNotify >>>>> " + msg.toString());
|
|
|
+ msg.setMsg("fail");
|
|
|
+ Map<String, String> notifyMap = JSON.parseObject(msg.getResponseParameters(), Map.class);
|
|
|
+ TenantOrderRecord record = new TenantOrderRecord();
|
|
|
+ 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"));
|
|
|
+ record.setOrderState(1);
|
|
|
+ msg.setCode("000000");
|
|
|
+ msg.setMsg("success");
|
|
|
+ } else {
|
|
|
+ //支付失败
|
|
|
+ record.setOrderState(2);
|
|
|
+ }
|
|
|
+ tenantOrderRecordService.update(record, new QueryWrapper<TenantOrderRecord>()
|
|
|
+ .eq("order_no_", record.getOrderNo()));
|
|
|
+ log.info("tenant orderNotify return>>>>> " + msg.toString());
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 校验手机号
|