diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/mapper/BillMapper.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/mapper/BillMapper.java index 8e1f837..c437454 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/mapper/BillMapper.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/mapper/BillMapper.java @@ -2,7 +2,12 @@ package com.njzscloud.dispose.finance.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.njzscloud.dispose.finance.pojo.entity.BillEntity; +import com.njzscloud.dispose.finance.pojo.result.BillStatisticsResult; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.time.LocalDateTime; +import java.util.List; /** * 对账单 @@ -10,5 +15,13 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface BillMapper extends BaseMapper { + + /** + * 统计对账单数据 + * @param startTime 统计开始时间 + * @param endTime 统计结束时间 + * @return 对账单统计数据列表 + */ + List statisticsBillData(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime); } diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/result/BillStatisticsResult.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/result/BillStatisticsResult.java new file mode 100644 index 0000000..82f68ee --- /dev/null +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/result/BillStatisticsResult.java @@ -0,0 +1,66 @@ +package com.njzscloud.dispose.finance.pojo.result; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * 对账单统计结果 + * @author ljw + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +public class BillStatisticsResult { + + /** + * 用户 Id + */ + private Long userId; + + /** + * 客户 Id + */ + private Long customerId; + + /** + * 组织 Id + */ + private Long orgId; + + /** + * 账户类型;GeRen-->个人、QiYe-->企业 + */ + private String accountType; + + /** + * 订单数 + */ + private Integer orderCount; + + /** + * 总车数 + */ + private Integer carCount; + + /** + * 总质量(单位:吨) + */ + private Integer totalWeight; + + /** + * 总金额 + */ + private BigDecimal totalMoney; + + /** + * 优惠金额 + */ + private BigDecimal discountMoney; +} diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/quartz/GenerateBillQuartz.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/quartz/GenerateBillQuartz.java new file mode 100644 index 0000000..16436e8 --- /dev/null +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/quartz/GenerateBillQuartz.java @@ -0,0 +1,50 @@ +package com.njzscloud.dispose.finance.quartz; + +import com.njzscloud.dispose.finance.service.BillService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.time.LocalTime; + +/** + * 生成对账单 + * @author ljw + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class GenerateBillQuartz { + + private final BillService billService; + + // @Scheduled(cron = "0 0/1 * * * ?")//每1分钟一次 + @Scheduled(cron = "0 0 1 1 * ?")// 每月1号凌晨1点执行 + public void syncAssetsDiscover() { + generateBill(); + } + + private void generateBill() { + log.info("开始执行生成对账单任务..."); + try { + // 计算上个月的时间范围 + LocalDateTime now = LocalDateTime.now(); + // 上个月1号0点0分0秒 + LocalDateTime lastMonthStart = now.minusMonths(1).withDayOfMonth(1).with(LocalTime.MIN); + // 上个月月末23点59分59秒 + LocalDateTime lastMonthEnd = now.minusMonths(1).withDayOfMonth(now.minusMonths(1).toLocalDate().lengthOfMonth()) + .with(LocalTime.MAX); + + log.info("统计时间范围:{} ~ {}", lastMonthStart, lastMonthEnd); + + // 生成对账单 + int billCount = billService.generateBill(lastMonthStart, lastMonthEnd); + log.info("生成对账单任务执行完成,共生成 {} 条对账单", billCount); + } catch (Exception e) { + log.error("生成对账单任务执行失败", e); + } + } + +} diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/service/BillService.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/service/BillService.java index 1f4158e..96c0594 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/service/BillService.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/service/BillService.java @@ -1,16 +1,20 @@ package com.njzscloud.dispose.finance.service; +import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.njzscloud.common.mp.support.PageParam; import com.njzscloud.common.mp.support.PageResult; import com.njzscloud.dispose.finance.mapper.BillMapper; import com.njzscloud.dispose.finance.pojo.entity.BillEntity; +import com.njzscloud.dispose.finance.pojo.result.BillStatisticsResult; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; /** @@ -58,4 +62,39 @@ public class BillService extends ServiceImpl { public PageResult paging(PageParam pageParam, BillEntity billEntity) { return PageResult.of(this.page(pageParam.toPage(), Wrappers.query(billEntity))); } + + /** + * 生成对账单 + * + * @param startTime 统计开始时间 + * @param endTime 统计结束时间 + * @return 生成的账单数量 + */ + @Transactional(rollbackFor = Exception.class) + public int generateBill(LocalDateTime startTime, LocalDateTime endTime) { + log.info("开始生成对账单,时间范围:{} ~ {}", startTime, endTime); + + // 统计对账单数据 + List statisticsList = baseMapper.statisticsBillData(startTime, endTime); + log.info("统计到 {} 条对账单数据", statisticsList.size()); + + int count = 0; + for (BillStatisticsResult statistics : statisticsList) { + BillEntity billEntity = BeanUtil.copyProperties(statistics, BillEntity.class); + // 转换统计数据为对账单实体 + billEntity.setBillPeriod(LocalDate.now()); + billEntity.setStartTime(startTime.toLocalDate()); + billEntity.setEndTime(endTime.toLocalDate()); + // 设置备注 + billEntity.setMemo("系统自动生成"); + this.save(billEntity); + count++; + log.info("已生成对账单,客户ID:{},订单数:{},总金额:{}", + statistics.getCustomerId(), statistics.getOrderCount(), statistics.getTotalMoney()); + } + + log.info("对账单生成完成,共生成 {} 条对账单", count); + return count; + } + } diff --git a/njzscloud-svr/src/main/resources/mapper/finance/BillMapper.xml b/njzscloud-svr/src/main/resources/mapper/finance/BillMapper.xml new file mode 100644 index 0000000..728e9bc --- /dev/null +++ b/njzscloud-svr/src/main/resources/mapper/finance/BillMapper.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + +