|
@@ -0,0 +1,137 @@
|
|
|
+package com.leromro.core.ttl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
+import com.leromro.core.domain.*;
|
|
|
+import com.leromro.core.mapper.*;
|
|
|
+import com.leromro.core.utils.DateTimeUtil;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+@Component("monitor")
|
|
|
+public class Monitor {
|
|
|
+ @Autowired
|
|
|
+ private PlatformFinanceMapper platformFinanceMapper;
|
|
|
+ @Autowired
|
|
|
+ private SecondOrdersMapper secondOrdersMapper;
|
|
|
+ @Autowired
|
|
|
+ private OrderFrozenFundsMapper orderFrozenFundsMapper;
|
|
|
+ @Autowired
|
|
|
+ private VolunteerAccountMapper volunteerAccountMapper;
|
|
|
+ @Autowired
|
|
|
+ private JdbcTemplate jdbcTemplate;
|
|
|
+ /**
|
|
|
+ * 定时任务定时调用的任务
|
|
|
+ */
|
|
|
+ @Transactional
|
|
|
+ public void orderMonitor () {
|
|
|
+ System.out.println("开始查询解冻时间");
|
|
|
+ //查询数据库,查到需要解冻的数据的集合
|
|
|
+ QueryWrapper<OrderFrozenFunds> queryFrozenWrapper = new QueryWrapper<OrderFrozenFunds>().eq("status", 0).lt("frozen_end_time", DateTimeUtil.getNowTime());
|
|
|
+ //万物起源:查到冻结的订单,
|
|
|
+ List<OrderFrozenFunds> needThawMoneyList = orderFrozenFundsMapper.selectList(queryFrozenWrapper);
|
|
|
+ if(needThawMoneyList.isEmpty()){
|
|
|
+ System.out.println("没有需要解冻的订单");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<Long> orderFrozenFundsIdList = needThawMoneyList.stream().map(OrderFrozenFunds::getOrderFrozenFundsId).collect(Collectors.toList());
|
|
|
+ List<String> seconderOrderIdList = needThawMoneyList.stream().map(OrderFrozenFunds::getSecondOrderId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ /*List<BigDecimal> volunteerMoneyList = needThawMoneyList.stream().map(OrderFrozenFunds::getVolunteerMoney).collect(Collectors.toList());
|
|
|
+ List<BigDecimal> platformBrokerageList = needThawMoneyList.stream().map(OrderFrozenFunds::getPlatformBrokerage).collect(Collectors.toList());
|
|
|
+ List<BigDecimal> scoreMoneyList = needThawMoneyList.stream().map(OrderFrozenFunds::getScoreMoney).collect(Collectors.toList());*/
|
|
|
+
|
|
|
+ // needThawMoneyList.stream().map(OrderFrozenFunds::).collect(Collectors.toList());
|
|
|
+ //Map<Long, OrderFrozenFunds> totalMoneyMap = needThawMoneyList.stream().collect(Collectors.toMap(OrderFrozenFunds::getVolunteerId, Function.identity()));
|
|
|
+
|
|
|
+
|
|
|
+ //查到旧的志愿者账户表的余额(用来存放志愿者月变更记录)
|
|
|
+ /* QueryWrapper<VolunteerAccount> volunteerAccountQueryWrapper = new QueryWrapper<VolunteerAccount>().in("volunteer_id", volunteerMoneyMap.keySet());
|
|
|
+ List<VolunteerAccount> oldVolunteerAccountList = volunteerAccountMapper.selectList(volunteerAccountQueryWrapper);*/
|
|
|
+ //更新表,直接解冻。
|
|
|
+ UpdateWrapper<OrderFrozenFunds> updateFrozenWrapper = new UpdateWrapper<OrderFrozenFunds>().in("order_frozen_funds_id", orderFrozenFundsIdList).set("status", 1);
|
|
|
+ orderFrozenFundsMapper.update(null,updateFrozenWrapper);
|
|
|
+ //志愿者订单表 2 已完成的订单 更新时间
|
|
|
+ UpdateWrapper<SecondOrder> updateSecondOrderWrapper = new UpdateWrapper<SecondOrder>().eq("order_status",2).in("second_order_id",seconderOrderIdList).set("score",1).setSql("remark = CASE WHEN score IS NULL OR score = '' THEN '用户未评价,系统默认一星' ELSE remark END");;
|
|
|
+ secondOrdersMapper.update(null,updateSecondOrderWrapper);
|
|
|
+ //解冻后,向平台流水表中添加数据
|
|
|
+ // 1.先添加志愿者变更金额
|
|
|
+ List<PlatformFinance> volunteerPlatformList = needThawMoneyList.stream().map(orderFrozenFunds -> new PlatformFinance(null,orderFrozenFunds.getVolunteerMoney(), 1, 2, 3, orderFrozenFunds.getSecondOrderId(), orderFrozenFunds.getVolunteerId())).collect(Collectors.toList());
|
|
|
+ platformFinanceMapper.insertPlatformFinanceList(volunteerPlatformList);
|
|
|
+ // 2.然后添加平台变更金额
|
|
|
+ List<PlatformFinance> platformPlatformList = needThawMoneyList.stream().map(orderFrozenFunds -> new PlatformFinance(null,orderFrozenFunds.getPlatformBrokerage(), 1, 3, 3, orderFrozenFunds.getSecondOrderId(), orderFrozenFunds.getVolunteerId())).collect(Collectors.toList());
|
|
|
+ platformFinanceMapper.insertPlatformFinanceList(platformPlatformList);
|
|
|
+ // 3.然后添加奖金 并且添加备注
|
|
|
+ List<PlatformFinance> sourceTypePlatformList = needThawMoneyList.stream().filter(orderFrozenFunds -> orderFrozenFunds.getScoreMoney() != null).map(orderFrozenFunds -> new PlatformFinance(null, orderFrozenFunds.getScoreMoney(), 1, 2, 3, orderFrozenFunds.getSecondOrderId(), orderFrozenFunds.getVolunteerId())).collect(Collectors.toList());
|
|
|
+ for (PlatformFinance platformFinance : sourceTypePlatformList) {
|
|
|
+ platformFinance.setRemark("奖金");
|
|
|
+ }
|
|
|
+
|
|
|
+ System.out.println("只剩change记录和余额变动了");
|
|
|
+ // ---------------------------
|
|
|
+ //解冻后:
|
|
|
+ //判断,如果志愿者有多个订单???????????
|
|
|
+
|
|
|
+ //还是获取map<userId,list<解冻数据>>
|
|
|
+ Map<Long, List<OrderFrozenFunds>> volunteerAccountChangeGroupByVId = needThawMoneyList.stream().collect(Collectors.groupingBy(OrderFrozenFunds::getVolunteerId));
|
|
|
+ //生成所有的记录对象
|
|
|
+ volunteerAccountChangeGroupByVId.forEach((volunteerId,orderFrozenFunds) -> {
|
|
|
+ //查看用户当前的余额
|
|
|
+ BigDecimal oldVolunteerBalance = jdbcTemplate.queryForObject("select balance from l_volunteer_account where volunteer_id = ? FOR UPDATE",
|
|
|
+ BigDecimal.class, volunteerId);
|
|
|
+ //生成所有的记录
|
|
|
+ List<Object[]> volunteerAccountChanges = new ArrayList<>();
|
|
|
+ BigDecimal theBalance = oldVolunteerBalance;
|
|
|
+ for (OrderFrozenFunds orderFrozenFund : orderFrozenFunds) {
|
|
|
+ BigDecimal volunteerAddMoney = theBalance.add(orderFrozenFund.getVolunteerMoney());
|
|
|
+ volunteerAccountChanges.add(new Object[]{volunteerId,1,1,volunteerAddMoney,orderFrozenFund.getVolunteerMoney(),volunteerAddMoney.add(orderFrozenFund.getVolunteerMoney())
|
|
|
+ });
|
|
|
+ theBalance = volunteerAddMoney;
|
|
|
+ }
|
|
|
+ //批量插入记录
|
|
|
+ jdbcTemplate.batchUpdate("insert into l_volunteer_account_change (volunteer_id,change_type,source_type,change_money,before_balance,after_balance) values (?,?,?,?,?,?)" , volunteerAccountChanges);
|
|
|
+ });
|
|
|
+
|
|
|
+ //还是获取map<userId,list<解冻数据>>
|
|
|
+
|
|
|
+ //生成所有的记录对象
|
|
|
+ volunteerAccountChangeGroupByVId.forEach((volunteerId,orderFrozenFunds) -> {
|
|
|
+ //查看用户当前的余额
|
|
|
+ BigDecimal oldVolunteerBalance = jdbcTemplate.queryForObject("select balance from l_volunteer_account where volunteer_id = ? FOR UPDATE",
|
|
|
+ BigDecimal.class, volunteerId);
|
|
|
+ //生成所有的记录
|
|
|
+ List<Object[]> volunteerAccountChanges = new ArrayList<>();
|
|
|
+ BigDecimal theBalance = oldVolunteerBalance;
|
|
|
+ for (OrderFrozenFunds orderFrozenFund : orderFrozenFunds) {
|
|
|
+ BigDecimal volunteerAddMoney = theBalance.add(orderFrozenFund.getScoreMoney());
|
|
|
+ volunteerAccountChanges.add(new Object[]{volunteerId,1,2,volunteerAddMoney,orderFrozenFund.getScoreMoney(),volunteerAddMoney.add(orderFrozenFund.getScoreMoney())
|
|
|
+ });
|
|
|
+ theBalance = volunteerAddMoney;
|
|
|
+ }
|
|
|
+ //批量插入记录
|
|
|
+ jdbcTemplate.batchUpdate("insert into l_volunteer_account_change (volunteer_id,change_type,source_type,change_money,before_balance,after_balance) values (?,?,?,?,?,?)" , volunteerAccountChanges);
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ //解冻后:
|
|
|
+ //获取冻结表中的志愿者id和志愿者总共需要解冻到账户的金额 封装成map集合 有相同的 也直接加起来。
|
|
|
+ Map<Long, BigDecimal> totalMoneyMap = needThawMoneyList.stream().collect(Collectors.toMap(OrderFrozenFunds::getVolunteerId, orderFrozenFunds -> orderFrozenFunds.getVolunteerMoney().add(orderFrozenFunds.getScoreMoney()),(existingValue, newValue) -> existingValue.add(newValue)));
|
|
|
+ //解冻后,向志愿者账户表中+钱(基本+奖金) //首先取出要修改的志愿者账户集合,算出每个账户 遍历这些集合,,可提现金额 = 旧可提现金额 + 总;累计可提现金额 = 旧可体现金额 + 总;订单中冻结金额 = 旧冻结金额 - 总
|
|
|
+ List<VolunteerAccount> newVolunteerAccountList = new ArrayList<>();
|
|
|
+ totalMoneyMap.forEach((volunteerId,totalChangMoney) -> {
|
|
|
+ VolunteerAccount vact = new VolunteerAccount().builder().volunteerId(volunteerId).balance(totalChangMoney).totalBalance(totalChangMoney).orderFrozenBalance(totalChangMoney).build();
|
|
|
+ newVolunteerAccountList.add(vact);
|
|
|
+ });
|
|
|
+ //向志愿者记录表中修改
|
|
|
+ volunteerAccountMapper.updateVolunteerAccountList(newVolunteerAccountList);
|
|
|
+
|
|
|
+ System.out.println("全部更新完毕");
|
|
|
+
|
|
|
+ }
|
|
|
+}
|