|
|
@@ -10,10 +10,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.jzg.commons.core.base.BaseController;
|
|
|
import com.jzg.commons.entity.dto.*;
|
|
|
import com.jzg.commons.entity.po.*;
|
|
|
-import com.jzg.commons.entity.vo.IncomeAndExpenseVo;
|
|
|
-import com.jzg.commons.entity.vo.SysUserAccountVo;
|
|
|
-import com.jzg.commons.entity.vo.SysUserWalletVo;
|
|
|
-import com.jzg.commons.entity.vo.UserAccountStatisVo;
|
|
|
+import com.jzg.commons.entity.vo.*;
|
|
|
import com.jzg.commons.util.BigDecimalUtil;
|
|
|
import com.jzg.organization.client.QuoteClient;
|
|
|
import com.jzg.organization.mapper.SysAmountAuditingMapper;
|
|
|
@@ -21,6 +18,7 @@ import com.jzg.organization.mapper.SysUserAccountMapper;
|
|
|
import com.jzg.organization.service.*;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
@@ -251,8 +249,129 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
|
|
|
return sysUserWalletVo;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 查询业务员的收支记录
|
|
|
+ *
|
|
|
+ * @param param 时间(月份/时间段), 收支类型(全部/收入/支出) , 状态(全部/待审核/审核通过/审核驳回)
|
|
|
+ * @author lipf
|
|
|
+ * @date 2026/7/20 10:03
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<IncomeAndExpenseVo> getIncomeAndExpense(IncomeAndExpenseParam param){
|
|
|
+ log.info("查询收支明细记录:param=[{}]", JSONUtil.toJsonStr(param));
|
|
|
+ // 处理月份筛选参数
|
|
|
+ String createTimeStart = param.getCreateTimeStart();
|
|
|
+ String createTimeEnd = param.getCreateTimeEnd();
|
|
|
+ String userId = baseController.getUserId();
|
|
|
+ param.setUserId(userId);
|
|
|
+ param.setSystemCode(baseController.getSystemCode());
|
|
|
+ if (param.getMonth() != null && !param.getMonth().isEmpty()) {
|
|
|
+ // 如果传入了月份参数,计算该月的开始和结束时间
|
|
|
+ String monthStr = param.getMonth();
|
|
|
+ DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("yyyy-MM");
|
|
|
+ YearMonth yearMonth = YearMonth.parse(monthStr, monthFormatter);
|
|
|
+ LocalDateTime monthStart = yearMonth.atDay(1).atStartOfDay();
|
|
|
+ LocalDateTime monthEnd = yearMonth.atEndOfMonth().atTime(23, 59, 59, 999999999);
|
|
|
+
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+ createTimeStart = monthStart.format(formatter);
|
|
|
+ createTimeEnd = monthEnd.format(formatter);
|
|
|
+ param.setCreateTimeStart(createTimeStart);
|
|
|
+ param.setCreateTimeEnd(createTimeEnd);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<IncomeAndExpenseList> allRecords = sysAmountAuditingService.getIncomeAndExpense(param);
|
|
|
+ // 排序
|
|
|
+ allRecords.sort((a, b) -> {
|
|
|
+ if (a.getCreateTime() == null) return 1;
|
|
|
+ if (b.getCreateTime() == null) return -1;
|
|
|
+ return b.getCreateTime().compareTo(a.getCreateTime());
|
|
|
+ });
|
|
|
+
|
|
|
+ // 收支状态筛选(在排序后、分组前进行)
|
|
|
+// if (param.getIncomeAndExpense() != null && !param.getIncomeAndExpense().isEmpty()) {
|
|
|
+// allRecords = allRecords.stream()
|
|
|
+// .filter(record -> param.getIncomeAndExpense().equals(record.getIncomeAndExpense()))
|
|
|
+// .collect(Collectors.toList());
|
|
|
+// }
|
|
|
+
|
|
|
+ // 按月份分组统计
|
|
|
+ Map<String, IncomeAndExpenseVo.IncomeAndExpense> monthSummaryMap = new TreeMap<>(Collections.reverseOrder());
|
|
|
+ for (IncomeAndExpenseList record : allRecords) {
|
|
|
+ if (record.getCreateTime() == null) continue;
|
|
|
+ // 获取月份(格式:yyyy-MM)
|
|
|
+ String month = record.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM"));
|
|
|
+
|
|
|
+ // 获取或创建月度汇总对象
|
|
|
+ IncomeAndExpenseVo.IncomeAndExpense summary = monthSummaryMap.get(month);
|
|
|
+ if (summary == null) {
|
|
|
+ summary = new IncomeAndExpenseVo.IncomeAndExpense();
|
|
|
+ summary.setMonth(month);
|
|
|
+ summary.setIncome(BigDecimal.ZERO);
|
|
|
+ summary.setExpense(BigDecimal.ZERO);
|
|
|
+ summary.setBalance(BigDecimal.ZERO);
|
|
|
+ monthSummaryMap.put(month, summary);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新收入或支出
|
|
|
+ if ("0".equals(record.getIncomeAndExpense())) {
|
|
|
+ // 收入
|
|
|
+ summary.setIncome(BigDecimalUtil.add(summary.getIncome(),record.getAmount()));
|
|
|
+ } else {
|
|
|
+ // 支出
|
|
|
+ summary.setExpense(BigDecimalUtil.add(summary.getExpense(),record.getAmount()));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 计算余额(收入 - 支出)
|
|
|
+ summary.setBalance(summary.getIncome().subtract(summary.getExpense()));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果指定了月份筛选,只返回该月的数据
|
|
|
+ if (param.getMonth() != null && !param.getMonth().isEmpty()) {
|
|
|
+ List<IncomeAndExpenseVo> result = new ArrayList<>();
|
|
|
+ IncomeAndExpenseVo vo = new IncomeAndExpenseVo();
|
|
|
+ IncomeAndExpenseVo.IncomeAndExpense summary = monthSummaryMap.get(param.getMonth());
|
|
|
+ if (summary != null) {
|
|
|
+ vo.setIncomeAndExpense(summary);
|
|
|
+
|
|
|
+ // 筛选当前月份的明细记录
|
|
|
+ List<IncomeAndExpenseVo.IncomeAndExpenseList> monthRecords = allRecords.stream()
|
|
|
+ .filter(record -> param.getMonth().equals(record.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM"))))
|
|
|
+ .map(action->{
|
|
|
+ IncomeAndExpenseVo.IncomeAndExpenseList a = new IncomeAndExpenseVo.IncomeAndExpenseList();
|
|
|
+ BeanUtils.copyProperties(action,a);
|
|
|
+ return a;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ vo.setIncomeAndExpenseList(monthRecords);
|
|
|
+ result.add(vo);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 构建返回结果
|
|
|
+ List<IncomeAndExpenseVo> result = new ArrayList<>();
|
|
|
+ for (Map.Entry<String, IncomeAndExpenseVo.IncomeAndExpense> entry : monthSummaryMap.entrySet()) {
|
|
|
+ IncomeAndExpenseVo vo = new IncomeAndExpenseVo();
|
|
|
+ vo.setIncomeAndExpense(entry.getValue());
|
|
|
+
|
|
|
+ // 筛选当前月份的明细记录
|
|
|
+ List<IncomeAndExpenseVo.IncomeAndExpenseList> monthRecords = allRecords.stream()
|
|
|
+ .filter(record -> entry.getKey().equals(record.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM"))))
|
|
|
+ .map(action->{
|
|
|
+ IncomeAndExpenseVo.IncomeAndExpenseList a = new IncomeAndExpenseVo.IncomeAndExpenseList();
|
|
|
+ BeanUtils.copyProperties(action,a);
|
|
|
+ return a;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ vo.setIncomeAndExpenseList(monthRecords);
|
|
|
+ result.add(vo);
|
|
|
+ }
|
|
|
+ Collections.reverse(result);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
- public List<IncomeAndExpenseVo> getIncomeAndExpense(IncomeAndExpenseParam param) {
|
|
|
+ public List<IncomeAndExpenseVo> getIncomeAndExpenseOld(IncomeAndExpenseParam param) {
|
|
|
log.info("查询收支明细记录:param=[{}]", JSONUtil.toJsonStr(param));
|
|
|
// 获取个人中心信息
|
|
|
String mobile = baseController.getUserName();
|