Browse Source

定时任务完善

LiRong 1 week ago
parent
commit
8484b8e968

+ 3 - 0
leromro-core/src/main/java/com/leromro/core/mapper/VolunteerAccountChangeMapper.java

@@ -59,4 +59,7 @@ public interface VolunteerAccountChangeMapper extends BaseMapper<VolunteerAccoun
      * @return 结果
      */
     public int deleteVolunteerAccountChangeByVolunteerAccountChangeIds(Long[] volunteerAccountChangeIds);
+
+
+    void insertList(List<VolunteerAccountChange> volunteerAccountChangeList);
 }

+ 2 - 0
leromro-core/src/main/java/com/leromro/core/service/impl/MainOrderServiceImpl.java

@@ -136,6 +136,7 @@ public class MainOrderServiceImpl extends ServiceImpl<MainOrdersMapper, MainOrde
             }else {
                 BigDecimal balanceNew = balanceOld.subtract(totalPrice);
                 clientAccount.setBalance(balanceNew);
+                clientAccount.setUpdateTime(DateTimeUtil.getNowTime());
                 clientAccountMapper.updateClientBalance(clientAccount);
             }
             // 余额足够 直接支付 订单状态为已支付
@@ -207,6 +208,7 @@ public class MainOrderServiceImpl extends ServiceImpl<MainOrdersMapper, MainOrde
         orders.setUserId(userId);
         orders.setCreateTime(DateTimeUtil.getNowTime());
         orders.setServiceOnePrice(serviceOnePrice);
+        orders.setServiceTotalPrice(serviceOnePrice.multiply(BigDecimal.valueOf(orders.getTotalTimes())));
         orders.setServiceDuration(businessDurationMin);
         //设置服务的开始与结束日期 以及开始与结束时间
         orders.setStartTime(workDateList.get(0).getWorkStartTime());

+ 1 - 1
leromro-core/src/main/java/com/leromro/core/service/impl/SecondOrdersServiceImpl.java

@@ -153,7 +153,7 @@ public class SecondOrdersServiceImpl extends ServiceImpl<SecondOrdersMapper, Sec
         volunteerAccountMapper.update(null,volunteerAccountUpdateWrapper);
         //更改订单状态:
         UpdateWrapper<SecondOrder> updateWrapper = new UpdateWrapper<SecondOrder>().eq("second_order_id", reviewDTO.getSecondOrderId())
-                .set("score",score).set("user_review",reviewDTO.getUserReview()).set("user_picture",reviewDTO.getUserPicture()).set("protocol_score",protocolScore).set("clothing_score",clothingScore).set("ability_score",abilityScore).set("quality_score",qualityScore);
+                .set("score",score).set("user_review",reviewDTO.getUserReview()).set("user_picture",reviewDTO.getUserPicture()).set("protocol_score",protocolScore).set("clothing_score",clothingScore).set("ability_score",abilityScore).set("quality_score",qualityScore).set("update_time",DateTimeUtil.getNowTime());
         secondOrdersMapper.update(null,updateWrapper);
     }
 

+ 69 - 39
leromro-core/src/main/java/com/leromro/core/ttl/Monitor.java

@@ -1,5 +1,6 @@
 package com.leromro.core.ttl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.leromro.core.domain.*;
@@ -9,95 +10,124 @@ 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;
+import java.util.stream.Stream;
+
 @Component("monitor")
