diff --git a/src/main/java/com/zmzm/finance/common/controller/OrdersController.java b/src/main/java/com/zmzm/finance/common/controller/OrdersController.java index 92669a1..d6fd75b 100644 --- a/src/main/java/com/zmzm/finance/common/controller/OrdersController.java +++ b/src/main/java/com/zmzm/finance/common/controller/OrdersController.java @@ -2,15 +2,16 @@ package com.zmzm.finance.common.controller; import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.zmzm.finance.common.entity.Orders; -import com.zmzm.finance.common.entity.User; -import com.zmzm.finance.common.entity.WumenUser; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.zmzm.finance.common.entity.*; import com.zmzm.finance.common.service.IOrdersService; import com.zmzm.finance.common.service.IUserService; import com.zmzm.finance.common.service.WumenUserService; import com.zmzm.finance.util.R; import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.time.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; @@ -18,9 +19,10 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; @RestController @RequestMapping("/common/orders") @@ -52,34 +54,52 @@ public class OrdersController { //自动消耗天医币 @RequestMapping("/autoConsumePoint") @DSTransactional - public R autoConsumePoint(){ - List userList = userService.list(new LambdaQueryWrapper().gt(User::getTotalPoint,0)); - List userRes = new ArrayList<>(); - List ordersRes = new ArrayList<>(); - for (User user : userList) { - WumenUser wumenUser = wumenUserService.getOne(new LambdaQueryWrapper() - .select(WumenUser::getPeanutCoin) - .gt(WumenUser::getPeanutCoin, 0) - .and(t -> t.eq(WumenUser::getTel, user.getTel()).or().eq(WumenUser::getEmail, user.getTel()))); - if (wumenUser != null && user.getPoint().compareTo(wumenUser.getPeanutCoin()) > 0) { - BigDecimal differencePoint = user.getPoint().subtract(wumenUser.getPeanutCoin()); - List orders = ordersService.list(new LambdaQueryWrapper() - .eq(Orders::getPayType, 1).eq(Orders::getUseFlag, 0) - .gt(Orders::getOrderTime,"2022-12-31 23:59:59") - .eq(Orders::getTel, user.getTel()).orderByDesc(Orders::getOrderTime)); - for (Orders order : orders) { - if (differencePoint.compareTo(order.getFee()) >= 0) { - differencePoint = differencePoint.subtract(order.getFee()); - order.setUseFlag(1); - ordersRes.add(order); - user.setPoint(user.getPoint().subtract(order.getFee())); + public R autoConsumePoint() throws ParseException { + //查询所有充值过的电话 + List inPointList = ordersService.list(new MPJLambdaWrapper() + .eq(Orders::getType,0) + .groupBy(Orders::getTel) + .select(Orders::getTel)) + .stream().map(Orders::getTel).collect(Collectors.toList()); + //查询所有充值人得订单 + List userPointOrders = ordersService.list(new MPJLambdaWrapper() + .and(t->t.and(s->s.eq(Orders::getType,0).eq(Orders::getUseFlag,1)) + .or().eq(Orders::getPayType,1)) + .gt(Orders::getFee,0) + .in(Orders::getTel,inPointList) + .orderByAsc(Orders::getOrderTime)); + Map userPointOrdersMap = new HashMap<>(); + for (Orders o : userPointOrders) { + List l = new ArrayList<>(); + if(userPointOrdersMap.get(o.getTel())!=null){ + l = (List) userPointOrdersMap.get(o.getTel()); + } + l.add(o); + userPointOrdersMap.put(o.getTel(),l); + } + List updateOrders = new ArrayList<>(); + //便利所有人天医币详情,处理消耗 + for (Map.Entry entry : userPointOrdersMap.entrySet()) { + BigDecimal totalPoint = BigDecimal.ZERO; + List ordersList = (List) entry.getValue(); + for (Orders userOrders : ordersList) { + if (userOrders.getType()==0){ + totalPoint = totalPoint.add(userOrders.getPoint()); + }else { + if (userOrders.getUseFlag()==0){ + if (totalPoint.compareTo(userOrders.getFee())>=0){ + totalPoint = totalPoint.subtract(userOrders.getFee()); + userOrders.setUseFlag(1); + updateOrders.add(userOrders); + } + }else { + totalPoint = totalPoint.subtract(userOrders.getFee()); } } - userRes.add(user); } + userService.update(new LambdaUpdateWrapper().set(User::getPoint,totalPoint).eq(User::getTel,entry.getKey())); } - ordersService.updateBatchById(ordersRes); - userService.updateBatchById(userRes); + ordersService.updateBatchById(updateOrders); return R.ok(); } @@ -93,8 +113,12 @@ public class OrdersController { ordersService.updateById(orders); User user = userService.getOne(new LambdaQueryWrapper() .eq(User::getTel, orders.getTel())); - user.setPoint(user.getPoint().subtract(orders.getFee())); - userService.updateById(user); + if (user.getPoint().compareTo(orders.getPoint())>=0) { + user.setPoint(user.getPoint().subtract(orders.getFee())); + userService.updateById(user); + }else { + return R.error("余额不足"); + } }else { return R.error("不存在或已消耗"); } diff --git a/src/main/java/com/zmzm/finance/common/controller/StatisticsController.java b/src/main/java/com/zmzm/finance/common/controller/StatisticsController.java index e029c9c..6a6df67 100644 --- a/src/main/java/com/zmzm/finance/common/controller/StatisticsController.java +++ b/src/main/java/com/zmzm/finance/common/controller/StatisticsController.java @@ -33,8 +33,6 @@ public class StatisticsController { @Autowired private IOrdersService ordersService; @Autowired - private ITCustomerApplyBuyService customerApplyBuyService; - @Autowired private ITCustomerApplyCurriculumService customerApplyCurriculumService; @Autowired private ITCustomerTaihuClassService customerTaihuClassService; @@ -55,7 +53,7 @@ public class StatisticsController { .apply("DATE_FORMAT(t.order_time, '%Y-%m') = '"+params.get("year")+"-"+params.get("month")+"'") .groupBy(Payment::getType) .select("IF(t2.type=0,'微信',IF(t2.type=1,'支付宝','银行')) type") - .selectSum(Orders::getFee,"fee")); + .selectSum(Orders::getFee,"fee").selectSum(Orders::getPoint,"point")); map.put("incomes",incomes); //消费 List> consumes = ordersService.listMaps(new MPJLambdaWrapper() @@ -71,45 +69,23 @@ public class StatisticsController { BigDecimal total = BigDecimal.ZERO; List totals = ordersService.list(new MPJLambdaWrapper() .eq(Orders::getUseFlag,1).eq(Orders::getType,0)); - List yljkTotalOids = new ArrayList<>(); for (Orders o:totals){ - if (o.getSource()==0){//一路健康 - yljkTotalOids.add(o.getOrderOldId()); - }else { - total = total.add(o.getFee()); - } - } - if (yljkTotalOids.size()>0){ - List applyBuyTotals = customerApplyBuyService.listByIds(yljkTotalOids); - for (TCustomerApplyBuy buy:applyBuyTotals){ - total = total.add(BigDecimal.valueOf(buy.getConvertpoint())); - } + total = total.add(o.getPoint()); } //指定月份以后的冲销差额 BigDecimal in = BigDecimal.ZERO; List ins = ordersService.list(new MPJLambdaWrapper() .eq(Orders::getUseFlag,1).eq(Orders::getType,0) .apply("DATE_FORMAT(t.order_time, '%Y-%m') > '"+params.get("year")+"-"+params.get("month")+"'")); - List yljkOids = new ArrayList<>(); for (Orders o:ins){ - if (o.getSource()==0){//一路健康 - yljkOids.add(o.getOrderOldId()); - }else { - in = in.add(o.getFee()); - } - } - if (yljkOids.size()>0){ - List applyBuys = customerApplyBuyService.listByIds(yljkOids); - for (TCustomerApplyBuy buy:applyBuys){ - in = in.add(BigDecimal.valueOf(buy.getConvertpoint())); - } + in = in.add(o.getPoint()); } Map out = ordersService.getMap(new MPJLambdaWrapper() .eq(Orders::getUseFlag,1).eq(Orders::getPayType,1) - .apply("DATE_FORMAT(t.order_time, '%Y-%m') > '"+params.get("year")+"-"+params.get("month")+"'") + .apply("DATE_FORMAT(t.order_time, '%Y-%m') <= '"+params.get("year")+"-"+params.get("month")+"'") .select("SUM(fee) fee")); //目前总额+差额 - map.put("surplus",total.subtract(in).add(new BigDecimal(out==null?"0":out.get("fee").toString()))); + map.put("surplus",total.subtract(in).subtract(new BigDecimal(out==null?"0":out.get("fee").toString()))); return R.ok().putData("map",map); } //天医币明细导出 @@ -122,7 +98,7 @@ public class StatisticsController { .apply("DATE_FORMAT(t.order_time, '%Y-%m') = '"+params.get("year")+"-"+params.get("month")+"'") .select("DATE_FORMAT(t.order_time, '%Y-%m-%d %H:%i:%s') orderTime,if(t.source=0,'一路健康',if(t.source=1,'吴门医述','管理员')) source," + "if(t.type=0,'充值',IF(t.type=1,'vip',IF(t.type=2,'课程',IF(t.type=3,'实物','培训班')))) type," + - "IF(t2.type=0,'微信',IF(t2.type=1,'支付宝','银行')) payType,t.tel,t.order_sn,t.fee") + "IF(t2.type=0,'微信',IF(t2.type=1,'支付宝','银行')) payType,t.tel,t.order_sn,t.fee,t.point") .orderByAsc(Orders::getOrderTime)); String fileName = params.get("year")+""+params.get("month")+"天医币明细"; XSSFWorkbook wb = new XSSFWorkbook(); @@ -135,6 +111,7 @@ public class StatisticsController { titleRow.createCell(4).setCellValue("电话"); titleRow.createCell(5).setCellValue("订单号"); titleRow.createCell(6).setCellValue("金额"); + titleRow.createCell(7).setCellValue("天医币"); int cell = 1; for (Map map : coinInfoList) { Row row = sheet.createRow(cell); @@ -145,6 +122,7 @@ public class StatisticsController { row.createCell(4).setCellValue(map.get("tel").toString()); row.createCell(5).setCellValue(map.get("order_sn").toString()); row.createCell(6).setCellValue(map.get("fee").toString()); + row.createCell(7).setCellValue(map.get("point").toString()); //序号自增 cell++; } @@ -544,7 +522,9 @@ public class StatisticsController { String startTime = (String) map.get("startTime"); String endTime = (String) map.get("endTime"); if (startTime==null){ - map.put("notyet",fee); + if (sdfmonth.parse(map.get("orderTime").toString()).getTime()<=sdfmonth.parse(month).getTime()){ + map.put("notyet",fee); + } }else if (sdfmonth.parse(day).getTime()>sdfmonth.parse(endTime).getTime()){ map.put("already",fee); //未开始摊销 @@ -757,7 +737,9 @@ public class StatisticsController { String startTime = (String) map.get("startTime"); String endTime = (String) map.get("endTime"); if (startTime==null){ - notyet = notyet.add(fee); + if (sdfmonth.parse(map.get("orderTime").toString()).getTime()<=sdfmonth.parse(month).getTime()){ + notyet = notyet.add(fee); + } }else if (sdfmonth.parse(day).getTime()>sdfmonth.parse(endTime).getTime()){ already = already.add(fee); //未开始摊销 diff --git a/src/main/java/com/zmzm/finance/common/entity/Orders.java b/src/main/java/com/zmzm/finance/common/entity/Orders.java index a6fa7a2..62ff157 100644 --- a/src/main/java/com/zmzm/finance/common/entity/Orders.java +++ b/src/main/java/com/zmzm/finance/common/entity/Orders.java @@ -59,6 +59,11 @@ public class Orders implements Serializable { */ private BigDecimal fee; + /** + * 充值天医币数量 + */ + private BigDecimal point; + /** * 订单类型:0充值1vip2课3实物4培训班 */ diff --git a/src/main/java/com/zmzm/finance/common/service/impl/OrdersServiceImpl.java b/src/main/java/com/zmzm/finance/common/service/impl/OrdersServiceImpl.java index edf8607..e85eec5 100644 --- a/src/main/java/com/zmzm/finance/common/service/impl/OrdersServiceImpl.java +++ b/src/main/java/com/zmzm/finance/common/service/impl/OrdersServiceImpl.java @@ -73,6 +73,7 @@ public class OrdersServiceImpl extends ServiceImpl impleme o.setPayType(0); } o.setFee(bo.getRealMoney()); + o.setPoint(bo.getRealMoney()); if ("point".equals(bo.getOrderType())){ o.setType(0); } @@ -102,13 +103,7 @@ public class OrdersServiceImpl extends ServiceImpl impleme public void updatePoint(Integer ordersId) { Orders orders = this.baseMapper.selectById(ordersId); if (orders.getType()==0){ - BigDecimal point = BigDecimal.ZERO; - if (orders.getSource()==0){//一路健康 - TCustomerApplyBuy applyBuy = customerApplyBuyMapper.selectById(orders.getOrderOldId()); - point = BigDecimal.valueOf(applyBuy.getConvertpoint()); - }else { - point = orders.getFee(); - } + BigDecimal point = orders.getPoint(); User user = userMapper.selectOne(new LambdaQueryWrapper() .eq(User::getTel,orders.getTel())); if (user==null){ diff --git a/src/main/java/com/zmzm/finance/util/DataUtil.java b/src/main/java/com/zmzm/finance/util/DataUtil.java index c2de8ed..5a7f621 100644 --- a/src/main/java/com/zmzm/finance/util/DataUtil.java +++ b/src/main/java/com/zmzm/finance/util/DataUtil.java @@ -181,6 +181,60 @@ public class DataUtil { System.out.println("Error: " + e.getMessage()); } } - + public static void cPoint(){ + try { + Connection financeConn = DriverManager.getConnection( + "jdbc:mysql://rm-2zev4157t67trxuu3yo.mysql.rds.aliyuncs.com:3306/finance?rewriteBatchedStatements=true", + "nuttyreading", "Wu751019!"); + PreparedStatement statement = financeConn.prepareStatement(" select * from orders where use_flag = 1 and type = 0 "); + ResultSet resultSet = statement.executeQuery(); + int i=0; + while(resultSet.next()){ + System.out.println(i++); + String tel = resultSet.getString("tel"); + PreparedStatement applystatement = financeConn.prepareStatement(" select * from user where tel = '"+tel+"'"); + ResultSet applyresultSet = applystatement.executeQuery(); + if(applyresultSet.next()){ + BigDecimal p = resultSet.getBigDecimal("point"); + PreparedStatement updateStatement = financeConn.prepareStatement( + "update user set point=point+"+p+",total_point = total_point+"+p+" where tel = '"+tel+"'"); + updateStatement.execute(); + }else { + System.out.println("未找到电话"+tel); + } + } + financeConn.close(); + } catch (SQLException e) { + System.out.println("Error: " + e.getMessage()); + } + } + public static void addPoint(){ + try { + Connection yljkConn = DriverManager.getConnection( + "jdbc:mysql://goldorchid.mysql.rds.aliyuncs.com:3309/everhealth?", + "yljkmaster", "Wu751019!@"); + Connection financeConn = DriverManager.getConnection( + "jdbc:mysql://rm-2zev4157t67trxuu3yo.mysql.rds.aliyuncs.com:3306/finance?rewriteBatchedStatements=true", + "nuttyreading", "Wu751019!"); + PreparedStatement statement = financeConn.prepareStatement(" select * from orders where type = 0 and source = 0 "); + ResultSet resultSet = statement.executeQuery(); + int i=0; + while(resultSet.next()){ + System.out.println(i++); + String orderId = resultSet.getString("id"); + String oid = resultSet.getString("order_old_id"); + PreparedStatement applystatement = yljkConn.prepareStatement(" select * from t_customer_apply_buy where oid = '"+oid+"'"); + ResultSet applyresultSet = applystatement.executeQuery(); + while(applyresultSet.next()){ + PreparedStatement updateStatement = financeConn.prepareStatement( + "update orders set point="+applyresultSet.getInt("convertPoint")+" where id = "+orderId); + updateStatement.execute(); + } + } + financeConn.close(); + } catch (SQLException e) { + System.out.println("Error: " + e.getMessage()); + } + } }