|
|
@@ -3,20 +3,25 @@ package org.springblade.project.service.impl;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import jdk.nashorn.internal.ir.CallNode;
|
|
|
import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springblade.client.feign.ISerialClient;
|
|
|
import org.springblade.core.mp.base.BaseService;
|
|
|
import org.springblade.core.mp.base.BaseServiceImpl;
|
|
|
import org.springblade.core.secure.utils.SecureUtil;
|
|
|
+import org.springblade.core.tool.api.R;
|
|
|
import org.springblade.project.entity.ServiceProject;
|
|
|
import org.springblade.project.entity.ServiceProjectItem;
|
|
|
import org.springblade.project.mapper.ServiceProjectItemMapper;
|
|
|
import org.springblade.project.mapper.ServiceProjectMapper;
|
|
|
import org.springblade.project.service.ServiceProjectItemService;
|
|
|
import org.springblade.project.service.ServiceProjectService;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
@@ -30,6 +35,8 @@ public class ServiceProjectServiceImpl extends BaseServiceImpl<ServiceProjectMap
|
|
|
private ServiceProjectMapper serviceProjectMapper;
|
|
|
@Autowired
|
|
|
private ServiceProjectItemMapper serviceProjectItemMapper;
|
|
|
+ @Autowired
|
|
|
+ private ISerialClient serialClient;//生成系统编号
|
|
|
|
|
|
@Override
|
|
|
@Transactional
|
|
|
@@ -39,7 +46,13 @@ public class ServiceProjectServiceImpl extends BaseServiceImpl<ServiceProjectMap
|
|
|
//新增操作,不用考虑子项问题,子项必然是新增
|
|
|
if(serviceProject.getId()==null)
|
|
|
{
|
|
|
-
|
|
|
+ BigDecimal debitAmount = serviceProject.getDebitAmount();//合同总金额
|
|
|
+ BigDecimal settlmentAmount = serviceProject.getSettlmentAmount();//已收金额
|
|
|
+ BigDecimal balanceAmount = serviceProject.getBalanceAmount();//未收金额
|
|
|
+ if(balanceAmount.add(settlmentAmount).compareTo(debitAmount)!=0)
|
|
|
+ {
|
|
|
+ throw new RuntimeException("已收金额+未收金额≠合同总金额,请确认后提交");
|
|
|
+ }
|
|
|
serviceProject.setCreateTime(new Date());
|
|
|
serviceProject.setCreateUser(SecureUtil.getUserId());
|
|
|
serviceProject.setCreateUserName(SecureUtil.getUser().getRoleName());
|
|
|
@@ -136,6 +149,106 @@ public class ServiceProjectServiceImpl extends BaseServiceImpl<ServiceProjectMap
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ //检查明细总金额是否超过主表总金额
|
|
|
+ LambdaQueryWrapper<ServiceProjectItem> itemLambdaQueryWrapper=new LambdaQueryWrapper();
|
|
|
+ itemLambdaQueryWrapper.eq(ServiceProjectItem::getPId,serviceProject.getId());
|
|
|
+ List<ServiceProjectItem> serviceProjectItems = serviceProjectItemMapper.selectList(itemLambdaQueryWrapper);
|
|
|
+
|
|
|
+ checkMoney(serviceProject.getId(),serviceProjectItems);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public synchronized R getSysNo()
|
|
|
+ {
|
|
|
+ R billNo = serialClient.getBillNo("XM");
|
|
|
+ if (billNo.getCode() != 200){
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ throw new RuntimeException("生成系统编号失败");
|
|
|
+ }
|
|
|
+ return billNo;
|
|
|
+ }
|
|
|
|
|
|
+ @Override
|
|
|
+ public void updateItemStatus(Long itemId, int status)
|
|
|
+ {
|
|
|
+ ServiceProjectItem serviceProjectItem = serviceProjectItemMapper.selectById(itemId);
|
|
|
+
|
|
|
+ if(serviceProjectItem==null)
|
|
|
+ {
|
|
|
+ throw new RuntimeException("请确认传入id正确");
|
|
|
+ }
|
|
|
+ //明细已请核之后, 修改主表的status状态为1
|
|
|
+ if(status==1)
|
|
|
+ {
|
|
|
+ ServiceProject serviceProject=new ServiceProject();
|
|
|
+ serviceProject.setStatus(1);
|
|
|
+ serviceProject.setId(serviceProjectItem.getPId());
|
|
|
+ serviceProject.setUpdateUser(SecureUtil.getUserId());
|
|
|
+ serviceProject.setUpdateTime(new Date());
|
|
|
+ serviceProject.setUpdateUserName(SecureUtil.getUser().getRoleName());
|
|
|
+ serviceProjectMapper.updateById(serviceProject);
|
|
|
+ }
|
|
|
+ //明细已结算之后, 修改主表的已收款项 和 未收款项
|
|
|
+ else if(status==5)
|
|
|
+ {
|
|
|
+
|
|
|
+ ServiceProject targetServiceProject = serviceProjectMapper.selectById(serviceProjectItem.getPId());
|
|
|
+ //主表已收款项增加
|
|
|
+ targetServiceProject.setSettlmentAmount(targetServiceProject.getSettlmentAmount().add(serviceProjectItem.getAmount()));
|
|
|
+ //主表未收款项减少
|
|
|
+ targetServiceProject.setBalanceAmount(targetServiceProject.getBalanceAmount().subtract(serviceProjectItem.getAmount()));
|
|
|
+ targetServiceProject.setUpdateUser(SecureUtil.getUserId());
|
|
|
+ targetServiceProject.setUpdateTime(new Date());
|
|
|
+ targetServiceProject.setUpdateUserName(SecureUtil.getUser().getRoleName());
|
|
|
+ serviceProjectMapper.updateById(targetServiceProject);
|
|
|
+
|
|
|
+ }
|
|
|
+ //撤回
|
|
|
+ else if(status==6)
|
|
|
+ {
|
|
|
+ ServiceProject targetServiceProject = serviceProjectMapper.selectById(serviceProjectItem.getPId());
|
|
|
+
|
|
|
+ //撤回时候,主表已收款项减少
|
|
|
+ targetServiceProject.setSettlmentAmount(targetServiceProject.getSettlmentAmount().subtract(serviceProjectItem.getAmount()));
|
|
|
+ //撤回时候,主表未收款项增加
|
|
|
+ targetServiceProject.setBalanceAmount(targetServiceProject.getBalanceAmount().add(serviceProjectItem.getAmount()));
|
|
|
+ targetServiceProject.setUpdateUser(SecureUtil.getUserId());
|
|
|
+ targetServiceProject.setUpdateTime(new Date());
|
|
|
+ targetServiceProject.setUpdateUserName(SecureUtil.getUser().getRoleName());
|
|
|
+ serviceProjectMapper.updateById(targetServiceProject);
|
|
|
+ }
|
|
|
+ ServiceProjectItem updateModel=new ServiceProjectItem();
|
|
|
+ updateModel.setId(itemId);
|
|
|
+ updateModel.setUpdateTime(new Date());
|
|
|
+ updateModel.setUpdateUser(SecureUtil.getUserId());
|
|
|
+ //status=6代表撤回, item状态回到4
|
|
|
+ if(status==6)
|
|
|
+ {
|
|
|
+ updateModel.setStatus(4);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ updateModel.setStatus(status);
|
|
|
+ }
|
|
|
+ serviceProjectItemMapper.updateById(updateModel);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void checkMoney(Long serviceId,List<ServiceProjectItem> items)
|
|
|
+ {
|
|
|
+ ServiceProject serviceProject = serviceProjectMapper.selectById(serviceId);
|
|
|
+ //合同金额
|
|
|
+ BigDecimal debitAmount = serviceProject.getDebitAmount();
|
|
|
+ //子项总金额
|
|
|
+ BigDecimal decimal = items.stream()
|
|
|
+ .filter(it -> it.getAmount() != null)
|
|
|
+ .map(ServiceProjectItem::getAmount)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ if(decimal.compareTo(debitAmount)==1)
|
|
|
+ {
|
|
|
+ throw new RuntimeException("操作失败,明细总金额大于合同金额");
|
|
|
+ }
|
|
|
}
|
|
|
}
|