调整天医币

This commit is contained in:
wuchunlei
2026-01-27 14:47:31 +08:00
parent 8cdc3dd263
commit 10e70bd841
5 changed files with 132 additions and 72 deletions

View File

@@ -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<User> userList = userService.list(new LambdaQueryWrapper<User>().gt(User::getTotalPoint,0));
List<User> userRes = new ArrayList<>();
List<Orders> ordersRes = new ArrayList<>();
for (User user : userList) {
WumenUser wumenUser = wumenUserService.getOne(new LambdaQueryWrapper<WumenUser>()
.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> orders = ordersService.list(new LambdaQueryWrapper<Orders>()
.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<String> inPointList = ordersService.list(new MPJLambdaWrapper<Orders>()
.eq(Orders::getType,0)
.groupBy(Orders::getTel)
.select(Orders::getTel))
.stream().map(Orders::getTel).collect(Collectors.toList());
//查询所有充值人得订单
List<Orders> userPointOrders = ordersService.list(new MPJLambdaWrapper<Orders>()
.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<String,Object> userPointOrdersMap = new HashMap<>();
for (Orders o : userPointOrders) {
List<Orders> l = new ArrayList<>();
if(userPointOrdersMap.get(o.getTel())!=null){
l = (List<Orders>) userPointOrdersMap.get(o.getTel());
}
l.add(o);
userPointOrdersMap.put(o.getTel(),l);
}
List<Orders> updateOrders = new ArrayList<>();
//便利所有人天医币详情,处理消耗
for (Map.Entry<String, Object> entry : userPointOrdersMap.entrySet()) {
BigDecimal totalPoint = BigDecimal.ZERO;
List<Orders> ordersList = (List<Orders>) 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<User>().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<User>()
.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("不存在或已消耗");
}

View File

@@ -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<Map<String,Object>> consumes = ordersService.listMaps(new MPJLambdaWrapper<Orders>()
@@ -71,45 +69,23 @@ public class StatisticsController {
BigDecimal total = BigDecimal.ZERO;
List<Orders> totals = ordersService.list(new MPJLambdaWrapper<Orders>()
.eq(Orders::getUseFlag,1).eq(Orders::getType,0));
List<String> 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<TCustomerApplyBuy> 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<Orders> ins = ordersService.list(new MPJLambdaWrapper<Orders>()
.eq(Orders::getUseFlag,1).eq(Orders::getType,0)
.apply("DATE_FORMAT(t.order_time, '%Y-%m') > '"+params.get("year")+"-"+params.get("month")+"'"));
List<String> 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<TCustomerApplyBuy> applyBuys = customerApplyBuyService.listByIds(yljkOids);
for (TCustomerApplyBuy buy:applyBuys){
in = in.add(BigDecimal.valueOf(buy.getConvertpoint()));
}
in = in.add(o.getPoint());
}
Map<String,Object> out = ordersService.getMap(new MPJLambdaWrapper<Orders>()
.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<String,Object> 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);
//未开始摊销

View File

@@ -59,6 +59,11 @@ public class Orders implements Serializable {
*/
private BigDecimal fee;
/**
* 充值天医币数量
*/
private BigDecimal point;
/**
* 订单类型0充值1vip2课3实物4培训班
*/

View File

@@ -73,6 +73,7 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> 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<OrdersMapper, Orders> 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<User>()
.eq(User::getTel,orders.getTel()));
if (user==null){

View File

@@ -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());
}
}
}