导出报工表格
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user