Selaa lähdekoodia

Merge remote-tracking branch 'origin/dev1.0' into dev1.0

liutao 5 kuukautta sitten
vanhempi
commit
728cf9d3a3

+ 27 - 0
src/main/java/com/sunxung/factoring/component/util/FileUtil.java

@@ -289,4 +289,31 @@ public class FileUtil {
         }
     }
 
+    public static void downloadPdfFile(HttpServletResponse response, File file, String fileName) {
+        OutputStream out = null;
+        BufferedInputStream inputStream = null;
+        try {
+            response.setHeader("Content-Type", "application/vnd.ms-exce");
+            response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
+            response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
+            out = response.getOutputStream();
+            inputStream = new BufferedInputStream(new FileInputStream(file));
+            byte[] buffer = new byte[1024];
+            while ((inputStream.read(buffer)) > 0) {
+                out.write(buffer);
+                out.flush();
+            }
+
+        } catch (Exception e) {
+            throw new BusinessException(CodeUtil.FAIL, "下载失败!");
+        } finally {
+            try {
+                inputStream.close();
+                out.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
 }

+ 7 - 0
src/main/java/com/sunxung/factoring/mapper/sys/FileStorageMapper.java

@@ -35,4 +35,11 @@ public interface FileStorageMapper {
     List<Long> selectInvalidFileStorage();
 
     void updateBusinessId(@Param("fileId")Long fileId, @Param("businessId")Long businessId);
+
+    /**
+     * 通过绝对路径查询文件信息
+     * @param absolutePath
+     * @return
+     */
+    List<FileStorage> findByAbsolutePath(String absolutePath);
 }

+ 48 - 56
src/main/java/com/sunxung/factoring/service/ledger/impl/LedgerManagementServiceImpl.java

@@ -1196,47 +1196,40 @@ public class LedgerManagementServiceImpl implements LedgerManagementService {
                                 //说明管理费分多了,需要将多的退掉
                                 unAssignManagement = refundManagement.negate();
                                 //删除未分配的管理费
-                                deleteUnAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
+                                deleteUnAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo, null);
                                 //将部分分配的管理费计划金额改为实收金额
                                 updatePartAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
                             } else if (refundManagement.compareTo(BigDecimal.ZERO) == 0) {
                                 //说明管理费正好,只需要处理未完成的计划
                                 //删除未分配的管理费
-                                deleteUnAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
+                                deleteUnAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo, null);
                                 //将部分分配的管理费计划金额改为实收金额
                                 updatePartAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
                             } else if (refundManagement.compareTo(BigDecimal.ZERO) < 0) {
                                 //说明管理费还需要补
                                 BigDecimal toAssignManagement = refundManagement.negate();
                                 if (assignAmount.compareTo(BigDecimal.ZERO) > 0) {
-                                    if (assignAmount.compareTo(toAssignManagement) >= 0) {
-                                        //说明本次分的钱可以把管理费分完,增加一条管理费分配记录
-                                        if (goodsAssignVo.getHasAssignInterest()) {
-                                            //如果本次选择分管理费
+                                    //这种场景可能存在未分配的管理费,要删除分账日期之前的状态为计划中的数据
+                                    deleteUnAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo, ledgerDate);
+                                    //判断是否需要分配
+                                    if (goodsAssignVo.getHasAssignInterest()) {
+                                        if (assignAmount.compareTo(toAssignManagement) >= 0) {
                                             ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, toAssignManagement, toAssignManagement,
                                                     IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
                                             financingManagementFee = financingManagementFee.add(toAssignManagement);
                                             assignAmount = assignAmount.subtract(toAssignManagement);
-                                        } else {
-                                            //如果本次选择不分管理费
-                                            ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, toAssignManagement, BigDecimal.ZERO,
-                                                    IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
-                                        }
-                                    } else if (assignAmount.compareTo(toAssignManagement) < 0) {
-                                        //说明本次分的钱把管理费分不完,增加一条管理费分配记录
-                                        if (goodsAssignVo.getHasAssignInterest()) {
-                                            //如果本次选择分管理费
+                                        } else if (assignAmount.compareTo(toAssignManagement) < 0) {
                                             ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, assignAmount, assignAmount,
                                                     IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
                                             financingManagementFee = financingManagementFee.add(assignAmount);
+                                            //剩余未分配管理费
+                                            unAssignManagement = toAssignManagement.subtract(assignAmount);
                                             assignAmount = BigDecimal.ZERO;
-                                        } else {
-                                            //如果本次选择不分管理费
-                                            ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, assignAmount, BigDecimal.ZERO,
-                                                    IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
                                         }
-                                        //剩余未分配管理费
-                                        unAssignManagement = toAssignManagement.subtract(assignAmount);
+                                    } else {
+                                        //如果本次选择不分管理费
+                                        ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, toAssignManagement, BigDecimal.ZERO,
+                                                IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
                                     }
                                 }
                             }
@@ -1249,46 +1242,41 @@ public class LedgerManagementServiceImpl implements LedgerManagementService {
                                 //说明利息分多了,需要将多的退掉
                                 unAssignInterest = refundInterest.negate();
                                 //删除未分配的利息
-                                deleteUnAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
+                                deleteUnAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo, null);
                                 //将部分分配的利息计划金额改为实收金额
                                 updatePartAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
                             } else if (refundInterest.compareTo(BigDecimal.ZERO) == 0) {
                                 //删除未分配的利息
-                                deleteUnAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
+                                deleteUnAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo, null);
                                 //将部分分配的利息计划金额改为实收金额
                                 updatePartAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
                             } else if (refundInterest.compareTo(BigDecimal.ZERO) < 0) {
                                 //说明利息还需要补
                                 BigDecimal toAssignInterest = refundInterest.negate();
                                 if (assignAmount.compareTo(BigDecimal.ZERO) > 0) {
-                                    if (assignAmount.compareTo(toAssignInterest) >= 0) {
-                                        //说明本次分的钱可以把管理费分完,增加一条利息分配记录(应分=实分)
-                                        if (goodsAssignVo.getHasAssignInterest()) {
+                                    //这种场景可能存在未分配的管理费,要删除分账日期之前的状态为计划中的数据
+                                    deleteUnAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo, ledgerDate);
+                                    //判断是否需要分配
+                                    if (goodsAssignVo.getHasAssignInterest()) {
+                                        //如果需要分配利息
+                                        if (assignAmount.compareTo(toAssignInterest) >= 0) {
                                             ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, toAssignInterest, toAssignInterest,
                                                     IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
                                             financeInterest = financeInterest.add(toAssignInterest);
                                             assignAmount = assignAmount.subtract(toAssignInterest);
-                                        } else {
-                                            ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, toAssignInterest, BigDecimal.ZERO,
-                                                    IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
-                                        }
-                                    } else if (assignAmount.compareTo(toAssignInterest) < 0) {
-                                        //说明本次分的钱把管理费分不完,增加一条利息分配记录(应分>实分)
-                                        if (goodsAssignVo.getHasAssignInterest()) {
-                                            //如果本次选择分利息
+                                        } else if (assignAmount.compareTo(toAssignInterest) < 0) {
                                             ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, assignAmount, assignAmount,
                                                     IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
                                             financeInterest = financeInterest.add(assignAmount);
+                                            //剩余未分配利息
+                                            unAssignInterest = toAssignInterest.subtract(assignAmount);
                                             assignAmount = BigDecimal.ZERO;
-                                        } else {
-                                            //如果选择不分利息
-                                            ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, assignAmount, BigDecimal.ZERO,
-                                                    IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
                                         }
-                                        //剩余未分配利息
-                                        unAssignInterest = toAssignInterest.subtract(assignAmount);
+                                    } else {
+                                        //如果不分配利息
+                                        ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, toAssignInterest, BigDecimal.ZERO,
+                                                IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
                                     }
-
                                 }
                             }
                             if (assignAmount.compareTo(BigDecimal.ZERO) > 0) {
@@ -1350,14 +1338,14 @@ public class LedgerManagementServiceImpl implements LedgerManagementService {
                             }
                             if (returnedAmount.compareTo(BigDecimal.ZERO) == 0) {
                                 //说明此分配本金已经分完了
-                                if (unAssignInterest.compareTo(BigDecimal.ZERO) != 0) {
+                                if (unAssignInterest.compareTo(BigDecimal.ZERO) < 0) {
                                     //将之前未分配的利息分完
-                                    ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, unAssignInterest, unAssignInterest,
+                                    ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, unAssignInterest, BigDecimal.ZERO,
                                             IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
                                 }
-                                if (unAssignManagement.compareTo(BigDecimal.ZERO) != 0) {
+                                if (unAssignManagement.compareTo(BigDecimal.ZERO) < 0) {
                                     //将之前未分配的管理费分完
-                                    ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, unAssignManagement, unAssignManagement,
+                                    ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, unAssignManagement, BigDecimal.ZERO,
                                             IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
                                 }
                             } else if (returnedAmount.compareTo(BigDecimal.ZERO) > 0) {
@@ -1384,9 +1372,7 @@ public class LedgerManagementServiceImpl implements LedgerManagementService {
                                 if (surplusInterest.compareTo(BigDecimal.ZERO) != 0) {
                                     PaymentCollectionPlanFactoring lastInterestFactoring = getLastPrincipalFactoring(allPlanFactoringList, interestDict, lastPlanDate);
                                     if (lastInterestFactoring == null) {
-                                        //这种场景可能存在未分配的利息,要删除
-                                        deleteUnAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
-                                        ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, surplusInterest, BigDecimal.ZERO,
+                                        ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(lastPlanDate, surplusInterest, BigDecimal.ZERO,
                                                 IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
                                     } else {
                                         lastInterestFactoring.setAmount(surplusInterest);
@@ -1411,9 +1397,7 @@ public class LedgerManagementServiceImpl implements LedgerManagementService {
                                 if (surplusManagement.compareTo(BigDecimal.ZERO) != 0) {
                                     PaymentCollectionPlanFactoring lastManagementFactoring = getLastPrincipalFactoring(allPlanFactoringList, managementFeeDict, lastPlanDate);
                                     if (lastManagementFactoring == null) {
-                                        //这种场景可能存在未分配的管理费,要删除
-                                        deleteUnAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
-                                        ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, surplusManagement, BigDecimal.ZERO,
+                                        ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(lastPlanDate, surplusManagement, BigDecimal.ZERO,
                                                 IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
                                     } else {
                                         lastManagementFactoring.setAmount(surplusManagement);
@@ -1955,12 +1939,20 @@ public class LedgerManagementServiceImpl implements LedgerManagementService {
      *
      * @param planFactoringList
      */
-    private void deleteUnAssignList(List<PaymentCollectionPlanFactoring> planFactoringList,
-                                    List<LedgerPlanFactoringAssign> ledgerPlanFactoringAssignList, LedgerFundGoodsAssign goodsAssign) {
+    private void deleteUnAssignList(List<PaymentCollectionPlanFactoring> planFactoringList, List<LedgerPlanFactoringAssign> ledgerPlanFactoringAssignList,
+                                    LedgerFundGoodsAssign goodsAssign, Date ledgerDate) {
         if (CollectionUtil.isNotEmpty(planFactoringList)) {
-            //退款的数据虽然没有实际收付但也不能删除
-            planFactoringList.stream().filter(p -> CollectionUtil.isEmpty(p.getAmountAllocationList()) && p.getAmount().compareTo(BigDecimal.ZERO) > 0)
-                    .forEach(p -> ledgerPlanFactoringAssignList.add(addPlanFactoringDeleteAssign(p, goodsAssign, 0)));
+            if (ledgerDate == null) {
+                //退款的数据虽然没有实际收付但也不能删除
+                planFactoringList.stream().filter(p -> CollectionUtil.isEmpty(p.getAmountAllocationList()) && p.getAmount().compareTo(BigDecimal.ZERO) > 0)
+                        .forEach(p -> ledgerPlanFactoringAssignList.add(addPlanFactoringDeleteAssign(p, goodsAssign, 0)));
+            } else {
+                //退款的数据虽然没有实际收付但也不能删除
+                planFactoringList.stream().filter(p -> CollectionUtil.isEmpty(p.getAmountAllocationList())
+                                && p.getAmount().compareTo(BigDecimal.ZERO) > 0 && DateUtil.beginOfDay(p.getPlanDate()).compareTo(ledgerDate) <= 0)
+                        .forEach(p -> ledgerPlanFactoringAssignList.add(addPlanFactoringDeleteAssign(p, goodsAssign, 0)));
+            }
+
         }
     }
 

+ 7 - 0
src/main/java/com/sunxung/factoring/service/sys/FileStorageService.java

@@ -188,4 +188,11 @@ public interface FileStorageService {
     List<FileStorage> saveFileStorage(List<Long> fileIds);
 
     void updateBusinessId(Long fileId, Long businessId);
+
+    /**
+     * 通过绝对路径查询文件信息
+     * @param absolutePath
+     * @return
+     */
+    List<FileStorage> findByAbsolutePath(String absolutePath);
 }

+ 4 - 0
src/main/java/com/sunxung/factoring/service/sys/impl/FileStorageServiceImpl.java

@@ -640,5 +640,9 @@ public class FileStorageServiceImpl implements FileStorageService {
         }
     }
 
+    @Override
+    public List<FileStorage> findByAbsolutePath(String absolutePath) {
+        return fileStorageMapper.findByAbsolutePath(absolutePath);
+    }
 
 }

+ 20 - 1
src/main/java/com/sunxung/factoring/web/sys/FileStorageController.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.sunxung.factoring.component.annotation.OperationLog;
 import com.sunxung.factoring.component.enums.OperationTypeEnum;
+import com.sunxung.factoring.component.util.CollectionUtil;
 import com.sunxung.factoring.component.util.FileUtil;
 import com.sunxung.factoring.component.util.StringUtil;
 import com.sunxung.factoring.component.util.onlineConverter.OfficeConverterUtil;
@@ -12,6 +13,8 @@ import com.sunxung.factoring.component.util.onlineConverter.TextConverterPdfUtil
 import com.sunxung.factoring.dict.impl.FileModuleDict;
 import com.sunxung.factoring.entity.ResponseJson;
 import com.sunxung.factoring.entity.sys.FileStorage;
+import com.sunxung.factoring.entity.sys.FileStorageDO;
+import com.sunxung.factoring.service.sys.FileService;
 import com.sunxung.factoring.service.sys.FileStorageService;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.LogManager;
@@ -52,6 +55,9 @@ public class FileStorageController {
     @Value("${localhost}")
     private String localhost;
 
+    @Autowired
+    private FileService fileService;
+
     @RequestMapping(value = "/fileStorage/imgUpload")
     @ResponseBody
     public Map<String, Object> imgUpload(HttpServletRequest req) {
@@ -328,9 +334,22 @@ public class FileStorageController {
     @GetMapping("/fileStorage/downloadPdfFile")
     public void downloadFile(String absolutePath, HttpServletResponse response) {
         if (absolutePath != null) {
+            String fileName = "下载文件";
+            List<FileStorage> fileStorageList = fileStorageService.findByAbsolutePath(absolutePath);
+            if (CollectionUtil.isNotEmpty(fileStorageList)){
+                fileName = fileStorageList.get(0).getOriginalName();
+            }else {
+                List<FileStorageDO> fileStorageDOList = fileService.lambdaQuery().eq(FileStorageDO::getAbsolutePath, absolutePath).list();
+                if (CollectionUtil.isNotEmpty(fileStorageDOList)){
+                    fileName = fileStorageDOList.get(0).getOriginalName();
+                }
+            }
+
             File file = new File(absolutePath);
-            FileUtil.downloadPdfFile(response, file);
+
+            FileUtil.downloadPdfFile(response, file, fileName);
         }
+    
     }
 
 }

+ 4 - 0
src/main/resources/mapper/sys/FileStorageMapper.xml

@@ -78,4 +78,8 @@
 		update t_file_storage set belongId = #{businessId}
 		where id = #{fileId}
 	</update>
+
+	<select id="findByAbsolutePath" resultType="com.sunxung.factoring.entity.sys.FileStorage">
+		select * from t_file_storage where absolutePath=#{value}
+	</select>
 </mapper>