|
|
@@ -1,7 +1,8 @@
|
|
|
package org.springblade.project.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
-import jdk.nashorn.internal.ir.CallNode;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
|
|
|
import org.springblade.check.dto.AuditProecessDTO;
|
|
|
@@ -9,8 +10,6 @@ import org.springblade.check.entity.AuditPathsActs;
|
|
|
import org.springblade.check.entity.AuditPathsLevels;
|
|
|
import org.springblade.check.feign.ICheckClient;
|
|
|
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.AuthUtil;
|
|
|
import org.springblade.core.secure.utils.SecureUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
@@ -20,259 +19,222 @@ import org.springblade.project.entity.ServiceProjectItem;
|
|
|
import org.springblade.project.mapper.ServiceProjectFilesMapper;
|
|
|
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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
-import org.springframework.web.bind.annotation.RequestParam;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.util.Calendar;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
@Service
|
|
|
@AllArgsConstructor
|
|
|
-public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper, ServiceProject> implements ServiceProjectService
|
|
|
-{
|
|
|
- @Resource
|
|
|
- private ServiceProjectMapper serviceProjectMapper;
|
|
|
+public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper, ServiceProject> implements ServiceProjectService {
|
|
|
@Resource
|
|
|
- private ServiceProjectItemMapper serviceProjectItemMapper;
|
|
|
+ private ServiceProjectMapper serviceProjectMapper;
|
|
|
@Resource
|
|
|
- private ServiceProjectFilesMapper serviceProjectFilesMapper;
|
|
|
+ private ServiceProjectItemMapper serviceProjectItemMapper;
|
|
|
@Resource
|
|
|
- private ISerialClient serialClient;//生成系统编号
|
|
|
+ private ServiceProjectFilesMapper serviceProjectFilesMapper;
|
|
|
+ @Resource
|
|
|
+ private ISerialClient serialClient;//生成系统编号
|
|
|
|
|
|
private final ICheckClient iCheckClient;
|
|
|
|
|
|
@Override
|
|
|
@Transactional
|
|
|
- public void modify(ServiceProject serviceProject)
|
|
|
- {
|
|
|
+ public void modify(ServiceProject serviceProject) {
|
|
|
List<ServiceProjectItem> itemList = serviceProject.getItemList();
|
|
|
|
|
|
List<ServiceProjectFiles> filesList = serviceProject.getFilesList();
|
|
|
//新增操作,不用考虑子项问题,子项必然是新增
|
|
|
- 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("已收金额+未收金额≠合同总金额,请确认后提交");
|
|
|
- }
|
|
|
- R billNo = serialClient.getBillNo("ZY", "ZY","ZY");
|
|
|
- if(billNo.isSuccess())
|
|
|
- {
|
|
|
- serviceProject.setSysNo(billNo.getData().toString());
|
|
|
- }
|
|
|
- serviceProject.setTenantId(AuthUtil.getTenantId());
|
|
|
- serviceProject.setCreateTime(new Date());
|
|
|
- serviceProject.setCreateUser(SecureUtil.getUserId());
|
|
|
- serviceProject.setCreateUserName(SecureUtil.getUser().getUserName());
|
|
|
- serviceProjectMapper.insert(serviceProject);
|
|
|
- if(!CollectionUtils.isEmpty(itemList))
|
|
|
- {
|
|
|
- itemList.forEach(e->{
|
|
|
- //如果是退费,需要取反
|
|
|
- if(e.getProjectType()==2)
|
|
|
- {
|
|
|
- if(e.getServiceCharge().compareTo(BigDecimal.ZERO)==1)
|
|
|
- {
|
|
|
- e.setServiceCharge(e.getServiceCharge()!=null?e.getServiceCharge().negate():new BigDecimal("0"));
|
|
|
- }
|
|
|
- if(e.getMatMoney().compareTo(BigDecimal.ZERO)==1)
|
|
|
- {
|
|
|
- e.setMatMoney(e.getMatMoney()!=null?e.getMatMoney().negate():new BigDecimal("0"));
|
|
|
- }
|
|
|
- if(e.getAmount().compareTo(BigDecimal.ZERO)==1)
|
|
|
- {
|
|
|
- e.setAmount(e.getAmount()!=null?e.getAmount().negate():new BigDecimal("0"));
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- e.setTenantId(AuthUtil.getTenantId());
|
|
|
- e.setPId(serviceProject.getId());
|
|
|
- e.setCreateTime(new Date());
|
|
|
- e.setCreateUser(SecureUtil.getUserId());
|
|
|
- e.setCreateUserName(SecureUtil.getUser().getUserName());
|
|
|
- serviceProjectItemMapper.insert(e);
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- if(!CollectionUtils.isEmpty(filesList))
|
|
|
- {
|
|
|
- filesList.forEach(e->{
|
|
|
- e.setTenantId(AuthUtil.getTenantId());
|
|
|
- e.setPId(serviceProject.getId());
|
|
|
- e.setCreateTime(new Date());
|
|
|
- e.setCreateUser(SecureUtil.getUserId());
|
|
|
- e.setCreateUserName(SecureUtil.getUser().getUserName());
|
|
|
- serviceProjectFilesMapper.insert(e);
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
- //修改操作,则需要判断子项是否为新增、修改、删除
|
|
|
- else
|
|
|
- {
|
|
|
- //操作主表
|
|
|
- serviceProjectMapper.updateById(serviceProject);
|
|
|
- //操作字表,查询之前的子项记录
|
|
|
- LambdaQueryWrapper<ServiceProjectItem> itemLambdaQueryWrapper=new LambdaQueryWrapper<>();
|
|
|
- itemLambdaQueryWrapper
|
|
|
- .eq(ServiceProjectItem::getIsDeleted,0)
|
|
|
- .eq(ServiceProjectItem::getPId,serviceProject.getId());
|
|
|
- List<ServiceProjectItem> originServiceProjectItems = serviceProjectItemMapper.selectList(itemLambdaQueryWrapper);
|
|
|
-
|
|
|
- if(!CollectionUtils.isEmpty(itemList))
|
|
|
- {
|
|
|
- //判断新增或者修改操作
|
|
|
- itemList.forEach(ls->{
|
|
|
- //修改
|
|
|
- if(null!=ls.getId())
|
|
|
- {
|
|
|
- if(ls.getProjectType()==2)
|
|
|
- {
|
|
|
- if(ls.getServiceCharge().compareTo(BigDecimal.ZERO)==1)
|
|
|
- {
|
|
|
- ls.setServiceCharge(ls.getServiceCharge()!=null?ls.getServiceCharge().negate():new BigDecimal("0"));
|
|
|
- }
|
|
|
- if(ls.getMatMoney().compareTo(BigDecimal.ZERO)==1)
|
|
|
- {
|
|
|
- ls.setMatMoney(ls.getMatMoney()!=null?ls.getMatMoney().negate():new BigDecimal("0"));
|
|
|
- }
|
|
|
- if(ls.getAmount().compareTo(BigDecimal.ZERO)==1)
|
|
|
- {
|
|
|
- ls.setAmount(ls.getAmount()!=null?ls.getAmount().negate():new BigDecimal("0"));
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- ls.setUpdateUser(SecureUtil.getUserId());
|
|
|
- ls.setUpdateTime(new Date());
|
|
|
- ls.setUpdateUserName(SecureUtil.getUser().getUserName());
|
|
|
- serviceProjectItemMapper.updateById(ls);
|
|
|
- }
|
|
|
- //新增
|
|
|
- else
|
|
|
- {
|
|
|
- if(ls.getProjectType()==2)
|
|
|
- {
|
|
|
- if(ls.getServiceCharge().compareTo(BigDecimal.ZERO)==1)
|
|
|
- {
|
|
|
- ls.setServiceCharge(ls.getServiceCharge()!=null?ls.getServiceCharge().negate():new BigDecimal("0"));
|
|
|
- }
|
|
|
- if(ls.getMatMoney().compareTo(BigDecimal.ZERO)==1)
|
|
|
- {
|
|
|
- ls.setMatMoney(ls.getMatMoney()!=null?ls.getMatMoney().negate():new BigDecimal("0"));
|
|
|
- }
|
|
|
- if(ls.getAmount().compareTo(BigDecimal.ZERO)==1)
|
|
|
- {
|
|
|
- ls.setAmount(ls.getAmount()!=null?ls.getAmount().negate():new BigDecimal("0"));
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- ls.setTenantId(AuthUtil.getTenantId());
|
|
|
- ls.setPId(serviceProject.getId());
|
|
|
- ls.setCreateTime(new Date());
|
|
|
- ls.setCreateUser(SecureUtil.getUserId());
|
|
|
- String deptId = SecureUtil.getDeptId();
|
|
|
- ls.setCreateDept(StringUtils.isNoneBlank(deptId)?Long.valueOf(deptId):-1);
|
|
|
- ls.setCreateUserName(SecureUtil.getUser().getUserName());
|
|
|
- serviceProjectItemMapper.insert(ls);
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- //判断文件列表新增或者修改操作
|
|
|
- if(!CollectionUtils.isEmpty(filesList))
|
|
|
- {
|
|
|
- filesList.forEach(ls->{
|
|
|
- //修改
|
|
|
- if(null!=ls.getId())
|
|
|
- {
|
|
|
- ls.setUpdateUser(SecureUtil.getUserId());
|
|
|
- ls.setUpdateTime(new Date());
|
|
|
- ls.setUpdateUserName(SecureUtil.getUser().getUserName());
|
|
|
- serviceProjectFilesMapper.updateById(ls);
|
|
|
- }
|
|
|
- //新增
|
|
|
- else
|
|
|
- {
|
|
|
- ls.setTenantId(AuthUtil.getTenantId());
|
|
|
- ls.setPId(serviceProject.getId());
|
|
|
- ls.setCreateTime(new Date());
|
|
|
- ls.setCreateUser(SecureUtil.getUserId());
|
|
|
- String deptId = SecureUtil.getDeptId();
|
|
|
- ls.setCreateDept(StringUtils.isNoneBlank(deptId)?Long.valueOf(deptId):-1);
|
|
|
- ls.setCreateUserName(SecureUtil.getUser().getUserName());
|
|
|
- serviceProjectFilesMapper.insert(ls);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- //查询原来的子项集合 与 传入的子项进行比较, 判断是否删除
|
|
|
- if(!CollectionUtils.isEmpty(originServiceProjectItems))
|
|
|
- {
|
|
|
- //先删除操作,开始比较id
|
|
|
- List<Long> oringinIds = originServiceProjectItems.stream().map(ServiceProjectItem::getId).collect(Collectors.toList());
|
|
|
- List<Long> newIds = itemList.stream().map(ServiceProjectItem::getId).collect(Collectors.toList());
|
|
|
- //id取交集,交集之外的id可以删除
|
|
|
- oringinIds.removeAll(newIds);
|
|
|
- if(!CollectionUtils.isEmpty(oringinIds))
|
|
|
- {
|
|
|
- //查询删除
|
|
|
- LambdaQueryWrapper<ServiceProjectItem> delete=new LambdaQueryWrapper<>();
|
|
|
- delete
|
|
|
- .eq(ServiceProjectItem::getPId,serviceProject.getId())
|
|
|
- .in(!CollectionUtils.isEmpty(oringinIds),ServiceProjectItem::getId,oringinIds);
|
|
|
- List<ServiceProjectItem> deleteList = serviceProjectItemMapper.selectList(delete);
|
|
|
- if(!CollectionUtils.isEmpty(deleteList))
|
|
|
- {
|
|
|
- deleteList.forEach(e->{
|
|
|
- e.setUpdateUser(SecureUtil.getUserId());
|
|
|
- e.setUpdateTime(new Date());
|
|
|
- e.setUpdateUserName(SecureUtil.getUser().getUserName());
|
|
|
- serviceProjectItemMapper.deleteById(e.getId());
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- //如果itemList为空,代表删除之前所有子项
|
|
|
- if(!CollectionUtils.isEmpty(originServiceProjectItems))
|
|
|
- {
|
|
|
- originServiceProjectItems.forEach(it->{
|
|
|
- it.setUpdateUser(SecureUtil.getUserId());
|
|
|
- it.setUpdateTime(new Date());
|
|
|
- it.setUpdateUserName(SecureUtil.getUser().getUserName());
|
|
|
- serviceProjectItemMapper.deleteById(it.getId());
|
|
|
+ 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("已收金额+未收金额≠合同总金额,请确认后提交");
|
|
|
+ }
|
|
|
+ R billNo = serialClient.getBillNo("ZY", "ZY", "ZY");
|
|
|
+ if (billNo.isSuccess()) {
|
|
|
+ serviceProject.setSysNo(billNo.getData().toString());
|
|
|
+ }
|
|
|
+ serviceProject.setTenantId(AuthUtil.getTenantId());
|
|
|
+ serviceProject.setCreateTime(new Date());
|
|
|
+ serviceProject.setCreateUser(SecureUtil.getUserId());
|
|
|
+ serviceProject.setCreateUserName(SecureUtil.getUser().getUserName());
|
|
|
+ serviceProjectMapper.insert(serviceProject);
|
|
|
+ if (!CollectionUtils.isEmpty(itemList)) {
|
|
|
+ itemList.forEach(e -> {
|
|
|
+ //如果是退费,需要取反
|
|
|
+ if (e.getProjectType() == 2) {
|
|
|
+ if (e.getServiceCharge().compareTo(BigDecimal.ZERO) == 1) {
|
|
|
+ e.setServiceCharge(e.getServiceCharge() != null ? e.getServiceCharge().negate() : new BigDecimal("0"));
|
|
|
+ }
|
|
|
+ if (e.getMatMoney().compareTo(BigDecimal.ZERO) == 1) {
|
|
|
+ e.setMatMoney(e.getMatMoney() != null ? e.getMatMoney().negate() : new BigDecimal("0"));
|
|
|
+ }
|
|
|
+ if (e.getAmount().compareTo(BigDecimal.ZERO) == 1) {
|
|
|
+ e.setAmount(e.getAmount() != null ? e.getAmount().negate() : new BigDecimal("0"));
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ e.setTenantId(AuthUtil.getTenantId());
|
|
|
+ e.setPId(serviceProject.getId());
|
|
|
+ e.setCreateTime(new Date());
|
|
|
+ e.setCreateUser(SecureUtil.getUserId());
|
|
|
+ e.setCreateUserName(SecureUtil.getUser().getUserName());
|
|
|
+ e.setTaskStatus(10);
|
|
|
+ serviceProjectItemMapper.insert(e);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!CollectionUtils.isEmpty(filesList)) {
|
|
|
+ filesList.forEach(e -> {
|
|
|
+ e.setTenantId(AuthUtil.getTenantId());
|
|
|
+ e.setPId(serviceProject.getId());
|
|
|
+ e.setCreateTime(new Date());
|
|
|
+ e.setCreateUser(SecureUtil.getUserId());
|
|
|
+ e.setCreateUserName(SecureUtil.getUser().getUserName());
|
|
|
+ serviceProjectFilesMapper.insert(e);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ //修改操作,则需要判断子项是否为新增、修改、删除
|
|
|
+ else {
|
|
|
+ //操作主表
|
|
|
+ serviceProjectMapper.updateById(serviceProject);
|
|
|
+ //操作字表,查询之前的子项记录
|
|
|
+ LambdaQueryWrapper<ServiceProjectItem> itemLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ itemLambdaQueryWrapper
|
|
|
+ .eq(ServiceProjectItem::getIsDeleted, 0)
|
|
|
+ .eq(ServiceProjectItem::getPId, serviceProject.getId());
|
|
|
+ List<ServiceProjectItem> originServiceProjectItems = serviceProjectItemMapper.selectList(itemLambdaQueryWrapper);
|
|
|
+
|
|
|
+ if (!CollectionUtils.isEmpty(itemList)) {
|
|
|
+ //判断新增或者修改操作
|
|
|
+ itemList.forEach(ls -> {
|
|
|
+ //修改
|
|
|
+ if (null != ls.getId()) {
|
|
|
+ if (ls.getProjectType() == 2) {
|
|
|
+ if (ls.getServiceCharge().compareTo(BigDecimal.ZERO) == 1) {
|
|
|
+ ls.setServiceCharge(ls.getServiceCharge() != null ? ls.getServiceCharge().negate() : new BigDecimal("0"));
|
|
|
+ }
|
|
|
+ if (ls.getMatMoney().compareTo(BigDecimal.ZERO) == 1) {
|
|
|
+ ls.setMatMoney(ls.getMatMoney() != null ? ls.getMatMoney().negate() : new BigDecimal("0"));
|
|
|
+ }
|
|
|
+ if (ls.getAmount().compareTo(BigDecimal.ZERO) == 1) {
|
|
|
+ ls.setAmount(ls.getAmount() != null ? ls.getAmount().negate() : new BigDecimal("0"));
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ ls.setUpdateUser(SecureUtil.getUserId());
|
|
|
+ ls.setUpdateTime(new Date());
|
|
|
+ ls.setUpdateUserName(SecureUtil.getUser().getUserName());
|
|
|
+ serviceProjectItemMapper.updateById(ls);
|
|
|
+ }
|
|
|
+ //新增
|
|
|
+ else {
|
|
|
+ if (ls.getProjectType() == 2) {
|
|
|
+ if (ls.getServiceCharge().compareTo(BigDecimal.ZERO) == 1) {
|
|
|
+ ls.setServiceCharge(ls.getServiceCharge() != null ? ls.getServiceCharge().negate() : new BigDecimal("0"));
|
|
|
+ }
|
|
|
+ if (ls.getMatMoney().compareTo(BigDecimal.ZERO) == 1) {
|
|
|
+ ls.setMatMoney(ls.getMatMoney() != null ? ls.getMatMoney().negate() : new BigDecimal("0"));
|
|
|
+ }
|
|
|
+ if (ls.getAmount().compareTo(BigDecimal.ZERO) == 1) {
|
|
|
+ ls.setAmount(ls.getAmount() != null ? ls.getAmount().negate() : new BigDecimal("0"));
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ ls.setTenantId(AuthUtil.getTenantId());
|
|
|
+ ls.setPId(serviceProject.getId());
|
|
|
+ ls.setCreateTime(new Date());
|
|
|
+ ls.setCreateUser(SecureUtil.getUserId());
|
|
|
+ String deptId = SecureUtil.getDeptId();
|
|
|
+ ls.setCreateDept(StringUtils.isNoneBlank(deptId) ? Long.valueOf(deptId) : -1);
|
|
|
+ ls.setCreateUserName(SecureUtil.getUser().getUserName());
|
|
|
+ serviceProjectItemMapper.insert(ls);
|
|
|
+ }
|
|
|
});
|
|
|
+
|
|
|
+ //判断文件列表新增或者修改操作
|
|
|
+ if (!CollectionUtils.isEmpty(filesList)) {
|
|
|
+ filesList.forEach(ls -> {
|
|
|
+ //修改
|
|
|
+ if (null != ls.getId()) {
|
|
|
+ ls.setUpdateUser(SecureUtil.getUserId());
|
|
|
+ ls.setUpdateTime(new Date());
|
|
|
+ ls.setUpdateUserName(SecureUtil.getUser().getUserName());
|
|
|
+ serviceProjectFilesMapper.updateById(ls);
|
|
|
+ }
|
|
|
+ //新增
|
|
|
+ else {
|
|
|
+ ls.setTenantId(AuthUtil.getTenantId());
|
|
|
+ ls.setPId(serviceProject.getId());
|
|
|
+ ls.setCreateTime(new Date());
|
|
|
+ ls.setCreateUser(SecureUtil.getUserId());
|
|
|
+ String deptId = SecureUtil.getDeptId();
|
|
|
+ ls.setCreateDept(StringUtils.isNoneBlank(deptId) ? Long.valueOf(deptId) : -1);
|
|
|
+ ls.setCreateUserName(SecureUtil.getUser().getUserName());
|
|
|
+ serviceProjectFilesMapper.insert(ls);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //查询原来的子项集合 与 传入的子项进行比较, 判断是否删除
|
|
|
+ if (!CollectionUtils.isEmpty(originServiceProjectItems)) {
|
|
|
+ //先删除操作,开始比较id
|
|
|
+ List<Long> oringinIds = originServiceProjectItems.stream().map(ServiceProjectItem::getId).collect(Collectors.toList());
|
|
|
+ List<Long> newIds = itemList.stream().map(ServiceProjectItem::getId).collect(Collectors.toList());
|
|
|
+ //id取交集,交集之外的id可以删除
|
|
|
+ oringinIds.removeAll(newIds);
|
|
|
+ if (!CollectionUtils.isEmpty(oringinIds)) {
|
|
|
+ //查询删除
|
|
|
+ LambdaQueryWrapper<ServiceProjectItem> delete = new LambdaQueryWrapper<>();
|
|
|
+ delete
|
|
|
+ .eq(ServiceProjectItem::getPId, serviceProject.getId())
|
|
|
+ .in(!CollectionUtils.isEmpty(oringinIds), ServiceProjectItem::getId, oringinIds);
|
|
|
+ List<ServiceProjectItem> deleteList = serviceProjectItemMapper.selectList(delete);
|
|
|
+ if (!CollectionUtils.isEmpty(deleteList)) {
|
|
|
+ deleteList.forEach(e -> {
|
|
|
+ e.setUpdateUser(SecureUtil.getUserId());
|
|
|
+ e.setUpdateTime(new Date());
|
|
|
+ e.setUpdateUserName(SecureUtil.getUser().getUserName());
|
|
|
+ serviceProjectItemMapper.deleteById(e.getId());
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //如果itemList为空,代表删除之前所有子项
|
|
|
+ if (!CollectionUtils.isEmpty(originServiceProjectItems)) {
|
|
|
+ originServiceProjectItems.forEach(it -> {
|
|
|
+ it.setUpdateUser(SecureUtil.getUserId());
|
|
|
+ it.setUpdateTime(new Date());
|
|
|
+ it.setUpdateUserName(SecureUtil.getUser().getUserName());
|
|
|
+ serviceProjectItemMapper.deleteById(it.getId());
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
- //检查明细总金额是否超过主表总金额
|
|
|
- LambdaQueryWrapper<ServiceProjectItem> itemLambdaQueryWrapper=new LambdaQueryWrapper();
|
|
|
- itemLambdaQueryWrapper.eq(ServiceProjectItem::getPId,serviceProject.getId());
|
|
|
+ }
|
|
|
+ //检查明细总金额是否超过主表总金额
|
|
|
+ LambdaQueryWrapper<ServiceProjectItem> itemLambdaQueryWrapper = new LambdaQueryWrapper();
|
|
|
+ itemLambdaQueryWrapper.eq(ServiceProjectItem::getPId, serviceProject.getId());
|
|
|
List<ServiceProjectItem> serviceProjectItems = serviceProjectItemMapper.selectList(itemLambdaQueryWrapper);
|
|
|
- //检查金额是否超额
|
|
|
+ //检查金额是否超额
|
|
|
//checkMoney(serviceProject.getId(),serviceProjectItems);
|
|
|
- //绑定主表对应的额度
|
|
|
+ //绑定主表对应的额度
|
|
|
BigDecimal totalServiceCharge = serviceProjectItems.stream().filter(e -> e.getServiceCharge() != null).map(ServiceProjectItem::getServiceCharge).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
BigDecimal totalMatMoney = serviceProjectItems.stream().filter(e -> e.getMatMoney() != null).map(ServiceProjectItem::getMatMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
BigDecimal totalCostReturn = serviceProjectItems.stream().filter(e -> e.getCostReturn() != null).map(ServiceProjectItem::getCostReturn).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
@@ -286,10 +248,9 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
|
|
|
|
|
|
@Override
|
|
|
@Transactional
|
|
|
- public synchronized R getSysNo()
|
|
|
- {
|
|
|
- R billNo = serialClient.getBillNo("XM","XM","XM");
|
|
|
- if (billNo.getCode() != 200){
|
|
|
+ public synchronized R getSysNo() {
|
|
|
+ R billNo = serialClient.getBillNo("XM", "XM", "XM");
|
|
|
+ if (billNo.getCode() != 200) {
|
|
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
throw new RuntimeException("生成系统编号失败");
|
|
|
}
|
|
|
@@ -298,22 +259,20 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
|
|
|
|
|
|
@Override
|
|
|
@Transactional
|
|
|
- public void updateItemStatus(Long itemId, int status,String accountName,String accountBank,String accountNo,Date payTime)
|
|
|
- {
|
|
|
+ public void updateItemStatus(Long itemId, int status, String accountName, String accountBank, String accountNo, Date payTime) {
|
|
|
ServiceProjectItem serviceProjectItem = serviceProjectItemMapper.selectById(itemId);
|
|
|
serviceProjectItem.setAccountBank(accountBank);
|
|
|
serviceProjectItem.setAccountName(accountName);
|
|
|
serviceProjectItem.setAccountNo(accountNo);
|
|
|
serviceProjectItem.setUpdateTime(new Date());
|
|
|
serviceProjectItem.setUpdateUser(SecureUtil.getUserId());
|
|
|
- if(serviceProjectItem==null)
|
|
|
- {
|
|
|
+ if (serviceProjectItem == null) {
|
|
|
throw new RuntimeException("请确认传入id正确");
|
|
|
}
|
|
|
//明细已请核之后, 修改主表的status状态为1
|
|
|
- if(status==1)
|
|
|
- { serviceProjectItem.setStatus(1);
|
|
|
- ServiceProject serviceProject=new ServiceProject();
|
|
|
+ if (status == 1) {
|
|
|
+ serviceProjectItem.setStatus(1);
|
|
|
+ ServiceProject serviceProject = new ServiceProject();
|
|
|
serviceProject.setStatus(1);
|
|
|
serviceProject.setId(serviceProjectItem.getPId());
|
|
|
serviceProject.setUpdateUser(SecureUtil.getUserId());
|
|
|
@@ -322,15 +281,14 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
|
|
|
serviceProjectMapper.updateById(serviceProject);
|
|
|
}
|
|
|
//明细已结算之后, 修改主表的已收款项 和 未收款项
|
|
|
- else if(status==5)
|
|
|
- {
|
|
|
+ else if (status == 5) {
|
|
|
serviceProjectItem.setStatus(5);
|
|
|
serviceProjectItem.setPayTime(payTime);
|
|
|
|
|
|
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());
|
|
|
@@ -339,8 +297,7 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
|
|
|
|
|
|
}
|
|
|
//撤回
|
|
|
- else if(status==6)
|
|
|
- {
|
|
|
+ else if (status == 6) {
|
|
|
ServiceProject targetServiceProject = serviceProjectMapper.selectById(serviceProjectItem.getPId());
|
|
|
//status=6代表撤回, item状态回到4
|
|
|
serviceProjectItem.setStatus(4);
|
|
|
@@ -352,10 +309,7 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
|
|
|
targetServiceProject.setUpdateTime(new Date());
|
|
|
targetServiceProject.setUpdateUserName(SecureUtil.getUser().getUserName());
|
|
|
serviceProjectMapper.updateById(targetServiceProject);
|
|
|
- }
|
|
|
-
|
|
|
- else
|
|
|
- {
|
|
|
+ } else {
|
|
|
serviceProjectItem.setStatus(status);
|
|
|
}
|
|
|
serviceProjectItemMapper.updateById(serviceProjectItem);
|
|
|
@@ -364,34 +318,27 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
|
|
|
|
|
|
@Override
|
|
|
@Transactional
|
|
|
- public void masterCheck(Long id,String url,String pageStatus,String pageLabel)
|
|
|
- {
|
|
|
+ public void masterCheck(Long id, String url, String pageStatus, String pageLabel) {
|
|
|
ServiceProject serviceProject = serviceProjectMapper.selectById(id);
|
|
|
- if(serviceProject==null)
|
|
|
- {
|
|
|
+ if (serviceProject == null) {
|
|
|
throw new SecurityException("清核失败:主营项目不存在或已被删除");
|
|
|
}
|
|
|
- if(serviceProject.getStatus()>0)
|
|
|
- {
|
|
|
+ if (serviceProject.getStatus() > 0) {
|
|
|
throw new SecurityException("清核失败:主营项目已开启审批,禁止重复提交");
|
|
|
}
|
|
|
//查询子表是否符合请核条件
|
|
|
- LambdaQueryWrapper<ServiceProjectItem> itemLambdaQueryWrapper=new LambdaQueryWrapper<>();
|
|
|
+ LambdaQueryWrapper<ServiceProjectItem> itemLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
itemLambdaQueryWrapper
|
|
|
- .eq(ServiceProjectItem::getPId,id)
|
|
|
- .eq(ServiceProjectItem::getIsDeleted,0);
|
|
|
+ .eq(ServiceProjectItem::getPId, id)
|
|
|
+ .eq(ServiceProjectItem::getIsDeleted, 0);
|
|
|
List<ServiceProjectItem> serviceProjectItems = serviceProjectItemMapper.selectList(itemLambdaQueryWrapper);
|
|
|
- if(!CollectionUtils.isEmpty(serviceProjectItems))
|
|
|
- {
|
|
|
+ if (!CollectionUtils.isEmpty(serviceProjectItems)) {
|
|
|
//存在一个未结算完成, 都不可以请核
|
|
|
boolean match = serviceProjectItems.stream().anyMatch(e -> e.getStatus() != 5);
|
|
|
- if(match)
|
|
|
- {
|
|
|
+ if (match) {
|
|
|
throw new SecurityException("清核失败:子表有未结算完成的数据");
|
|
|
}
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
+ } else {
|
|
|
throw new SecurityException("清核失败:未查询到子表结算信息");
|
|
|
}
|
|
|
|
|
|
@@ -399,18 +346,16 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
|
|
|
AuditPathsActs pathsActs = iCheckClient.getActsByActId(2, "check_status");
|
|
|
|
|
|
//没开启审批流直接走 通过流程
|
|
|
- if(pathsActs==null || pathsActs.getIsEnable()==2)
|
|
|
- {
|
|
|
+ if (pathsActs == null || pathsActs.getIsEnable() == 2) {
|
|
|
this.projectPassCheck(id);
|
|
|
}
|
|
|
//走审批流
|
|
|
- else
|
|
|
- {
|
|
|
+ else {
|
|
|
serviceProject.setStatus(1);
|
|
|
serviceProjectMapper.updateById(serviceProject);
|
|
|
//获取审批级次
|
|
|
List<AuditPathsLevels> auditPathsLevels = iCheckClient.listLevelsByActId(2, "status");
|
|
|
- AuditProecessDTO auditProecessDTO=new AuditProecessDTO();
|
|
|
+ AuditProecessDTO auditProecessDTO = new AuditProecessDTO();
|
|
|
//追加跳转路由url
|
|
|
auditProecessDTO.setUrl(url);
|
|
|
auditProecessDTO.setPageStatus(pageStatus);
|
|
|
@@ -426,8 +371,7 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
|
|
|
auditProecessDTO.setSendName(AuthUtil.getUserName());
|
|
|
auditProecessDTO.setSendTime(new Date());
|
|
|
R ServiceProcess = iCheckClient.createFinanceProcess(auditProecessDTO);
|
|
|
- if(!ServiceProcess.isSuccess())
|
|
|
- {
|
|
|
+ if (!ServiceProcess.isSuccess()) {
|
|
|
throw new SecurityException("操作失败,请联系管理员");
|
|
|
}
|
|
|
}
|
|
|
@@ -437,11 +381,9 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
|
|
|
|
|
|
@Override
|
|
|
@Transactional
|
|
|
- public void projectPassCheck(Long id)
|
|
|
- {
|
|
|
+ public void projectPassCheck(Long id) {
|
|
|
ServiceProject serviceProject = serviceProjectMapper.selectById(id);
|
|
|
- if(serviceProject==null)
|
|
|
- {
|
|
|
+ if (serviceProject == null) {
|
|
|
throw new SecurityException("操作失败:未查询到主营项目数据");
|
|
|
}
|
|
|
serviceProject.setStatus(3);
|
|
|
@@ -450,11 +392,9 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
|
|
|
|
|
|
@Override
|
|
|
@Transactional
|
|
|
- public void projectPassCancel(Long id)
|
|
|
- {
|
|
|
+ public void projectPassCancel(Long id) {
|
|
|
ServiceProject serviceProject = serviceProjectMapper.selectById(id);
|
|
|
- if(serviceProject==null)
|
|
|
- {
|
|
|
+ if (serviceProject == null) {
|
|
|
throw new SecurityException("操作失败:未查询到主营项目数据");
|
|
|
}
|
|
|
serviceProject.setStatus(0);
|
|
|
@@ -463,18 +403,15 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
|
|
|
|
|
|
@Override
|
|
|
@Transactional
|
|
|
- public void settleAccounts(Long id,int status, String accountName,String accountBank,Date payTime,String accountNo)
|
|
|
- {
|
|
|
+ public void settleAccounts(Long id, int status, String accountName, String accountBank, Date payTime, String accountNo) {
|
|
|
ServiceProjectItem serviceProjectItem = serviceProjectItemMapper.selectById(id);
|
|
|
serviceProjectItem.setAccountName(accountName);
|
|
|
serviceProjectItem.setAccountBank(accountBank);
|
|
|
serviceProjectItem.setAccountNo(accountNo);
|
|
|
serviceProjectItem.setPayTime(payTime);
|
|
|
|
|
|
- if(status==5)
|
|
|
- {
|
|
|
- if(serviceProjectItem.getStatus()==5)
|
|
|
- {
|
|
|
+ if (status == 5) {
|
|
|
+ if (serviceProjectItem.getStatus() == 5) {
|
|
|
throw new SecurityException("操作失败:此明细已完成结算,禁止重复提交");
|
|
|
}
|
|
|
//主营项目子表操作
|
|
|
@@ -491,11 +428,8 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
|
|
|
targetServiceProject.setUpdateTime(new Date());
|
|
|
targetServiceProject.setUpdateUserName(SecureUtil.getUser().getUserName());
|
|
|
serviceProjectMapper.updateById(targetServiceProject);
|
|
|
- }
|
|
|
- else if(status==6)
|
|
|
- {
|
|
|
- if(serviceProjectItem.getStatus()!=5)
|
|
|
- {
|
|
|
+ } else if (status == 6) {
|
|
|
+ if (serviceProjectItem.getStatus() != 5) {
|
|
|
throw new SecurityException("操作失败:此明细暂未结算,禁止撤回");
|
|
|
}
|
|
|
//status=6代表撤回, item状态回到4
|
|
|
@@ -517,15 +451,13 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public ServiceProject calculateServiceCharge(String tenantId, String year, Long corpId, Long createUser,String userName)
|
|
|
- {
|
|
|
- return serviceProjectItemMapper.calculateServiceCharge(tenantId,year,corpId,createUser,userName);
|
|
|
+ public ServiceProject calculateServiceCharge(String tenantId, String year, Long corpId, Long createUser, String userName) {
|
|
|
+ return serviceProjectItemMapper.calculateServiceCharge(tenantId, year, corpId, createUser, userName);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<ServiceProject> statisticalAnalysisOutData(String tenantId, Long year, Long corpId)
|
|
|
- {
|
|
|
- return serviceProjectItemMapper.statisticalAnalysisOutData(tenantId,year,corpId);
|
|
|
+ public List<ServiceProject> statisticalAnalysisOutData(String tenantId, Long year, Long corpId) {
|
|
|
+ return serviceProjectItemMapper.statisticalAnalysisOutData(tenantId, year, corpId);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -538,19 +470,98 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
|
|
|
return serviceProjectItemMapper.inactiveCorpList(tenantId, beginTime, endTime);
|
|
|
}
|
|
|
|
|
|
- public void checkMoney(Long serviceId,List<ServiceProjectItem> items)
|
|
|
- {
|
|
|
+ /**
|
|
|
+ * 派工接口
|
|
|
+ *
|
|
|
+ * @param serviceProject
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public int dispatch(ServiceProject serviceProject) {
|
|
|
+ List<ServiceProjectItem> itemList = serviceProject.getItemList();
|
|
|
+ Date date = new Date();
|
|
|
+ itemList.forEach(ls -> {
|
|
|
+ if (ObjectUtils.isNotNull(ls.getFrequency())) {
|
|
|
+ if (ObjectUtils.isNull(ls.getSecond())) {
|
|
|
+ ls.setSecond(1);
|
|
|
+ }
|
|
|
+ switch (ls.getFrequency()) {
|
|
|
+ case "1"://年
|
|
|
+ //服务费每月需缴纳
|
|
|
+ BigDecimal serviceCharge = ls.getServiceCharge().divide(new BigDecimal(ls.getSecond() * 12));
|
|
|
+ //合计金额每月需缴纳
|
|
|
+ BigDecimal amount = ls.getAmount().divide(new BigDecimal(ls.getSecond() * 12));
|
|
|
+ //成本每月需缴纳
|
|
|
+ BigDecimal matMoney = ls.getMatMoney().divide(new BigDecimal(ls.getSecond() * 12));
|
|
|
+ for (int i = 0; i < ls.getSecond() * 12; i++) {
|
|
|
+ //获取需求开始日期
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(ls.getBeginTime());
|
|
|
+ calendar.add(Calendar.MONTH, i);//设置月分
|
|
|
+ calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
|
|
|
+ Date date1 = calendar.getTime();
|
|
|
+
|
|
|
+ //获取提醒日期
|
|
|
+ Calendar reminderCalendar = Calendar.getInstance();
|
|
|
+ Date reminderDate;
|
|
|
+ //判断提醒日期是否为空 空默认每月一日为提醒日期 否则 每月提醒日期为当前日
|
|
|
+ if (ObjectUtils.isNotNull(ls.getReminderDay())) {
|
|
|
+ reminderCalendar.setTime(ls.getReminderDay());
|
|
|
+ calendar.add(Calendar.MONTH, i);//设置月分
|
|
|
+ reminderDate = calendar.getTime();
|
|
|
+ } else {
|
|
|
+ calendar.setTime(date);
|
|
|
+ calendar.add(Calendar.MONTH, i);//设置月分
|
|
|
+ calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
|
|
|
+ reminderDate = calendar.getTime();
|
|
|
+ }
|
|
|
+
|
|
|
+ ls.setServiceCharge(serviceCharge);
|
|
|
+ ls.setAmount(amount);
|
|
|
+ ls.setMatMoney(matMoney);
|
|
|
+ ls.setBeginTime(date1);
|
|
|
+ ls.setReminderDay(reminderDate);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ case "2"://半年
|
|
|
+ for (int i = 0; i < ls.getSecond() * 6; i++) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ case "3"://季度
|
|
|
+ for (int i = 0; i < ls.getSecond() * 3; i++) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ case "4"://月
|
|
|
+ for (int i = 0; i < ls.getSecond() * 1; i++) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ case "5"://次
|
|
|
+ for (int i = 0; i < ls.getSecond(); i++) {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ 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("操作失败,明细总金额大于合同金额");
|
|
|
+ if (decimal.compareTo(debitAmount) == 1) {
|
|
|
+ throw new RuntimeException("操作失败,明细总金额大于合同金额");
|
|
|
}
|
|
|
}
|
|
|
|