|
|
@@ -16,13 +16,41 @@
|
|
|
*/
|
|
|
package org.springblade.los.finance.operatingExpenses.service.impl;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import org.springblade.core.secure.utils.AuthUtil;
|
|
|
+import org.springblade.core.tool.api.R;
|
|
|
+import org.springblade.los.basic.business.entity.BusinessType;
|
|
|
+import org.springblade.los.basic.business.service.IBusinessTypeService;
|
|
|
+import org.springblade.los.billno.entity.BusinessBillNo;
|
|
|
+import org.springblade.los.billno.service.IBusinessBillNoService;
|
|
|
+import org.springblade.los.business.files.entity.FilesCenter;
|
|
|
+import org.springblade.los.business.files.service.IFilesCenterService;
|
|
|
+import org.springblade.los.check.dto.LosAuditProecessDTO;
|
|
|
+import org.springblade.los.check.entity.LosAuditPathsActs;
|
|
|
+import org.springblade.los.check.entity.LosAuditPathsLevels;
|
|
|
+import org.springblade.los.check.service.IAuditPathsActsService;
|
|
|
+import org.springblade.los.check.service.IAuditPathsLevelsService;
|
|
|
+import org.springblade.los.check.service.IAuditProecessService;
|
|
|
import org.springblade.los.finance.operatingExpenses.entity.OperatingExpenses;
|
|
|
-import org.springblade.los.finance.operatingExpenses.vo.OperatingExpensesVO;
|
|
|
+import org.springblade.los.finance.operatingExpenses.entity.OperatingExpensesItem;
|
|
|
import org.springblade.los.finance.operatingExpenses.mapper.OperatingExpensesMapper;
|
|
|
+import org.springblade.los.finance.operatingExpenses.service.IOperatingExpensesItemService;
|
|
|
import org.springblade.los.finance.operatingExpenses.service.IOperatingExpensesService;
|
|
|
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import org.springblade.los.finance.operatingExpenses.vo.OperatingExpensesVO;
|
|
|
+import org.springblade.system.feign.ISysClient;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
|
|
|
/**
|
|
|
* 营业费用 服务实现类
|
|
|
@@ -31,11 +59,239 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
* @since 2025-08-28
|
|
|
*/
|
|
|
@Service
|
|
|
+@AllArgsConstructor
|
|
|
public class OperatingExpensesServiceImpl extends ServiceImpl<OperatingExpensesMapper, OperatingExpenses> implements IOperatingExpensesService {
|
|
|
|
|
|
+ private final IOperatingExpensesItemService operatingExpensesItemService;
|
|
|
+
|
|
|
+ private final IFilesCenterService filesCenterService;
|
|
|
+
|
|
|
+ private final ISysClient sysClient;
|
|
|
+
|
|
|
+ private final IBusinessBillNoService businessBillNoService;
|
|
|
+
|
|
|
+ private final IBusinessTypeService bBusinessTypeService;
|
|
|
+
|
|
|
+ private final IAuditPathsActsService auditPathsActsService;
|
|
|
+
|
|
|
+ private final IAuditPathsLevelsService auditPathsLevelsService;
|
|
|
+
|
|
|
+ private final IAuditProecessService auditProecessService;
|
|
|
+
|
|
|
@Override
|
|
|
public IPage<OperatingExpensesVO> selectOperatingExpensesPage(IPage<OperatingExpensesVO> page, OperatingExpensesVO operatingExpenses) {
|
|
|
return page.setRecords(baseMapper.selectOperatingExpensesPage(page, operatingExpenses));
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public OperatingExpenses detail(OperatingExpenses operatingExpenses) {
|
|
|
+ if (operatingExpenses.getId() == null) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ OperatingExpenses detail = baseMapper.selectById(operatingExpenses.getId());
|
|
|
+ List<OperatingExpensesItem> operatingExpensesItemList = operatingExpensesItemService.list(new LambdaQueryWrapper<OperatingExpensesItem>()
|
|
|
+ .eq(OperatingExpensesItem::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(OperatingExpensesItem::getIsDeleted, 0)
|
|
|
+ .eq(OperatingExpensesItem::getPid, operatingExpenses.getId()));
|
|
|
+ detail.setOperatingExpensesItemList(operatingExpensesItemList.isEmpty() ? new ArrayList<>() : operatingExpensesItemList);
|
|
|
+ List<FilesCenter> filesCenterList = filesCenterService.list(new LambdaQueryWrapper<FilesCenter>()
|
|
|
+ .eq(FilesCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FilesCenter::getIsDeleted, 0)
|
|
|
+ .eq(FilesCenter::getPid, operatingExpenses.getId()));
|
|
|
+ detail.setFilesCenterList(filesCenterList.isEmpty() ? new ArrayList<>() : filesCenterList);
|
|
|
+ return detail;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R submit(OperatingExpenses operatingExpenses) {
|
|
|
+ String branchId;
|
|
|
+ String deptName = "";
|
|
|
+ if (ObjectUtils.isNull(operatingExpenses.getBranchId())) {
|
|
|
+ branchId = AuthUtil.getDeptId();
|
|
|
+ } else {
|
|
|
+ branchId = operatingExpenses.getBranchId();
|
|
|
+ }
|
|
|
+ //获取部门ids对应中文名
|
|
|
+ R<String> res = sysClient.getDeptName(Long.parseLong(branchId));
|
|
|
+ if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
|
|
|
+ deptName = res.getData();
|
|
|
+ }
|
|
|
+ if (operatingExpenses.getId() == null) {
|
|
|
+ BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
|
|
|
+ .eq(BusinessType::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BusinessType::getIsDeleted, 0)
|
|
|
+ .eq(BusinessType::getStatus, 0)
|
|
|
+ .eq(BusinessType::getCode, "YYFY"));
|
|
|
+ if (businessType == null) {
|
|
|
+ throw new RuntimeException("未找到可用业务类型");
|
|
|
+ }
|
|
|
+ BusinessBillNo businessBillNo = new BusinessBillNo();
|
|
|
+ businessBillNo.setBusinessTypeId(businessType.getId());
|
|
|
+ businessBillNo.setCode("YYFY");
|
|
|
+ businessBillNo.setBranchId(branchId);
|
|
|
+ businessBillNo.setDate(operatingExpenses.getApplicantDate());
|
|
|
+ R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
|
|
|
+ if (!clientBillNo.isSuccess()) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ return R.fail(500, "生成订单编号失败");
|
|
|
+ }
|
|
|
+ operatingExpenses.setBillNo((String) clientBillNo.getData());
|
|
|
+ operatingExpenses.setCreateTime(new Date());
|
|
|
+ operatingExpenses.setCreateUser(AuthUtil.getUserId());
|
|
|
+ operatingExpenses.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ operatingExpenses.setBranchId(branchId);
|
|
|
+ baseMapper.insert(operatingExpenses);
|
|
|
+ } else {
|
|
|
+ operatingExpenses.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ operatingExpenses.setUpdateTime(new Date());
|
|
|
+ operatingExpenses.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ }
|
|
|
+ if (ObjectUtils.isNotNull(operatingExpenses.getOperatingExpensesItemList())) {
|
|
|
+ BigDecimal amount = new BigDecimal("0.00");
|
|
|
+ for (OperatingExpensesItem item : operatingExpenses.getOperatingExpensesItemList()) {
|
|
|
+ amount = amount.add(item.getAmount());
|
|
|
+ item.setPid(operatingExpenses.getId());
|
|
|
+ if (item.getId() == null) {
|
|
|
+ item.setCreateTime(new Date());
|
|
|
+ item.setCreateUser(AuthUtil.getUserId());
|
|
|
+ item.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ item.setBranchId(branchId);
|
|
|
+ item.setBranchName(deptName);
|
|
|
+ } else {
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ operatingExpensesItemService.saveOrUpdateBatch(operatingExpenses.getOperatingExpensesItemList());
|
|
|
+ operatingExpenses.setAmount(amount);
|
|
|
+ }
|
|
|
+ this.saveOrUpdate(operatingExpenses);
|
|
|
+ if (ObjectUtils.isNotNull(operatingExpenses.getFilesCenterList())) {
|
|
|
+ for (FilesCenter item : operatingExpenses.getFilesCenterList()) {
|
|
|
+ item.setPid(operatingExpenses.getId());
|
|
|
+ if (item.getId() == null) {
|
|
|
+ item.setCreateTime(new Date());
|
|
|
+ item.setCreateUser(AuthUtil.getUserId());
|
|
|
+ item.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
|
|
|
+ item.setCreateDeptName(deptName);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ filesCenterService.saveOrUpdateBatch(operatingExpenses.getFilesCenterList());
|
|
|
+ }
|
|
|
+ return R.data(operatingExpenses);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R checkOperatingExpenses(OperatingExpenses operatingExpenses) {
|
|
|
+ OperatingExpenses declare = baseMapper.selectById(operatingExpenses.getId());
|
|
|
+ Integer actId = 1136;
|
|
|
+ String processType = "营业费用请核";
|
|
|
+ String checkType = "YYFY";
|
|
|
+ //审批数据
|
|
|
+ LosAuditProecessDTO auditProecessDTO = new LosAuditProecessDTO();
|
|
|
+ //获取审批级次
|
|
|
+ List<LosAuditPathsLevels> auditPathsLevels;
|
|
|
+ // 判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
|
|
|
+ LosAuditPathsActs pathsActs;
|
|
|
+ //是否开启流程
|
|
|
+ LambdaQueryWrapper<LosAuditPathsActs> auditPathsActsLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ auditPathsActsLambdaQueryWrapper
|
|
|
+ .eq(LosAuditPathsActs::getIsEnable, 1)
|
|
|
+ .eq(LosAuditPathsActs::getFidStatus, "status")
|
|
|
+ .eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(LosAuditPathsActs::getSalesCompanyId, declare.getBranchId())
|
|
|
+ .eq(LosAuditPathsActs::getActId, actId);
|
|
|
+ pathsActs = auditPathsActsService.getOne(auditPathsActsLambdaQueryWrapper);
|
|
|
+ //获取审批信息
|
|
|
+ LosAuditPathsActs losAuditPathsActs = auditPathsActsService.getOne(new LambdaQueryWrapper<LosAuditPathsActs>()
|
|
|
+ .eq(LosAuditPathsActs::getActId, actId)
|
|
|
+ .eq(LosAuditPathsActs::getFidStatus, "status")
|
|
|
+ .eq(LosAuditPathsActs::getSalesCompanyId, declare.getBranchId())
|
|
|
+ .eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId()));
|
|
|
+ Long pathId = losAuditPathsActs.getPathId();
|
|
|
+ auditPathsLevels = auditPathsLevelsService.list(new LambdaQueryWrapper<LosAuditPathsLevels>()
|
|
|
+ .eq(LosAuditPathsLevels::getTenantId, AuthUtil.getTenantId()).eq(LosAuditPathsLevels::getPathId, pathId));
|
|
|
+ auditProecessDTO.setTimes(1);
|
|
|
+ auditProecessDTO.setProcessType(processType);
|
|
|
+ // 没开启审批流直接走 通过流程
|
|
|
+ if (pathsActs == null || pathsActs.getIsEnable() == 2) {
|
|
|
+ throw new SecurityException("当前租户未查询到审批流配置");
|
|
|
+ } else {
|
|
|
+ if (CollectionUtils.isEmpty(auditPathsLevels)) {
|
|
|
+ throw new SecurityException("开启审批失败:未查询到审批信息");
|
|
|
+ }
|
|
|
+ // 绑定审核类型
|
|
|
+ auditProecessDTO.setCheckType(checkType);
|
|
|
+ // 追加跳转路由url
|
|
|
+ auditProecessDTO.setUrl(operatingExpenses.getUrl());
|
|
|
+ auditProecessDTO.setPageStatus(operatingExpenses.getPageStatus());
|
|
|
+ auditProecessDTO.setPageLabel(operatingExpenses.getPageLabel());
|
|
|
+ auditProecessDTO.setOrderRemark(declare.getRemarks());
|
|
|
+ auditProecessDTO.setPathsLevelsList(auditPathsLevels);
|
|
|
+ auditProecessDTO.setActId(1);
|
|
|
+ auditProecessDTO.setSrcBillId(declare.getId());
|
|
|
+ auditProecessDTO.setBillId(declare.getId());
|
|
|
+ auditProecessDTO.setBillNo(declare.getBillNo());
|
|
|
+ auditProecessDTO.setSendUserId(AuthUtil.getUserId());
|
|
|
+ auditProecessDTO.setSendName(AuthUtil.getUserName());
|
|
|
+ auditProecessDTO.setSendTime(new Date());
|
|
|
+ auditProecessDTO.setBillTime(declare.getCreateTime());
|
|
|
+ auditProecessDTO.setTenantId(AuthUtil.getTenantId());
|
|
|
+ auditProecessDTO.setSalesCompanyId(Long.parseLong(declare.getBranchId()));
|
|
|
+ auditProecessDTO.setSalesCompanyName(declare.getBranchName());
|
|
|
+ auditProecessDTO.setPayAmount(declare.getAmount());
|
|
|
+ R financeProcess = auditProecessService.createFinanceProcess(auditProecessDTO);
|
|
|
+ if (!financeProcess.isSuccess()) {
|
|
|
+ throw new SecurityException("操作失败,请联系管理员");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ declare.setStatus("1");
|
|
|
+ baseMapper.updateById(declare);
|
|
|
+ return R.data(declare);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R revokeCheckOperatingExpenses(OperatingExpenses operatingExpenses) {
|
|
|
+ OperatingExpenses declare = baseMapper.selectById(operatingExpenses.getId());
|
|
|
+ R financeProcess = auditProecessService.deteleByBillId(operatingExpenses.getId());
|
|
|
+ if (!financeProcess.isSuccess()) {
|
|
|
+ throw new SecurityException("操作失败,请联系管理员");
|
|
|
+ }
|
|
|
+ operatingExpenses.setStatus("0");
|
|
|
+ baseMapper.updateById(declare);
|
|
|
+ return R.data(declare);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R confirmation(OperatingExpenses operatingExpenses) {
|
|
|
+ OperatingExpenses declare = baseMapper.selectById(operatingExpenses.getId());
|
|
|
+ operatingExpenses.setSettlementStatus("1");
|
|
|
+ operatingExpenses.setSettlementDate(new Date());
|
|
|
+ operatingExpenses.setSettlementPersonId(AuthUtil.getUserId());
|
|
|
+ operatingExpenses.setSettlementPersonName(AuthUtil.getUserName());
|
|
|
+ baseMapper.updateById(declare);
|
|
|
+ return R.data(declare);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R revokeConfirmation(OperatingExpenses operatingExpenses) {
|
|
|
+ OperatingExpenses declare = baseMapper.selectById(operatingExpenses.getId());
|
|
|
+ operatingExpenses.setSettlementStatus("0");
|
|
|
+ operatingExpenses.setSettlementDate(null);
|
|
|
+ operatingExpenses.setSettlementPersonId(null);
|
|
|
+ operatingExpenses.setSettlementPersonName(null);
|
|
|
+ baseMapper.updateById(declare);
|
|
|
+ return R.data(declare);
|
|
|
+ }
|
|
|
+
|
|
|
}
|