更新统计数据

This commit is contained in:
磷叶 2025-05-07 16:10:30 +08:00
parent 79337dbfb3
commit 8f05d5882f
7 changed files with 75 additions and 11 deletions

View File

@ -14,5 +14,7 @@ public class RoleConstants {
public static final String MCH = "mch";
// 加盟商
public static final String JOIN = "join";
// 系统管理员
public static final String SYS_ADMIN = "sys_admin";
}

View File

@ -314,7 +314,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectSimpleList">
select
ba.id,
ba.name
ba.name,
su.nick_name as user_name
from <include refid="searchTables"/>
<where>
<include refid="searchCondition"/>

View File

@ -144,4 +144,12 @@ public interface BonusService {
*/
public List<Bonus> preview(Long deviceId);
/**
* 预分成
*
* @param id 分成明细ID
* @return 结果
*/
public int prepayBonus(Long id);
}

View File

@ -217,7 +217,7 @@ public class BonusServiceImpl implements BonusService {
if (user == null) {
continue;
}
bonus.setPrePayTime(now.plusHours(user.getBonusDelay()));
bonus.setPrePayTime(now.plusHours(user.getBonusDelay()).plusMinutes(1));
} else {
bonus.setPrePayTime(now);
}
@ -409,4 +409,13 @@ public class BonusServiceImpl implements BonusService {
return bonusConverter.toBaseBonusListPlatform(device, partners, join);
}
@Override
public int prepayBonus(Long id) {
BonusVO bonus = this.selectBonusById(id);
if (bonus == null) {
return 0;
}
return prepay(Collections.singletonList(bonus));
}
}

View File

@ -458,7 +458,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select
bo.area_id,
ba.name as area_name,
sum(<include refid="actualAmount"/>) as actual_amount,
sum(if(bo.status = 'PROCESSING', 0, <include refid="actualAmount"/>)) as actual_amount,
count(bo.id) as `count`,
sum(if(bo.status = 'PROCESSING', 1, 0)) as processing_count
from <include refid="searchTables"/>

View File

@ -21,11 +21,13 @@ import com.ruoyi.bst.bonus.domain.Bonus;
import com.ruoyi.bst.bonus.domain.enums.BonusBstType;
import com.ruoyi.bst.bonus.service.BonusConverter;
import com.ruoyi.bst.bonus.service.BonusService;
import com.ruoyi.bst.device.domain.Device;
import com.ruoyi.bst.device.domain.DeviceVO;
import com.ruoyi.bst.device.domain.enums.DeviceUnLockType;
import com.ruoyi.bst.device.domain.vo.DeviceIotVO;
import com.ruoyi.bst.device.service.DeviceIotService;
import com.ruoyi.bst.device.service.DeviceService;
import com.ruoyi.bst.device.service.impl.DeviceValidatorImpl;
import com.ruoyi.bst.fault.domain.Fault;
import com.ruoyi.bst.fault.service.FaultConverter;
import com.ruoyi.bst.fault.service.FaultService;
@ -77,6 +79,8 @@ import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.collection.CollectionUtils;
import com.ruoyi.system.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
/**
* 订单Service业务层处理
*
@ -84,7 +88,10 @@ import com.ruoyi.system.user.service.UserService;
* @date 2025-03-24
*/
@Service
@Slf4j
public class OrderServiceImpl implements OrderService {
private final DeviceValidatorImpl deviceValidatorImpl;
@Autowired
private OrderMapper orderMapper;
@ -145,6 +152,10 @@ public class OrderServiceImpl implements OrderService {
@Autowired
private SmsService smsService;
OrderServiceImpl(DeviceValidatorImpl deviceValidatorImpl) {
this.deviceValidatorImpl = deviceValidatorImpl;
}
/**
* 查询订单
*
@ -400,6 +411,12 @@ public class OrderServiceImpl implements OrderService {
OrderInParkingVO inParkingVO = bo.getInParkingVO();
AreaVO area = bo.getArea();
OrderDeviceVO orderDevice = bo.getOrderDevice();
DeviceVO device = bo.getDevice();
// 处理其他线程操作
scheduledExecutorService.execute(() -> {
this.handleDeviceLocation(device, dto);
});
// 设置订单数据
order.setEndTime(LocalDateTime.now()); // 结束时间
@ -448,15 +465,36 @@ public class OrderServiceImpl implements OrderService {
boolean isSuccess = result != null && result == 1;
if (isSuccess && OrderStatus.FINISHED.getCode().equals(order.getStatus())) {
scheduledExecutorService.schedule(() -> {
int refund = this.refundRemainAmount(order);
ServiceUtil.assertion(refund != 1, "ID为%s的订单退还剩余金额失败", order.getId());
}, 10, TimeUnit.SECONDS);
this.handleFinished(order);
}
return vo;
}
// 使用手机定位设置设备定位
private void handleDeviceLocation(DeviceVO device, OrderEndDTO dto) {
if (dto.getLon() != null && dto.getLat() != null
&& dto.getLon().compareTo(BigDecimal.ZERO) != 0
&& dto.getLat().compareTo(BigDecimal.ZERO) != 0) {
Device data = new Device();
data.setId(device.getId());
data.setLongitude(dto.getLon());
data.setLatitude(dto.getLat());
int rows = deviceService.updateDevice(data);
if (rows != 1) {
log.error("通过手机定位修改设备定位失败deviceId={}", device.getId());
}
}
}
// 处理订单完成
private void handleFinished(OrderVO order) {
scheduledExecutorService.schedule(() -> {
int refund = this.refundRemainAmount(order);
ServiceUtil.assertion(refund != 1, "ID为%s的订单退还剩余金额失败", order.getId());
}, 10, TimeUnit.SECONDS);
}
// 设置订单状态
private void setOrderStatus(OrderVO order, String returnType) {
// 根据是否需要审核设置订单状态
@ -750,10 +788,7 @@ public class OrderServiceImpl implements OrderService {
// 若审核通过则退还剩余金额
if (pass && result != null && result > 0) {
scheduledExecutorService.schedule(() -> {
int refund = this.refundRemainAmount(order);
ServiceUtil.assertion(refund != 1, "ID为%s的订单退还剩余金额失败", order.getId());
}, 10, TimeUnit.SECONDS);
this.handleFinished(order);
}
return result == null ? 0 : result;

View File

@ -107,4 +107,13 @@ public class BonusController extends BaseController
return success(bonusService.payBonus(id));
}
/**
* 预分成
*/
@PreAuthorize("@ss.hasPermi('bst:bonus:prepay')")
@PutMapping("/prepay")
@Log(title = "预支付分成", businessType = BusinessType.OTHER, bizIdName = "arg0", bizType = LogBizType.BONUS )
public AjaxResult prepay(Long id) {
return success(bonusService.prepayBonus(id));
}
}