导出报工表格
This commit is contained in:
@@ -262,4 +262,37 @@ public class SysOaFinanceController extends BaseController {
|
|||||||
public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] financeIds) {
|
public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] financeIds) {
|
||||||
return toAjax(iSysOaFinanceService.deleteWithValidByIds(Arrays.asList(financeIds), true));
|
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 insertByBo(SysOaFinanceBo bo);
|
||||||
|
Boolean insertByBoBalance(SysOaFinanceBo bo);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改进出账管理
|
* 修改进出账管理
|
||||||
*/
|
*/
|
||||||
Boolean updateByBo(SysOaFinanceBo bo);
|
Boolean updateByBo(SysOaFinanceBo bo);
|
||||||
|
Boolean updateByBoBalance(SysOaFinanceBo bo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验并批量删除进出账管理信息
|
* 校验并批量删除进出账管理信息
|
||||||
@@ -91,6 +94,7 @@ public interface ISysOaFinanceService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Boolean deleteSysOaFinanceById(Long financeId);
|
Boolean deleteSysOaFinanceById(Long financeId);
|
||||||
|
Boolean deleteSysOaFinanceByIdBalance(Long financeId);
|
||||||
|
|
||||||
|
|
||||||
public List<SysOaFinanceVo> getByProgressId(Long progressId);
|
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.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.ruoyi.oa.config.ContextUtil;
|
import com.ruoyi.oa.config.ContextUtil;
|
||||||
import com.ruoyi.oa.domain.SysOaDetail;
|
import com.ruoyi.oa.domain.SysOaDetail;
|
||||||
|
import com.ruoyi.oa.domain.SysOaReceiveAccount;
|
||||||
import com.ruoyi.oa.domain.bo.SysOaDetailBo;
|
import com.ruoyi.oa.domain.bo.SysOaDetailBo;
|
||||||
import com.ruoyi.oa.domain.dto.BarDataDTO;
|
import com.ruoyi.oa.domain.dto.BarDataDTO;
|
||||||
import com.ruoyi.oa.domain.dto.FinanceDetailDTO;
|
import com.ruoyi.oa.domain.dto.FinanceDetailDTO;
|
||||||
import com.ruoyi.oa.mapper.SysOaDetailMapper;
|
import com.ruoyi.oa.mapper.SysOaDetailMapper;
|
||||||
|
import com.ruoyi.oa.mapper.SysOaReceiveAccountMapper;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.apache.ibatis.javassist.runtime.Desc;
|
import org.apache.ibatis.javassist.runtime.Desc;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -45,6 +47,7 @@ public class SysOaFinanceServiceImpl implements ISysOaFinanceService {
|
|||||||
|
|
||||||
|
|
||||||
private final SysOaDetailMapper sysOaDetailMapper;
|
private final SysOaDetailMapper sysOaDetailMapper;
|
||||||
|
private final SysOaReceiveAccountMapper receiveAccountMapper;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -215,6 +218,47 @@ public class SysOaFinanceServiceImpl implements ISysOaFinanceService {
|
|||||||
insertSysOaDetail(bo);
|
insertSysOaDetail(bo);
|
||||||
return flag;
|
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);
|
insertSysOaDetail(bo);
|
||||||
return baseMapper.updateById(update) > 0;
|
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;
|
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
|
@Override
|
||||||
public List<BarDataDTO> getBarData(Long projectId, String financeType) {
|
public List<BarDataDTO> getBarData(Long projectId, String financeType) {
|
||||||
return baseMapper.getBarData(projectId, financeType);
|
return baseMapper.getBarData(projectId, financeType);
|
||||||
|
|||||||
Reference in New Issue
Block a user