导出报工表格

This commit is contained in:
2025-06-25 18:22:10 +08:00
parent d627df25e0
commit 5dda61bda6
3 changed files with 121 additions and 0 deletions

View File

@@ -262,4 +262,37 @@ public class SysOaFinanceController extends BaseController {
public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] financeIds) {
return toAjax(iSysOaFinanceService.deleteWithValidByIds(Arrays.asList(financeIds), true));
}*/
/**
* 新增进出账管理带余额
*/
@SaCheckPermission("oa:finance:add")
@Log(title = "进出账管理", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/addBalance")
public R<Void> addBalance(@Validated(AddGroup.class) @RequestBody SysOaFinanceBo bo) {
return toAjax(iSysOaFinanceService.insertByBoBalance(bo));
}
/**
* 修改进出账管理带余额
*/
@SaCheckPermission("oa:finance:edit")
@Log(title = "进出账管理", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/editBalance")
public R<Void> editBalance(@Validated(EditGroup.class) @RequestBody SysOaFinanceBo bo) {
return toAjax(iSysOaFinanceService.updateByBoBalance(bo));
}
/**
* 删除进出账管理带余额
*
* @param financeId 主键串
*/
@SaCheckPermission("oa:finance:remove")
@Log(title = "进出账管理", businessType = BusinessType.DELETE)
@DeleteMapping("/removeDataBalance/{financeId}")
public Boolean removeDataBalance(@NotNull(message = "主键不能为空") @PathVariable Long financeId) {
return iSysOaFinanceService.deleteSysOaFinanceByIdBalance(financeId);
}
}

View File

@@ -74,11 +74,14 @@ public interface ISysOaFinanceService {
* 新增进出账管理
*/
Boolean insertByBo(SysOaFinanceBo bo);
Boolean insertByBoBalance(SysOaFinanceBo bo);
/**
* 修改进出账管理
*/
Boolean updateByBo(SysOaFinanceBo bo);
Boolean updateByBoBalance(SysOaFinanceBo bo);
/**
* 校验并批量删除进出账管理信息
@@ -91,6 +94,7 @@ public interface ISysOaFinanceService {
* @return
*/
Boolean deleteSysOaFinanceById(Long financeId);
Boolean deleteSysOaFinanceByIdBalance(Long financeId);
public List<SysOaFinanceVo> getByProgressId(Long progressId);

View File

@@ -13,10 +13,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.oa.config.ContextUtil;
import com.ruoyi.oa.domain.SysOaDetail;
import com.ruoyi.oa.domain.SysOaReceiveAccount;
import com.ruoyi.oa.domain.bo.SysOaDetailBo;
import com.ruoyi.oa.domain.dto.BarDataDTO;
import com.ruoyi.oa.domain.dto.FinanceDetailDTO;
import com.ruoyi.oa.mapper.SysOaDetailMapper;
import com.ruoyi.oa.mapper.SysOaReceiveAccountMapper;
import lombok.RequiredArgsConstructor;
import org.apache.ibatis.javassist.runtime.Desc;
import org.springframework.stereotype.Service;
@@ -45,6 +47,7 @@ public class SysOaFinanceServiceImpl implements ISysOaFinanceService {
private final SysOaDetailMapper sysOaDetailMapper;
private final SysOaReceiveAccountMapper receiveAccountMapper;
/**
@@ -215,6 +218,47 @@ public class SysOaFinanceServiceImpl implements ISysOaFinanceService {
insertSysOaDetail(bo);
return flag;
}
/**
* 更新账户余额
* @param accountId 账户ID
* @param amount 金额
* @param isIncome 是否入账true=入账false=支出)
*/
private void updateAccountBalance(Long accountId, BigDecimal amount, boolean isIncome) {
if (accountId == null || amount == null) return;
SysOaReceiveAccount account = receiveAccountMapper.selectById(accountId);
if (account == null) return;
BigDecimal balance = account.getBalance() == null ? BigDecimal.ZERO : BigDecimal.valueOf(account.getBalance());
if (isIncome) {
balance = balance.add(amount);
} else {
balance = balance.subtract(amount);
}
account.setBalance(balance.doubleValue());
receiveAccountMapper.updateById(account);
}
private BigDecimal getDetailTotalAmount(List<SysOaDetail> detailList) {
if (detailList == null || detailList.isEmpty()) return BigDecimal.ZERO;
return detailList.stream()
.map(SysOaDetail::getPrice)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
@Transactional
@Override
public Boolean insertByBoBalance(SysOaFinanceBo bo) {
SysOaFinance add = BeanUtil.toBean(bo, SysOaFinance.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setFinanceId(add.getFinanceId());
insertSysOaDetail(bo);
// 余额处理
BigDecimal total = getDetailTotalAmount(bo.getDetailList());
updateAccountBalance(bo.getReceiveAccountId(), total, "1".equals(bo.getFinanceType()));
}
return flag;
}
/**
* 修改进出账管理
@@ -229,6 +273,31 @@ public class SysOaFinanceServiceImpl implements ISysOaFinanceService {
insertSysOaDetail(bo);
return baseMapper.updateById(update) > 0;
}
@Transactional
@Override
public Boolean updateByBoBalance(SysOaFinanceBo bo) {
// 1. 查询旧数据
SysOaFinanceVo old = baseMapper.selectVoById(bo.getFinanceId());
if (old != null) {
List<SysOaDetail> oldDetails = sysOaDetailMapper.selectList(
new LambdaQueryWrapper<SysOaDetail>().eq(SysOaDetail::getFinanceId, bo.getFinanceId()));
BigDecimal oldTotal = getDetailTotalAmount(oldDetails);
// 先冲销旧余额
updateAccountBalance(old.getReceiveAccountId(), oldTotal, !"1".equals(old.getFinanceType()));
}
SysOaFinance update = BeanUtil.toBean(bo, SysOaFinance.class);
validEntityBeforeSave(update);
//先删除原来数据
sysOaDetailMapper.deleteSysOaDetailByfinanceId(bo.getFinanceId());
//再插入修改后的数据
insertSysOaDetail(bo);
boolean result = baseMapper.updateById(update) > 0;
if (result) {
BigDecimal newTotal = getDetailTotalAmount(bo.getDetailList());
updateAccountBalance(bo.getReceiveAccountId(), newTotal, "1".equals(bo.getFinanceType()));
}
return result;
}
/**
@@ -270,6 +339,21 @@ public class SysOaFinanceServiceImpl implements ISysOaFinanceService {
return baseMapper.deleteById(financeId) > 0;
}
@Transactional
@Override
public Boolean deleteSysOaFinanceByIdBalance(Long financeId) {
SysOaFinanceVo old = baseMapper.selectVoById(financeId);
if (old != null) {
List<SysOaDetail> oldDetails = sysOaDetailMapper.selectList(
new LambdaQueryWrapper<SysOaDetail>().eq(SysOaDetail::getFinanceId, financeId));
BigDecimal total = getDetailTotalAmount(oldDetails);
// 反向操作
updateAccountBalance(old.getReceiveAccountId(), total, !"1".equals(old.getFinanceType()));
}
sysOaDetailMapper.deleteSysOaDetailByfinanceId(financeId);
return baseMapper.deleteById(financeId) > 0;
}
@Override
public List<BarDataDTO> getBarData(Long projectId, String financeType) {
return baseMapper.getBarData(projectId, financeType);