|
@@ -6,6 +6,7 @@ import java.util.stream.Collectors;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.ym.mec.biz.dal.dao.*;
|
|
|
import com.ym.mec.biz.dal.entity.*;
|
|
@@ -40,7 +41,6 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
|
|
|
private CourseScheduleDao courseScheduleDao;
|
|
|
@Autowired
|
|
|
private CloudTeacherDao cloudTeacherDao;
|
|
|
-
|
|
|
@Autowired
|
|
|
private StudentService studentService;
|
|
|
@Autowired
|
|
@@ -52,15 +52,34 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
|
|
|
@Autowired
|
|
|
private IdGeneratorService idGenerator;
|
|
|
@Autowired
|
|
|
- private CloudTeacherOrderRecordService cloudTeacherOrderRecordService;
|
|
|
-
|
|
|
+ private TenantOrderRecordService tenantOrderRecordService;
|
|
|
@Override
|
|
|
public BaseDAO<Long, CloudTeacherOrder> getDAO() {
|
|
|
return cloudTeacherOrderDao;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public PageInfo<CloudTeacherStudent> queryInactive(CloudTeacherOrderQueryInfo queryInfo) {
|
|
|
+ public PageInfo<CloudTeacherStudent> queryActiveRecord(CloudTeacherOrderQueryInfo queryInfo) {
|
|
|
+ PageInfo<CloudTeacherStudent> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
+ MapUtil.populateMap(params, queryInfo);
|
|
|
+ List<CloudTeacherStudent> dataList = null;
|
|
|
+ int count = cloudTeacherOrderDao.findRecordCount(params);
|
|
|
+ if (count > 0) {
|
|
|
+ pageInfo.setTotal(count);
|
|
|
+ params.put("offset", pageInfo.getOffset());
|
|
|
+ dataList = cloudTeacherOrderDao.queryRecord(params);
|
|
|
+ }
|
|
|
+ if (count == 0) {
|
|
|
+ dataList = new ArrayList<>();
|
|
|
+ }
|
|
|
+ pageInfo.setRows(dataList);
|
|
|
+
|
|
|
+ return pageInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PageInfo<CloudTeacherStudent> queryInactive(CloudTeacherOrderQueryInfo queryInfo) throws Exception {
|
|
|
PageInfo<CloudTeacherStudent> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
|
|
|
Map<String, Object> params = new HashMap<>();
|
|
|
MapUtil.populateMap(params, queryInfo);
|
|
@@ -76,67 +95,66 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
|
|
|
}
|
|
|
pageInfo.setRows(dataList);
|
|
|
|
|
|
- // List<TenantConfig> tenCfg = tenantConfigService.list(new Wrapper<TenantConfig>());
|
|
|
- assert dataList != null;
|
|
|
+ if (count == 0) {
|
|
|
+ return pageInfo;
|
|
|
+ }
|
|
|
for (CloudTeacherStudent cst: dataList) {
|
|
|
- if (cst.getTime() == null) continue;
|
|
|
- TenantConfig tenantConfig = tenantConfigService.getById(cst.getTenantId());
|
|
|
- if (tenantConfig == null) continue;
|
|
|
+ TenantConfig tenantConfig = tenantConfigService.getOne(new QueryWrapper<TenantConfig>().eq("tenant_id_", cst.getTenantId()));
|
|
|
+ if (tenantConfig == null) {
|
|
|
+ throw new Exception("未找到组织Id " + cst.getTenantId().toString() + "在 TenantConfig 表");
|
|
|
+ }
|
|
|
JSONObject cfg = JSON.parseObject(tenantConfig.getConfig());
|
|
|
JSONObject memberConfig = (JSONObject) cfg.get("member_config");
|
|
|
- if (cst.getType() == 1) {
|
|
|
- double divide = memberConfig.getDouble("month_divide");
|
|
|
- cst.setAmount(divide * cst.getTime());
|
|
|
- } else if (cst.getType() == 2) { // 月
|
|
|
- double divide = memberConfig.getDouble("month_divide");
|
|
|
- cst.setAmount(divide * cst.getTime());
|
|
|
- } else if (cst.getType() == 3) {
|
|
|
- double divide = memberConfig.getDouble("quarter_divide");
|
|
|
- cst.setAmount(divide * cst.getTime());
|
|
|
- } else if (cst.getType() == 4) {
|
|
|
- double divide = memberConfig.getDouble("half_year_divide");
|
|
|
- cst.setAmount(divide * cst.getTime());
|
|
|
- } else if (cst.getType() == 5) {
|
|
|
- double divide = memberConfig.getDouble("year_divide");
|
|
|
- cst.setAmount(divide * cst.getTime());
|
|
|
+ Double divide;
|
|
|
+ switch (cst.getType()) {
|
|
|
+ case 1:
|
|
|
+ divide = memberConfig.getDouble("day_divide");
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ divide = memberConfig.getDouble("month_divide");
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ divide = memberConfig.getDouble("quarter_divide");
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ divide = memberConfig.getDouble("half_year_divide");
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ divide = memberConfig.getDouble("year_divide");
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ divide = null;
|
|
|
+ }
|
|
|
+ if (divide == null) {
|
|
|
+ cst.setAmount(null);
|
|
|
+ } else {
|
|
|
+ cst.setAmount(new BigDecimal(divide * cst.getTime()));
|
|
|
}
|
|
|
}
|
|
|
return pageInfo;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public Map<String, Object> pay(List<CloudTeacherStudent> cloudTeacherStudents) throws Exception {
|
|
|
|
|
|
- BigDecimal sumAmount = new BigDecimal(0);
|
|
|
+ if (cloudTeacherStudents.size() == 0) {
|
|
|
+ throw new Exception("至少选择一条记录");
|
|
|
+ }
|
|
|
Integer tenantId = null;
|
|
|
- StringBuilder payStudentIds = new StringBuilder();
|
|
|
- StringBuilder payStudentIdsZero = new StringBuilder();
|
|
|
for (CloudTeacherStudent cts: cloudTeacherStudents) {
|
|
|
if (cts.getAmount() == null) {
|
|
|
- throw new Exception("金额错误在 " + cts.getStudentId().toString() );
|
|
|
+ throw new Exception("金额错误在, 学生编号: " + cts.getStudentId().toString());
|
|
|
}
|
|
|
if (tenantId == null) {
|
|
|
tenantId = cts.getTenantId();
|
|
|
- } else {
|
|
|
- if (!tenantId.equals(cts.getTenantId())) {
|
|
|
- throw new Exception("分部Id 错误 " + cts.getStudentId().toString() );
|
|
|
- }
|
|
|
- }
|
|
|
- if (cts.getAmount() == 0) {
|
|
|
- payStudentIdsZero.append(cts.getStudentId());
|
|
|
- continue;
|
|
|
- } else {
|
|
|
- sumAmount.add(BigDecimal.valueOf(cts.getAmount()));
|
|
|
- payStudentIds.append(cts.getStudentId().toString()).append(",");
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
- // 金额为 0 的
|
|
|
- if (payStudentIdsZero.length() > 0) {
|
|
|
- this.updateCloudTeacherOrder(payStudentIdsZero.toString());
|
|
|
- createOrderRecord(tenantId, new BigDecimal(0), "", TenantOrderRecordEnum.CLOUD_TEACHER, 1, payStudentIdsZero.toString());
|
|
|
+ BigDecimal sumAmount = new BigDecimal(0);
|
|
|
+ for (CloudTeacherStudent cts: cloudTeacherStudents) {
|
|
|
+ sumAmount = sumAmount.add(cts.getAmount());
|
|
|
}
|
|
|
- return this.payExec(sumAmount, tenantId, payStudentIds.toString());
|
|
|
+ return this.payExec(sumAmount, tenantId, cloudTeacherStudents);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -145,7 +163,7 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
|
|
|
* @param tenantId 分部
|
|
|
* @return
|
|
|
*/
|
|
|
- private Map<String, Object> payExec(BigDecimal payAmount, Integer tenantId, String payStudentIds) throws Exception {
|
|
|
+ private Map<String, Object> payExec(BigDecimal payAmount, Integer tenantId, List<CloudTeacherStudent> cloudTeacherStudents) throws Exception {
|
|
|
//生成订单编号
|
|
|
String orderNo = idGenerator.generatorId("payment") + "";
|
|
|
String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
|
|
@@ -166,26 +184,21 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
|
|
|
1,//临时写死
|
|
|
tenantEnum.getCode()
|
|
|
);
|
|
|
- createOrderRecord(tenantId, payAmount, orderNo, tenantEnum, orderState, payStudentIds);
|
|
|
- log.info("tenant pay >>>>> " + JSON.toJSONString(payMap));
|
|
|
- } else {
|
|
|
- //已支付 直接激活
|
|
|
+ } else { // 消费大于 0 元 已支付 直接激活
|
|
|
orderState = 1;
|
|
|
-
|
|
|
}
|
|
|
+ createOrderRecord(tenantId, payAmount, orderNo, tenantEnum, orderState, cloudTeacherStudents);
|
|
|
+ log.info("tenant pay >>>>> " + JSON.toJSONString(payMap));
|
|
|
return payMap;
|
|
|
}
|
|
|
|
|
|
- private Integer updateCloudTeacherOrder(String payStudentIds) {
|
|
|
- return cloudTeacherOrderDao.updateCloudTeacherOrder(payStudentIds);
|
|
|
- }
|
|
|
-
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public Msg payNotify(Msg msg) {
|
|
|
log.info("tenant orderNotify >>>>> " + msg.toString());
|
|
|
msg.setMsg("fail");
|
|
|
Map<String, String> notifyMap = JSON.parseObject(msg.getResponseParameters(), Map.class);
|
|
|
- CloudTeacherOrderRecord record = cloudTeacherOrderRecordService.getOne(
|
|
|
- new QueryWrapper<CloudTeacherOrderRecord>().eq("order_no_", notifyMap.get("orderNo")));
|
|
|
+ TenantOrderRecord record = tenantOrderRecordService.getOne(
|
|
|
+ new QueryWrapper<TenantOrderRecord>().eq("order_no_", notifyMap.get("orderNo")));
|
|
|
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");
|
|
@@ -196,25 +209,31 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
|
|
|
//tradeState 88就是正确的 其他错误的
|
|
|
// DealStatusEnum
|
|
|
// notifyMap.put("totalMoney", notifyMap.get("payAmount"));
|
|
|
- if (record.getPayStudentIds() != null) {
|
|
|
- this.updateCloudTeacherOrder(record.getPayStudentIds());
|
|
|
- }
|
|
|
+ log.info("tenant orderNotify update order status start" + record.getId().toString());
|
|
|
+ cloudTeacherOrderDao.updateOrderStatusOK(record.getId());
|
|
|
+ log.info("tenant orderNotify update order status end");
|
|
|
record.setOrderState(1);
|
|
|
msg.setCode("000000");
|
|
|
msg.setMsg("success");
|
|
|
} else {
|
|
|
+ log.info("tenant orderNotify fail");
|
|
|
//支付失败
|
|
|
record.setOrderState(2);
|
|
|
}
|
|
|
- cloudTeacherOrderRecordService.update(record, new QueryWrapper<CloudTeacherOrderRecord>()
|
|
|
+ tenantOrderRecordService.update(record, new QueryWrapper<TenantOrderRecord>()
|
|
|
.eq("order_no_", record.getOrderNo()));
|
|
|
log.info("tenant orderNotify return>>>>> " + msg.toString());
|
|
|
return msg;
|
|
|
}
|
|
|
|
|
|
- private void createOrderRecord(Integer tenantId, BigDecimal payAmount, String orderNo, TenantOrderRecordEnum tenantEnum, Integer orderState, String payStudentIds) {
|
|
|
+ public Boolean payCheck(String orderNo) {
|
|
|
+ TenantOrderRecord record = tenantOrderRecordService.getOne(new QueryWrapper<TenantOrderRecord>().eq("order_no_", orderNo));
|
|
|
+ return record.getOrderState() == 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void createOrderRecord(Integer tenantId, BigDecimal payAmount, String orderNo, TenantOrderRecordEnum tenantEnum, Integer orderState, List<CloudTeacherStudent> cloudTeacherStudents) {
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
- CloudTeacherOrderRecord record = new CloudTeacherOrderRecord();
|
|
|
+ TenantOrderRecord record = new TenantOrderRecord();
|
|
|
record.setTenantId(tenantId);
|
|
|
record.setOrderNo(orderNo);
|
|
|
record.setOrderType(tenantEnum.getCode());
|
|
@@ -225,8 +244,10 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
|
|
|
record.setPayDate(now.toLocalDate().toDate());
|
|
|
record.setPayTime(now.toDate());
|
|
|
record.setCreatedTime(now.toDate());
|
|
|
- record.setPayStudentIds(payStudentIds);
|
|
|
- cloudTeacherOrderRecordService.save(record);
|
|
|
+ tenantOrderRecordService.save(record);
|
|
|
+ for (CloudTeacherStudent cts : cloudTeacherStudents) {
|
|
|
+ cloudTeacherOrderDao.updateOrderId(cts.getCloudTeacherOrderId(), cts.getAmount(), record.getId());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -279,8 +300,14 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
|
|
|
periodEnum = PeriodEnum.MONTH;
|
|
|
break;
|
|
|
case 3:
|
|
|
- periodEnum = PeriodEnum.YEAR;
|
|
|
+ periodEnum = PeriodEnum.QUARTERLY;
|
|
|
break;
|
|
|
+ case 4:
|
|
|
+ periodEnum = PeriodEnum.YEAR_HALF;
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ periodEnum = PeriodEnum.YEAR;
|
|
|
+ break;
|
|
|
|
|
|
default:
|
|
|
break;
|
|
@@ -292,14 +319,18 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
|
|
|
cloudTeacher = new CloudTeacher();
|
|
|
startTime = DateUtil.trunc(nowDate);
|
|
|
endBaseTime = startTime;
|
|
|
- if (cloudTeacherOrder.getType().equals(1)) {
|
|
|
+ if (cloudTeacherOrder.getType().equals(1)) { // 日
|
|
|
endTime = DateUtil.addDays(startTime, cloudTeacherOrder.getTime());
|
|
|
- } else if (cloudTeacherOrder.getType().equals(2)) {
|
|
|
+ } else if (cloudTeacherOrder.getType().equals(2)) { // 月
|
|
|
endTime = DateUtil.addMonths(startTime, cloudTeacherOrder.getTime());
|
|
|
- } else if (cloudTeacherOrder.getType().equals(3)) {
|
|
|
+ } else if (cloudTeacherOrder.getType().equals(3)) { // 季
|
|
|
+ endTime = DateUtil.addMonths(startTime, cloudTeacherOrder.getTime() * 3);
|
|
|
+ } else if (cloudTeacherOrder.getType().equals(4)) { // 半年
|
|
|
+ endTime = DateUtil.addMonths(startTime, cloudTeacherOrder.getTime() * 6);
|
|
|
+ } else if (cloudTeacherOrder.getType().equals(5)) { // 年
|
|
|
endTime = DateUtil.addYears(startTime, cloudTeacherOrder.getTime());
|
|
|
}
|
|
|
- cloudTeacher.setStudentId(cloudTeacherOrder.getStudentId());
|
|
|
+ cloudTeacher.setStudentId(cloudTeacherOrder.getStudentId());
|
|
|
cloudTeacher.setLevel(cloudTeacherOrder.getLevel());
|
|
|
cloudTeacher.setStartTime(startTime);
|
|
|
cloudTeacher.setEndTime(endTime);
|
|
@@ -311,11 +342,15 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
|
|
|
startTime = DateUtil.trunc(nowDate);
|
|
|
endBaseTime = startTime;
|
|
|
}
|
|
|
- if (cloudTeacherOrder.getType().equals(1)) {
|
|
|
+ if (cloudTeacherOrder.getType().equals(1)) { // 日
|
|
|
endTime = DateUtil.addDays(endBaseTime, cloudTeacherOrder.getTime());
|
|
|
- } else if (cloudTeacherOrder.getType().equals(2)) {
|
|
|
+ } else if (cloudTeacherOrder.getType().equals(2)) { // 月
|
|
|
endTime = DateUtil.addMonths(endBaseTime, cloudTeacherOrder.getTime());
|
|
|
- } else if (cloudTeacherOrder.getType().equals(3)) {
|
|
|
+ } else if (cloudTeacherOrder.getType().equals(3)) { // 季
|
|
|
+ endTime = DateUtil.addMonths(endBaseTime, cloudTeacherOrder.getTime() * 3);
|
|
|
+ } else if (cloudTeacherOrder.getType().equals(4)) { // 半年
|
|
|
+ endTime = DateUtil.addMonths(endBaseTime, cloudTeacherOrder.getTime() * 6);
|
|
|
+ } else if (cloudTeacherOrder.getType().equals(5)) { // 年
|
|
|
endTime = DateUtil.addYears(endBaseTime, cloudTeacherOrder.getTime());
|
|
|
}
|
|
|
cloudTeacher.setStartTime(startTime);
|