Browse Source

合同应收和余额计算

ljy121 1 year ago
parent
commit
8a00ec6c7f

+ 18 - 0
zjugis-business/src/main/java/com/zjugis/business/bean/dto/AmountDto.java

@@ -0,0 +1,18 @@
+package com.zjugis.business.bean.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author ljy
+ * @version 1.0
+ * @date 2024/3/6 9:26
+ */
+@Data
+public class AmountDto {
+
+    private BigDecimal invoiceAmount;
+
+    private BigDecimal returnAmount;
+}

+ 8 - 1
zjugis-business/src/main/java/com/zjugis/business/controller/ContractController.java

@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
@@ -94,9 +95,15 @@ public class ContractController {
         List<Contract> contracts = page.getRecords();
 
         List<ContractExcelResponse> excelList = new ArrayList<>(contracts.size());
-        contracts.forEach(contract -> {
+            contracts.forEach(contract -> {
             ContractExcelResponse contractExcelResponse = new ContractExcelResponse();
             BeanUtils.copyProperties(contract,contractExcelResponse);
+            contractExcelResponse.setContractAmount(contract.getVirtualAmount());
+            contractExcelResponse.setInvoicedAmount(contract.getInvoicedAmount());
+            BigDecimal ratio = contract.getContractAmount().compareTo(BigDecimal.ZERO) > 0?contract.getVirtualAmount().divide(contract.getContractAmount()) : BigDecimal.ZERO;
+            contractExcelResponse.setReceivedAmount(contract.getReceivedAmount().multiply(ratio));
+            contractExcelResponse.setReceivableAmount(contract.getReceivableAmount().multiply(ratio));
+            contractExcelResponse.setContractBalance(contract.getContractBalance().multiply(ratio));
             excelList.add(contractExcelResponse);
         });
         response.setContentType("multipart/form-data");

+ 3 - 0
zjugis-business/src/main/java/com/zjugis/business/mapper/ContractMapper.java

@@ -1,6 +1,7 @@
 package com.zjugis.business.mapper;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zjugis.business.bean.dto.AmountDto;
 import com.zjugis.business.bean.dto.ContractDto;
 import com.zjugis.business.bean.entity.Contract;
 import com.zjugis.framework.mybatis.core.mapper.BaseMapperX;
@@ -21,4 +22,6 @@ public interface ContractMapper extends BaseMapperX<Contract> {
     Page<Contract> page(Page<Contract> page, @Param("params")ContractDto contractDto);
 
     int relContractSize(String projectId);
+
+    AmountDto selectReceivableAmount(String contractId);
 }

+ 4 - 0
zjugis-business/src/main/java/com/zjugis/business/service/ContractInvoiceService.java

@@ -6,6 +6,8 @@ import com.zjugis.business.bean.entity.ContractInvoice;
 import com.zjugis.business.bean.response.ContractInvoiceRespense;
 import com.zjugis.business.bean.response.ContractInvoiceStaticsRespense;
 
+import java.util.List;
+
 /**
  * 开票表服务接口
  *
@@ -25,5 +27,7 @@ public interface ContractInvoiceService {
     int delById(String id);
 
     String process(String contractId);
+
+    List<ContractInvoice> selectByContractId(String id);
 }
 

+ 3 - 0
zjugis-business/src/main/java/com/zjugis/business/service/ContractService.java

@@ -1,6 +1,7 @@
 package com.zjugis.business.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zjugis.business.bean.dto.AmountDto;
 import com.zjugis.business.bean.dto.ContractDto;
 import com.zjugis.business.bean.entity.Contract;
 import com.zjugis.business.bean.request.ContractRequest;
@@ -45,4 +46,6 @@ public interface ContractService{
     String subcontract(String contractId);
 
     String outsourcing(String contractId);
+
+    AmountDto selectReceivableAmount(String contractId);
 }

+ 12 - 0
zjugis-business/src/main/java/com/zjugis/business/service/impl/ContractInvoiceServiceImpl.java

@@ -23,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDate;
+import java.util.List;
 
 import static com.zjugis.business.constants.ResponseStatusEnum.CONTRACT_NOT_EXIST;
 
@@ -116,5 +117,16 @@ public class ContractInvoiceServiceImpl implements ContractInvoiceService {
         insert(invoice);
         return returnUrl;
     }
+
+    /**
+     * @param id
+     * @return
+     */
+    @Override
+    public List<ContractInvoice> selectByContractId(String id) {
+        QueryWrapper<ContractInvoice> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("CONTRACT_ID",id).eq("FLOW_STATUS",90);
+        return contractInvoiceMapper.selectList(queryWrapper);
+    }
 }
 

+ 2 - 0
zjugis-business/src/main/java/com/zjugis/business/service/impl/ContractReturnMoneyServiceImpl.java

@@ -105,5 +105,7 @@ public class ContractReturnMoneyServiceImpl implements ContractReturnMoneyServic
             contractReturnMoneyMapper.insertBatch(returnMoneyList);
         }
     }
