Ver Fonte

结算功能修改

zhangchen há 4 meses atrás
pai
commit
155bbe97a1

+ 6 - 3
alien-store/src/main/java/shop/alien/store/controller/StoreIncomeDetailsRecordController.java

@@ -61,10 +61,13 @@ public class StoreIncomeDetailsRecordController {
     @GetMapping("/approveCashOut")
     public R<Boolean> approveCashOut(Integer cashOutId, String approveStatus, String failReason) {
         String s = storeIncomeDetailsRecordService.approveCashOut(cashOutId, approveStatus, failReason);
-        if ("success".equals(s)) {
-            return R.success("提现成功");
+        if ("付款失败".equals(s)) {
+            return R.fail("付款失败");
+        } else if("付款状态异常".equals(s)){
+            return R.fail("付款状态异常");
+        } else {
+            return R.success(s);
         }
-        return R.fail(s);
     }
 
     @ApiOperation("新增收入-手续费一单一算")

+ 53 - 11
alien-store/src/main/java/shop/alien/store/service/impl/ManagementInfoServiceImpl.java

@@ -10,16 +10,20 @@ import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.ClassPathResource;
 import org.springframework.stereotype.Service;
 import shop.alien.entity.store.*;
 import shop.alien.entity.store.vo.ManagementInfoVo;
 import shop.alien.mapper.*;
 import shop.alien.store.service.ManagementInfoService;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
+import shop.alien.util.ali.AliOSSUtil;
+
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.time.*;
@@ -53,6 +57,8 @@ public class ManagementInfoServiceImpl implements ManagementInfoService {
 
     private final StoreUserMapper storeUserMapper;
 
+    private final AliOSSUtil aliOSSUtil;
+
     @Override
     public IPage<ManagementInfo> getAllManagementInfo(int pageNo, int pageSize, String storeName) {
         IPage<LifeDiscountCoupon> iPage = new Page<>(pageNo, pageSize);
@@ -504,7 +510,16 @@ public class ManagementInfoServiceImpl implements ManagementInfoService {
     }
 
     public String generateReceiptFile(String storeName, String storeAccount, String storePhone, String invoiceAmount, String amountPaid, String paymentTime, String fileName) {
-        String filePath = "";
+        String filePath = excelPath + excelGeneratePath + fileName + ".xlsx";
+        String osName = System.getProperty("os.name").toLowerCase();
+        if (osName.contains("win")) {
+            filePath = "d:/" + filePath;
+            String substring = filePath.substring(0, filePath.lastIndexOf("/"));
+            File dir = new File(substring);
+            if (!dir.exists()) {
+                dir.mkdirs();
+            }
+        }
         // 创建 File 对象
         File file = new File(excelPath + excelGeneratePath + fileName + ".xlsx");
         // 判断文件是否存在
@@ -512,8 +527,8 @@ public class ManagementInfoServiceImpl implements ManagementInfoService {
             filePath = fileUrl + "excel" + excelGeneratePath + fileName + ".xlsx";
             return filePath;
         }
-
-        try (FileInputStream fis = new FileInputStream(excelPath + excelClearingReceipt);
+        String templateUrl = fileUrl +"excel/" +excelClearingReceipt;
+        try (FileInputStream fis = toFileInputStream(downloadAsInputStream(templateUrl));
              Workbook workbook = new XSSFWorkbook(fis)) {
             // 获取第一个工作表
             Sheet sheet = workbook.getSheetAt(0);
@@ -581,14 +596,41 @@ public class ManagementInfoServiceImpl implements ManagementInfoService {
                 sheet.autoSizeColumn(i);
             }
             // 保存填充后的工作簿到本地文件
-            try (FileOutputStream fos = new FileOutputStream(excelPath + excelGeneratePath + fileName + ".xlsx")) {
+//            try (FileOutputStream fos = new FileOutputStream(excelPath + excelGeneratePath + fileName + ".xlsx")) {
+//                workbook.write(fos);
+//                filePath = fileUrl + "excel" + excelGeneratePath + fileName + ".xlsx";
+//            }
+            try (FileOutputStream fos = new FileOutputStream(filePath)) {
                 workbook.write(fos);
-                filePath = fileUrl + "excel" + excelGeneratePath + fileName + ".xlsx";
             }
+
         } catch (IOException e) {
             e.printStackTrace();
         }
-        return filePath;
+
+        return aliOSSUtil.uploadFile(new File(filePath), "excel/" + fileName + ".xlsx");
+    }
+
+    public InputStream downloadAsInputStream(String fileUrl) throws IOException {
+        URL url = new URL(fileUrl);
+        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+        connection.setRequestMethod("GET");
+        return connection.getInputStream(); // 直接返回 HTTP 流
+    }
+    public static FileInputStream toFileInputStream(InputStream inputStream) throws IOException {
+        Path tempFile = Files.createTempFile("temp-", ".tmp");
+        tempFile.toFile().deleteOnExit();
+        try (InputStream is = inputStream) {
+            Files.copy(is, tempFile, StandardCopyOption.REPLACE_EXISTING);
+        }
+        return new FileInputStream(tempFile.toFile());
+    }
+    public FileInputStream getExcelTemplate() throws IOException {
+        // 1. 通过 ClassPathResource 获取文件
+        ClassPathResource resource = new ClassPathResource("templates/clearing_receipt.xlsx");
+        // 2. 转换为 FileInputStream(仅在文件系统有效,JAR 内会报错)
+        File file = resource.getFile(); // 注意:JAR 中会抛出 FileNotFoundException
+        return new FileInputStream(file);
     }
 
 //    public static void main(String[] args) {

+ 12 - 2
alien-store/src/main/java/shop/alien/store/service/impl/StoreIncomeDetailsRecordServiceImpl.java

@@ -176,6 +176,9 @@ public class StoreIncomeDetailsRecordServiceImpl extends ServiceImpl<StoreIncome
     public String approveCashOut(Integer cashOutId, String approveStatus, String failReason) {
         if (cashOutId != null && cashOutId > 0 && StringUtils.isNotBlank(approveStatus)) {
             StoreCashOutRecord storeCashOutRecord = storeCashOutRecordMapper.selectById(cashOutId);
+            if(!(storeCashOutRecord.getPaymentStatus() == 3)){
+                return "付款状态异常";
+            }
             if (approveStatus.equals("0")) {
                 //同意,开始提现
                 Integer storeUserId = storeCashOutRecord.getStoreUserId();
@@ -195,19 +198,25 @@ public class StoreIncomeDetailsRecordServiceImpl extends ServiceImpl<StoreIncome
                     storeCashOutRecord.setPaymentStatus(1);//提现成功
                     storeCashOutRecord.setApproveTime(new Date());// 审批时间
                     storeCashOutRecord.setPayDate(new Date());//支付时间
-
+                    storeCashOutRecord.setPaymentDate(new Date());//支付到账时间
                     //减少账户余额
                     storeUserMapper.updateById(new StoreUser(storeCashOutRecord.getStoreId(), storeUser.getMoney() - storeCashOutRecord.getMoney() - storeCashOutRecord.getCommission()));
+                    storeCashOutRecordMapper.updateById(storeCashOutRecord);
+                    return "付款成功";
+
                 } else {
                     // 提现失败
                     storeCashOutRecord.setPaymentStatus(2);
                     storeCashOutRecord.setApproveTime(new Date());// 审批时间
                     storeCashOutRecord.setFailReason("支付失败");
+                    storeCashOutRecord.setPayDate(new Date());//支付时间
+                    storeCashOutRecordMapper.updateById(storeCashOutRecord);
+                    return "付款失败";
                 }
-                storeCashOutRecordMapper.updateById(storeCashOutRecord);
             } else {
                 storeCashOutRecord.setPaymentStatus(4);
                 storeCashOutRecord.setFailReason(failReason);
+                storeCashOutRecord.setApproveTime(new Date());// 审批时间
                 storeCashOutRecordMapper.updateById(storeCashOutRecord);
                 // 拒绝将账单中的提现记录置空
                 LambdaUpdateWrapper<StoreIncomeDetailsRecord> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
@@ -215,6 +224,7 @@ public class StoreIncomeDetailsRecordServiceImpl extends ServiceImpl<StoreIncome
                         .eq(StoreIncomeDetailsRecord::getCashOutId, storeCashOutRecord.getId())
                         .set(StoreIncomeDetailsRecord::getCashOutId, "");
                  int result = storeIncomeDetailsRecordMapper.updateByCashOutId(storeCashOutRecord.getStoreId(), storeCashOutRecord.getId());
+                return "已拒绝";
             }
         }
         return "审批成功";