-public class Monitor  {
-  @Autowired
-    private  PlatformFinanceMapper platformFinanceMapper;
+public class Monitor {
+    @Autowired
+    private PlatformFinanceMapper platformFinanceMapper;
     @Autowired
-    private  SecondOrdersMapper secondOrdersMapper;
+    private SecondOrdersMapper secondOrdersMapper;
     @Autowired
-    private  OrderFrozenFundsMapper orderFrozenFundsMapper;
+    private OrderFrozenFundsMapper orderFrozenFundsMapper;
     @Autowired
-    private  VolunteerAccountMapper volunteerAccountMapper;
+    private VolunteerAccountMapper volunteerAccountMapper;
     @Autowired
-    private  JdbcTemplate jdbcTemplate;
+    private VolunteerAccountChangeMapper volunteerAccountChangeMapper;
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+
     /**
      * 定时任务定时调用的任务
      */
     @Transactional
-    public void orderMonitor () {
+    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()){
+        if (needThawMoneyList.isEmpty()) {
             System.out.println("没有需要解冻的订单");
             return;
         }
         List<Long> orderFrozenFundsIdList = needThawMoneyList.stream().map(OrderFrozenFunds::getOrderFrozenFundsId).collect(Collectors.toList());
         List<Long> seconderOrderIdList = needThawMoneyList.stream().map(OrderFrozenFunds::getSecondOrderId).collect(Collectors.toList());
-
-        // needThawMoneyList.stream().map(OrderFrozenFunds::).collect(Collectors.toList());
-        //Map<Long, OrderFrozenFunds> totalMoneyMap = needThawMoneyList.stream().collect(Collectors.toMap(OrderFrozenFunds::getVolunteerId, Function.identity()));
+        List<Long> volunteerIdList = needThawMoneyList.stream().map(OrderFrozenFunds::getVolunteerId).distinct().collect(Collectors.toList());
 
         //查到旧的志愿者账户表的余额(用来存放志愿者月变更记录)
         //更新表,直接解冻。
         UpdateWrapper<OrderFrozenFunds> updateFrozenWrapper = new UpdateWrapper<OrderFrozenFunds>().in("order_frozen_funds_id", orderFrozenFundsIdList).set("status", 1);
-        orderFrozenFundsMapper.update(null,updateFrozenWrapper);
+        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);
+        UpdateWrapper<SecondOrder> updateSecondOrderWrapper = new UpdateWrapper<SecondOrder>().eq("order_status", "4").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("奖金");
-        }
+        // 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())).peek(pf -> pf.setRemark("奖金"))
+                .collect(Collectors.toList());
+        // 合并三个集合
+        List<PlatformFinance> mergedList = Stream.of(volunteerPlatformList, platformPlatformList, sourceTypePlatformList)
+                .flatMap(List::stream)
+                .collect(Collectors.toList());
+
+        platformFinanceMapper.insertPlatformFinanceList(mergedList);
         /*System.out.println("只剩change记录和余额变动了");*/
         // ---------------------------
         //解冻后:
         //判断,如果志愿者有多个订单???????????
+        //查出志愿者id集合
+
+
+        //首先将志愿者id和志愿者账户余额封装成map集合
+        Map<Long, List<VolunteerAccount>> volunteerAccountMap = volunteerAccountMapper.selectList(new LambdaQueryWrapper<VolunteerAccount>().in(VolunteerAccount::getVolunteerId,volunteerIdList)).stream().collect(Collectors.groupingBy(VolunteerAccount::getVolunteerId));
+        //遍历其中一个集合,然后用键来匹配值,进行操作
+        if (volunteerAccountMap.isEmpty()){throw new RuntimeException("志愿者账户异常,该志愿者未创建账户");}
 
         //还是获取map<userId,list<解冻数据>>
         Map<Long, List<OrderFrozenFunds>> volunteerAccountChangeGroupByVId = needThawMoneyList.stream().collect(Collectors.groupingBy(OrderFrozenFunds::getVolunteerId));
+        //生成所有的记录
+        //List<Object[]> volunteerAccountChanges = new ArrayList<>();
+        List<VolunteerAccountChange> volunteerAccountChangeList = new ArrayList<>();
         //生成所有的记录对象
         //改!  这里我们根据map的键 去取出余额的集合,
-        volunteerAccountChangeGroupByVId.forEach((volunteerId,orderFrozenFunds) -> {
+        volunteerAccountChangeGroupByVId.forEach((volunteerId, orderFrozenFunds) -> {
             //查看用户当前的余额 其实没必要再循环中写sql了,因为每一个用户都是一次单独的遍历,
-            BigDecimal oldVolunteerBalance = jdbcTemplate.queryForObject("select balance from l_volunteer_account where volunteer_id = ? ",
-                    BigDecimal.class, volunteerId);
-            //生成所有的记录
-            List<Object[]> volunteerAccountChanges = new ArrayList<>();
+           /* BigDecimal oldVolunteerBalance = jdbcTemplate.queryForObject("select balance from l_volunteer_account where volunteer_id = ? ",
+                    BigDecimal.class, volunteerId);*/
+
+                BigDecimal oldVolunteerBalance = volunteerAccountMap.get(volunteerId).get(0).getBalance();
+
+
             BigDecimal beforeChangeBalance = BigDecimal.valueOf(0);
 
             for (OrderFrozenFunds orderFrozenFund : orderFrozenFunds) {
-                volunteerAccountChanges.add(new Object[]{volunteerId,1,1,orderFrozenFund.getVolunteerMoney(),beforeChangeBalance.add(oldVolunteerBalance),orderFrozenFund.getVolunteerMoney().add(beforeChangeBalance).add(oldVolunteerBalance)
-                });
+                VolunteerAccountChange volunteerAccountChange1 = new VolunteerAccountChange(null, volunteerId, "1", "1", orderFrozenFund.getVolunteerMoney(), beforeChangeBalance.add(oldVolunteerBalance), orderFrozenFund.getVolunteerMoney().add(beforeChangeBalance).add(oldVolunteerBalance));
+                volunteerAccountChange1.setCreateTime(DateTimeUtil.getNowTime());
+                volunteerAccountChangeList.add(volunteerAccountChange1);
+               /* volunteerAccountChanges.add(new Object[]{volunteerId,1,1,orderFrozenFund.getVolunteerMoney(),beforeChangeBalance.add(oldVolunteerBalance),orderFrozenFund.getVolunteerMoney().add(beforeChangeBalance).add(oldVolunteerBalance)
+                });*/
                 beforeChangeBalance = beforeChangeBalance.add(orderFrozenFund.getVolunteerMoney());
 
-                if (orderFrozenFund.getScoreMoney() != null && orderFrozenFund.getScoreMoney().compareTo(BigDecimal.ZERO) != 0){
-                    volunteerAccountChanges.add(new Object[]{volunteerId,1,1,orderFrozenFund.getScoreMoney(),beforeChangeBalance.add(oldVolunteerBalance),orderFrozenFund.getScoreMoney().add(beforeChangeBalance).add(oldVolunteerBalance)
-                    });
+                if (orderFrozenFund.getScoreMoney() != null && orderFrozenFund.getScoreMoney().compareTo(BigDecimal.ZERO) != 0) {
+                    VolunteerAccountChange volunteerAccountChange2 = new VolunteerAccountChange(null, volunteerId, "1", "2", orderFrozenFund.getScoreMoney(), beforeChangeBalance.add(oldVolunteerBalance), orderFrozenFund.getScoreMoney().add(beforeChangeBalance).add(oldVolunteerBalance));
+                    volunteerAccountChange2.setCreateTime(DateTimeUtil.getNowTime());
+                    volunteerAccountChangeList.add(volunteerAccountChange2);
+                    /*volunteerAccountChanges.add(new Object[]{volunteerId,1,1,orderFrozenFund.getScoreMoney(),beforeChangeBalance.add(oldVolunteerBalance),orderFrozenFund.getScoreMoney().add(beforeChangeBalance).add(oldVolunteerBalance)
+                    });*/
                 }
                 beforeChangeBalance = beforeChangeBalance.add(orderFrozenFund.getScoreMoney());
             }
             // 插入记录
-            jdbcTemplate.batchUpdate("insert into l_volunteer_account_change (volunteer_id,change_type,source_type,change_money,before_balance,after_balance) values (?,?,?,?,?,?)" , volunteerAccountChanges);
+            /*  jdbcTemplate.batchUpdate("insert into l_volunteer_account_change (volunteer_id,change_type,source_type,change_money,before_balance,after_balance) values (?,?,?,?,?,?)" , volunteerAccountChanges);*/
             //直接插入一个集合,不用在循环中写sql了
         });
 
+        volunteerAccountChangeMapper.insertList(volunteerAccountChangeList);
+
         //还是获取map<userId,list<解冻数据>>
 
 /*
@@ -125,10 +155,10 @@ public class Monitor  {
 
         //解冻后:
         //获取冻结表中的志愿者id和志愿者总共需要解冻到账户的金额 封装成map集合 有相同的 也直接加起来。
-        Map<Long, BigDecimal> totalMoneyMap = needThawMoneyList.stream().collect(Collectors.toMap(OrderFrozenFunds::getVolunteerId, orderFrozenFunds -> orderFrozenFunds.getVolunteerMoney().add(orderFrozenFunds.getScoreMoney()),(existingValue, newValue) -> existingValue.add(newValue)));
+        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) -> {
+        totalMoneyMap.forEach((volunteerId, totalChangMoney) -> {
             VolunteerAccount vact = new VolunteerAccount().builder().volunteerId(volunteerId).balance(totalChangMoney).totalBalance(totalChangMoney).orderFrozenBalance(totalChangMoney).build();
             newVolunteerAccountList.add(vact);
         });

+ 17 - 0
leromro-core/src/main/resources/mapper/core/VolunteerAccountChangeMapper.xml

@@ -66,6 +66,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          </trim>
     </insert>
 
+
     <update id="updateVolunteerAccountChange" parameterType="VolunteerAccountChange">
         update l_volunteer_account_change
         <trim prefix="SET" suffixOverrides=",">
@@ -93,4 +94,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{volunteerAccountChangeId}
         </foreach>
     </delete>
+    <insert id="insertList" parameterType="java.util.List">
+        INSERT INTO l_volunteer_account_change
+        (volunteer_id, change_type, source_type, change_money, before_balance, after_balance, create_time)
+        VALUES
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.volunteerId},
+            #{item.changeType},
+            #{item.sourceType},
+            #{item.changeMoney},
+            #{item.beforeBalance},
+            #{item.afterBalance},
+            #{item.createTime}
+            )
+        </foreach>
+    </insert>
 </mapper>