+
+
 }
 

+ 10 - 0
zjugis-business/src/main/java/com/zjugis/business/service/impl/ContractServiceImpl.java

@@ -3,6 +3,7 @@ package com.zjugis.business.service.impl;
 import com.alibaba.excel.util.StringUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zjugis.business.bean.dto.AmountDto;
 import com.zjugis.business.bean.dto.ContractDto;
 import com.zjugis.business.bean.entity.Contract;
 import com.zjugis.business.bean.request.ContractRequest;
@@ -200,6 +201,15 @@ public class ContractServiceImpl implements ContractService{
         return returnUrl;
     }
 
+    /**
+     * @param contractId
+     * @return
+     */
+    @Override
+    public AmountDto selectReceivableAmount(String contractId) {
+        return contractMapper.selectReceivableAmount(contractId);
+    }
+
 
     /**
      * @param projectId

+ 26 - 2
zjugis-business/src/main/java/com/zjugis/business/service/impl/ProjectServiceImpl.java

@@ -2,6 +2,7 @@ package com.zjugis.business.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zjugis.business.bean.dto.AmountDto;
 import com.zjugis.business.bean.dto.ProjectDto;
 import com.zjugis.business.bean.entity.Contract;
 import com.zjugis.business.bean.entity.Project;
@@ -12,6 +13,8 @@ import com.zjugis.business.bean.response.ProjectResponse;
 import com.zjugis.business.bean.response.SumResponse;
 import com.zjugis.business.mapper.ContractMapper;
 import com.zjugis.business.mapper.ProjectMapper;
+import com.zjugis.business.service.ContractInvoiceService;
+import com.zjugis.business.service.ContractReturnMoneyService;
 import com.zjugis.business.service.ContractService;
 import com.zjugis.business.service.ProjectService;
 import com.zjugis.framework.workflow.rpc.remote.WorkflowClient;
@@ -46,6 +49,12 @@ public class ProjectServiceImpl implements ProjectService {
     @Autowired
     ContractService contractService;
 
+    @Autowired
+    ContractInvoiceService contractInvoiceService;
+
+    @Autowired
+    ContractReturnMoneyService contractReturnMoneyService;
+
     @Autowired
     ContractMapper contractMapper;
 
@@ -109,6 +118,9 @@ public class ProjectServiceImpl implements ProjectService {
         ProjectResponse parent = projects.get(0);
         Contract contract = contractService.selectMainByProject(parent.getId());
         parent.setContractAmount(contract.getContractAmount());
+        AmountDto amountDto =  contractService.selectReceivableAmount(contract.getId());
+        parent.setReceivableAmount(amountDto.getInvoiceAmount().subtract(amountDto.getReturnAmount()));
+        parent.setContractBalance(contract.getContractAmount().subtract(parent.getReceivableAmount()).subtract(amountDto.getReturnAmount()));
         projects.remove(0);
         parent.setChildren(projects);
         return parent;
@@ -151,12 +163,24 @@ public class ProjectServiceImpl implements ProjectService {
 
     private void updateVirtualContract(Project child) {
         Contract contract = new Contract();
+        String pid = child.getPid();
+        Contract mainContract = contractService.selectMainByProject(pid);
         contract.setProjectId(child.getId());
         contract.setVirtualAmount(child.getOutputValue());
+        contract.setContractAmount(mainContract.getContractAmount());
+        contract.setContractNumber(mainContract.getContractNumber());
+        contract.setName(mainContract.getName());
+        contract.setSignWay(mainContract.getSignWay());
+        contract.setIsSign(mainContract.getIsSign());
+        contract.setMainType(mainContract.getMainType());
+        contract.setSecondType(mainContract.getSecondType());
+        contract.setAmountStatus(mainContract.getAmountStatus());
+        contract.setAssigneeName(mainContract.getAssigneeName());
+        contract.setContractOn(mainContract.getContractOn());
+        contract.setContractOff(mainContract.getContractOff());
+
         contractService.insert(contract);
-        String pid = child.getPid();
         BigDecimal childrenOutput = projectMapper.selectChildrenOutputValue(pid);
-        Contract mainContract = contractService.selectMainByProject(pid);
         if(mainContract != null){
             BigDecimal mainAmount = mainContract.getContractAmount().subtract(childrenOutput);
             mainContract.setVirtualAmount(mainAmount);

+ 21 - 0
zjugis-business/src/main/resources/mapper/oracle/ContractMapper.xml

@@ -76,4 +76,25 @@
     <select id="relContractSize" resultType="int">
         SELECT count(1) FROM CONTRACT WHERE PROJECT_ID = #{projectId,jdbcType=VARCHAR} and (PARENT_ID = '' or PARENT_ID IS NULL) and ISVALID = 1 and FLOW_STATUS = 90
     </select>
+
+    <select id="selectReceivableAmount" resultType="com.zjugis.business.bean.dto.AmountDto">
+        SELECT
+            NVL(SUM(t.INVOICE_AMOUNT), 0) AS invoiceAmount,
+            NVL(SUM(r.RETURN_AMOUNT), 0) AS returnAmount
+        FROM
+            CONTRACT_INVOICE t
+                LEFT JOIN
+            (
+                SELECT
+                    CONTRACT_INVOICE_ID,
+                    NVL(sum(RETURN_AMOUNT),0) as RETURN_AMOUNT
+                FROM
+                    CONTRACT_RETURN_MONEY
+                WHERE ISVALID = 1
+                GROUP BY CONTRACT_INVOICE_ID
+            ) r ON t.ID = r.CONTRACT_INVOICE_ID
+        WHERE
+            t.CONTRACT_ID = #{contractId,jdbcType=VARCHAR}
+            AND t.ISVALID = 1 AND t.FLOW_STATUS = 90
+    </select>
 </mapper>

+ 2 - 2
zjugis-workflow/src/main/java/com/zjugis/z_workflow/service/ProcessEngineService.java

@@ -504,7 +504,7 @@ public class ProcessEngineService {
 		List<NextActivityDto> nextActivitys = Lists.newArrayList();
 		List<DirectionsDto> directions = flowDesignJsonDto.getDirections();//流向数据
 		List<NodesDto> nodes = flowDesignJsonDto.getNodes();//节点数据
-		if (nodes.size() == 0) {
+		if (nodes.isEmpty()) {
 			return nextActivitys;
 		}
 		//判断是否分支退件活动
@@ -513,7 +513,7 @@ public class ProcessEngineService {
 					.eq(ISendBackRecord::getBackToActivityId, activityIns.getId()).eq(ISendBackRecord::getiBranchReturn,1));
 			if (sendBackRecord != null) {
 				nodes = nodes.stream().filter(t -> sendBackRecord.getbBackActiTemId().equals(t.getId())).collect(Collectors.toList());
-				if (nodes.size() == 0) {
+				if (nodes.isEmpty()) {
 					return nextActivitys;
 				}
 			}