Просмотр исходного кода

OMS发票信息部分代码上传

徐滕 1 месяц назад
Родитель
Сommit
4b6b3f92c2

+ 0 - 6
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectSignatureOldMessageDisposeController.java

@@ -37,18 +37,13 @@ import com.jeeplus.modules.workactivity.entity.WorkActivityProcess;
 import com.jeeplus.modules.workactivity.service.WorkActivityProcessService;
 import com.jeeplus.modules.workclientinfo.entity.WorkClientAttachment;
 import com.jeeplus.modules.workinvoice.entity.OMS.InvoiceDown.OMSInvoiceDetailInfo;
-import com.jeeplus.modules.workinvoice.entity.OMS.InvoiceOMSImportInfo;
 import com.jeeplus.modules.workinvoice.entity.OMS.OMSAccessTokenInfo;
 import com.jeeplus.modules.workinvoice.entity.OMS.OMSInvoiceResultDownloadData;
-import com.jeeplus.modules.workinvoice.entity.OMS.fastRed.OMSRedInvoiceConfirmInfo;
-import com.jeeplus.modules.workinvoice.entity.OMS.fastRed.OMSRedInvoiceConfirmResponse;
 import com.jeeplus.modules.workinvoice.entity.TemporaryInvoiceInfo;
 import com.jeeplus.modules.workinvoice.service.OMS.OMSDisposeService;
 import com.jeeplus.modules.workinvoice.service.WorkInvoiceService;
 import com.jeeplus.modules.workinvoice.utils.HttpPostJsonUtil;
 import com.jeeplus.modules.workinvoice.utils.OMSNationUtil;
-import com.jeeplus.modules.workinvoice.utils.RedInvoiceScheduledTask;
-import com.jeeplus.modules.workinvoice.utils.ThreadPoolUtil;
 import com.jeeplus.modules.workreimbursement.service.WorkReimbursementService;
 import com.jeeplus.modules.workstaff.service.WorkStaffBasicInfoService;
 import freemarker.template.Configuration;
@@ -66,7 +61,6 @@ import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 import org.w3c.dom.Document;
 import org.w3c.dom.NodeList;
-import redis.clients.jedis.Jedis;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;

+ 0 - 10
src/main/java/com/jeeplus/modules/workinvoice/service/WorkInvoiceService.java

@@ -6,11 +6,9 @@ package com.jeeplus.modules.workinvoice.service;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.jeeplus.common.json.AjaxJson;
-import com.jeeplus.common.oss.OSSClientUtil;
 import com.jeeplus.common.persistence.Page;
 import com.jeeplus.common.service.CrudService;
 import com.jeeplus.common.utils.DateUtils;
-import com.jeeplus.common.utils.JedisUtils;
 import com.jeeplus.common.utils.MenuStatusEnum;
 import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.modules.act.service.ActTaskService;
@@ -33,7 +31,6 @@ import com.jeeplus.modules.sys.service.UserService;
 import com.jeeplus.modules.sys.service.WorkattachmentService;
 import com.jeeplus.modules.sys.utils.ALiYunSmsUtil;
 import com.jeeplus.modules.sys.utils.UserUtils;
-import com.jeeplus.modules.tools.utils.SignaturePostUtil;
 import com.jeeplus.modules.workactivity.dao.WorkActivityProcessDao;
 import com.jeeplus.modules.workactivity.entity.Activity;
 import com.jeeplus.modules.workactivity.entity.WorkActivityProcess;
@@ -68,14 +65,9 @@ import org.activiti.engine.task.Task;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-import redis.clients.jedis.Jedis;
 
-import java.io.File;
-import java.io.FileInputStream;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
@@ -4288,9 +4280,7 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 				HashMap<String,Object> result = null;
 				try{
 					//调用工具类返回结果
-					System.out.println("准备调用updatePasswordSendSms,mobile=" + user.getMobile() + ",number=" + workInvoice.getNumber());
 					result = ALiYunSmsUtil.omsWorkInvoiceSuccessSms(user.getMobile(), workInvoice.getNumber());
-					System.out.println("调用updatePasswordSendSms完成,返回结果=" + result);
 					Integer statusCode = (Integer) result.get("statusCode");
 					if (200 == statusCode) {
 						System.out.println("进入获取密码修改短信通知接口2。获取阿里云短信通知成功");

+ 8 - 9
src/main/java/com/jeeplus/modules/workinvoice/utils/OMSNationUtil.java

@@ -93,9 +93,6 @@ public class OMSNationUtil {
     private static final String sellerName = Global.getConfig("omsSellerName");
     private static final String sellerTaxno = Global.getConfig("omsSellerTaxno");
 
-    private final String goodstaxno = "109050901"; //税收分类编码(电脑)
-    private final String goodsName = "电脑配件"; //税收分类编码(餐饮)
-
 
     /**
      * 开蓝票
@@ -126,10 +123,10 @@ public class OMSNationUtil {
         }
 
         //添加购买方信息
-        omsImportInfo.setBuyerName("深圳市爱人人餐饮服务有限公司");
-        omsImportInfo.setBuyerTaxno("500102203117204029");
-        //omsImportInfo.setBuyerName(workInvoice.getClient().getName());    //购买方名称
-        //omsImportInfo.setBuyerTaxno(workInvoice.getClient().getOrUnicode());  //购买方信用代码
+        //omsImportInfo.setBuyerName("深圳市爱人人餐饮服务有限公司");
+        //omsImportInfo.setBuyerTaxno("500102203117204029");
+        omsImportInfo.setBuyerName(workInvoice.getClient().getName());    //购买方名称
+        omsImportInfo.setBuyerTaxno(workInvoice.getClient().getOrUnicode());  //购买方信用代码
         omsImportInfo.setBuyerAddr(workInvoice.getClient().getAddress()); //购买方地址
         omsImportInfo.setBuyerPhone(workInvoice.getClient().getTelephone()); //购买方电话
         omsImportInfo.setBuyerBank(workInvoice.getBank()); //购买方开户行名称
@@ -230,8 +227,10 @@ public class OMSNationUtil {
         omsAllScenarioRedInvoiceInfo.setSellerTaxno(sellerTaxno);
         omsAllScenarioRedInvoiceInfo.setSellerName(sellerName);
         //添加购买方信息
-        omsAllScenarioRedInvoiceInfo.setBuyerName("深圳市爱人人餐饮服务有限公司");
-        omsAllScenarioRedInvoiceInfo.setBuyerTaxno("500102203117204029");
+        //omsAllScenarioRedInvoiceInfo.setBuyerName("深圳市爱人人餐饮服务有限公司");
+        //omsAllScenarioRedInvoiceInfo.setBuyerTaxno("500102203117204029");
+        omsAllScenarioRedInvoiceInfo.setBuyerName(workInvoice.getClient().getName());    //购买方名称
+        omsAllScenarioRedInvoiceInfo.setBuyerTaxno(workInvoice.getClient().getOrUnicode());  //购买方信用代码
         //原蓝票发票号码
         omsAllScenarioRedInvoiceInfo.setOriginalInvno(originalInvno);
         //原蓝票发票类型

+ 0 - 278
src/main/java/com/jeeplus/modules/workinvoice/utils/RedInvoiceScheduledTask.java

@@ -1,278 +0,0 @@
-package com.jeeplus.modules.workinvoice.utils;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.jeeplus.common.config.Global;
-import com.jeeplus.modules.workinvoice.entity.OMS.OMSAccessTokenInfo;
-import com.jeeplus.modules.workinvoice.entity.OMS.fastRed.OMSRedInvoiceConfirmResponse;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-import org.apache.commons.lang3.StringUtils;
-import redis.clients.jedis.Jedis;
-
-import java.util.Calendar;
-import java.util.Set;
-import java.util.UUID;
-
-/**
- * 红冲任务独立执行器(仅从Redis取数,全量执行业务逻辑,8:00-18:00每小时执行)
- */
-@Component
-public class RedInvoiceScheduledTask {
-
-    private static final String appId = Global.getConfig("omsAppId");
-    private static final String appKey = Global.getConfig("omsAppKey");
-    private static final String deptCode = Global.getConfig("omsDeptCode");
-
-
-    // ========== 2. 定时任务入口(8:00-18:00每小时执行) ==========
-    @Scheduled(cron = "0 0 */1 * * ?")
-    public void processAllRedInvoiceTasks() {
-        // 时间窗口校验
-        Calendar now = Calendar.getInstance();
-        int hour = now.get(Calendar.HOUR_OF_DAY);
-        if (hour < 8 || hour >= 18) {
-            System.out.println("[定时任务] 非业务时段,跳过");
-            return;
-        }
-
-        Jedis jedis = null;
-        try {
-            jedis = JedisUtils.getResource();
-            Set<String> taskKeys = jedis.keys("OMS_red_invoice_task:*");
-            if (taskKeys.isEmpty()) {
-                System.out.println("[定时任务] 暂无待处理任务");
-                return;
-            }
-
-            // 遍历处理所有Redis任务
-            for (String taskKey : taskKeys) {
-                String applyNo = taskKey.replace("OMS_red_invoice_task:", "");
-                // 读取Redis参数
-                String remainRetryTimesStr = jedis.hget(taskKey, "remainRetryTimes");
-                String jsonInvoicResultStr = jedis.hget(taskKey, "jsonInvoicResultStr");
-                String accessToken = jedis.hget(taskKey, "accessToken");
-                String startTimeStr = jedis.hget(taskKey, "startTime");
-
-                // 参数校验
-                if (StringUtils.isAnyBlank(remainRetryTimesStr, accessToken, startTimeStr)) {
-                    jedis.del(taskKey);
-                    continue;
-                }
-
-                // 转换参数并执行任务
-                int remainRetryTimes = Integer.parseInt(remainRetryTimesStr);
-                long startTime = Long.parseLong(startTimeStr);
-                executeRedInvoiceTask(applyNo, remainRetryTimes, jsonInvoicResultStr, accessToken, startTime);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            if (jedis != null) jedis.close();
-        }
-    }
-
-
-    // ========== 1. 封装所有需要的业务逻辑(独立执行,不依赖原有业务类) ==========
-    /**
-     * 核心:执行单个红冲任务的全流程逻辑
-     */
-    private void executeRedInvoiceTask(String applyNo, int remainRetryTimes, String jsonInvoicResultStr, String accessToken, long startTime) {
-        try {
-            // 步骤1:3天超时判断
-            if (System.currentTimeMillis() - startTime > 259200000L) {
-                System.err.println("❌ 任务["+applyNo+"]超时,触发兜底逻辑");
-                handleInvoiceRetryAllFail(accessToken);
-                deleteRedInvoiceTaskFromRedis(applyNo);
-                return;
-            }
-
-            // 步骤2:首次执行(有jsonInvoicResultStr)→ 解析结果,触发查询
-            if (StringUtils.isNotBlank(jsonInvoicResultStr)) {
-                OMSAccessTokenInfo resultTokenInfo = JSON.parseObject(jsonInvoicResultStr, OMSAccessTokenInfo.class);
-                if (null == resultTokenInfo || null == resultTokenInfo.getResult() || !"0000".equals(resultTokenInfo.getResult().getCode())) {
-                    System.err.println("❌ 任务["+applyNo+"]解析失败,触发兜底");
-                    handleInvoiceRetryAllFail(accessToken);
-                    deleteRedInvoiceTaskFromRedis(applyNo);
-                    return;
-                }
-                // 解析成功,调用查询接口
-                callRedInvoiceConfirmQuery(remainRetryTimes, accessToken, applyNo, startTime);
-                return;
-            }
-
-            // 步骤3:后续重试(无jsonInvoicResultStr)→ 直接调用查询接口
-            callRedInvoiceConfirmQuery(remainRetryTimes, accessToken, applyNo, startTime);
-
-        } catch (Exception e) {
-            e.printStackTrace();
-            // 异常后重试次数-1,重新存入Redis
-            if (remainRetryTimes > 1) {
-                saveRedInvoiceTaskToRedis(remainRetryTimes - 1, jsonInvoicResultStr, accessToken, applyNo, startTime);
-            } else {
-                handleInvoiceRetryAllFail(accessToken);
-                deleteRedInvoiceTaskFromRedis(applyNo);
-            }
-        }
-    }
-
-    /**
-     * 调用红字确认单查询接口(核心业务逻辑)
-     */
-    private void callRedInvoiceConfirmQuery(int remainRetryTimes, String accessToken, String applyNo, long startTime) {
-        try {
-            // 组装查询参数
-            OMSNationUtil util = new OMSNationUtil();
-            String queryData = util.neatenAllScenarioRedInvoiceConfirmQueryData(applyNo);
-            OMSAccessTokenInfo invoiceDownInfo = new OMSAccessTokenInfo();
-            invoiceDownInfo.setAppId(appId);
-            invoiceDownInfo.setAppKey(appKey);
-            invoiceDownInfo.setExchangeId(UUID.randomUUID().toString());
-            invoiceDownInfo.setAccessToken(accessToken);
-            invoiceDownInfo.setData(queryData);
-            String jsonInvoiceDownStr = JSON.toJSONString(invoiceDownInfo);
-
-            // 调用查询接口
-            String invoiceResultStr = HttpPostJsonUtil.doPost("https://oms-sandbox.einvoice.js.cn:7079/prod-api/output/server/redApply/query", jsonInvoiceDownStr);
-            if (StringUtils.isBlank(invoiceResultStr)) {
-                throw new RuntimeException("查询接口返回空");
-            }
-
-            // 解析查询结果
-            OMSAccessTokenInfo resultDownInfo = JSON.parseObject(invoiceResultStr, OMSAccessTokenInfo.class);
-            if (null == resultDownInfo.getResult() || !"0000".equals(resultDownInfo.getResult().getCode())) {
-                throw new RuntimeException("查询接口返回错误码:" + (resultDownInfo.getResult() != null ? resultDownInfo.getResult().getCode() : "NULL"));
-            }
-
-            String invoceDownJsonStr = OMSNationUtil.extractFromBase64OnClassStr(resultDownInfo.getData().toString());
-            OMSRedInvoiceConfirmResponse invoiceInfo = JSONObject.parseObject(invoceDownJsonStr, OMSRedInvoiceConfirmResponse.class);
-            String confirmStatus = invoiceInfo.getConfirmStatus();
-
-            // 判断状态,处理不同分支
-            switch (confirmStatus) {
-                case "01":
-                case "04":
-                    if ("3".equals(invoiceInfo.getMakeStatus())) {
-                        // ========== 仅此处微调:删除直接调用,改为存入Redis ==========
-                        // 原代码 ↓
-                        // ThreadPoolUtil.executeDelay(30, () -> {
-                        //     executeInvoiceDownloadWithRetry(5, accessToken, invoiceInfo.getRedInvOrderNo());
-                        // });
-                        // 新代码 ↑
-                        String redInvOrderNo = invoiceInfo.getRedInvOrderNo();
-                        // 存入Redis,由InvoiceDownloadTask接管
-                        saveInvoiceDownloadTaskToRedis(accessToken, redInvOrderNo);
-                        System.out.println("✅ 解析开票数据任务["+redInvOrderNo+"]已存入Redis,由InvoiceDownloadTask接管重试");
-
-                        deleteRedInvoiceTaskFromRedis(applyNo); // 成功后删除Redis
-                    } else if ("1".equals(invoiceInfo.getMakeStatus()) || "4".equals(invoiceInfo.getMakeStatus())) {
-                        // 开票中,重新存入Redis等待下次重试
-                        saveRedInvoiceTaskToRedis(remainRetryTimes, "", accessToken, applyNo, startTime);
-                    } else {
-                        handleInvoiceRetryAllFail(accessToken);
-                        deleteRedInvoiceTaskFromRedis(applyNo);
-                    }
-                    break;
-                case "02":
-                case "03":
-                case "15":
-                    // 待确认,重新存入Redis等待下次重试
-                    saveRedInvoiceTaskToRedis(remainRetryTimes, "", accessToken, applyNo, startTime);
-                    break;
-                default:
-                    // 失败状态,兜底+删除Redis
-                    handleInvoiceRetryAllFail(accessToken);
-                    deleteRedInvoiceTaskFromRedis(applyNo);
-                    break;
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            // 接口调用失败,重试次数-1后重新存入Redis
-            if (remainRetryTimes > 1) {
-                saveRedInvoiceTaskToRedis(remainRetryTimes - 1, "", accessToken, applyNo, startTime);
-            } else {
-                handleInvoiceRetryAllFail(accessToken);
-                deleteRedInvoiceTaskFromRedis(applyNo);
-            }
-        }
-    }
-
-    /**
-     * 兜底逻辑
-     */
-    public void handleInvoiceRetryAllFail(String accessToken) {
-        System.err.println("📢 执行失败兜底逻辑:更新系统状态 + 通知发起人");
-        // 此处替换为你的实际兜底逻辑(如更新数据库、发送通知等)
-    }
-
-    /**
-     * 存入Redis(定时任务内部使用)
-     */
-    private void saveRedInvoiceTaskToRedis(int remainRetryTimes, String jsonInvoicResultStr, String accessToken, String applyNo, long startTime) {
-        Jedis jedis = null;
-        try {
-            jedis = JedisUtils.getResource();
-            String redisKey = "OMS_red_invoice_task:" + applyNo;
-            jedis.hset(redisKey, "remainRetryTimes", String.valueOf(remainRetryTimes));
-            jedis.hset(redisKey, "jsonInvoicResultStr", jsonInvoicResultStr);
-            jedis.hset(redisKey, "accessToken", accessToken);
-            jedis.hset(redisKey, "applyNo", applyNo);
-            jedis.hset(redisKey, "startTime", String.valueOf(startTime));
-            jedis.expire(redisKey, 259200 + 3600);
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            if (jedis != null) jedis.close();
-        }
-    }
-
-    /**
-     * 删除Redis任务
-     */
-    private void deleteRedInvoiceTaskFromRedis(String applyNo) {
-        Jedis jedis = null;
-        try {
-            jedis = JedisUtils.getResource();
-            jedis.del("OMS_red_invoice_task:" + applyNo);
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            if (jedis != null) jedis.close();
-        }
-    }
-
-    // ========== 3. 工具类依赖(替换为你的实际工具类) ==========
-    // 此处仅为占位,需替换为你项目中实际的工具类实例/注入
-    public static class JedisUtils {
-        public static Jedis getResource() {
-            // 替换为你的Redis连接获取逻辑
-            return null;
-        }
-    }
-
-    private static class ThreadPoolUtil {
-        public static void executeDelay(int seconds, Runnable runnable) {
-            // 替换为你的线程池延迟执行逻辑
-            new Thread(runnable).start();
-        }
-    }
-
-    // ========== 新增:解析开票数据Redis操作(仅新增,不修改原有) ==========
-    private void saveInvoiceDownloadTaskToRedis(String accessToken, String orderno) {
-        Jedis jedis = null;
-        try {
-            jedis = JedisUtils.getResource();
-            String redisKey = "red_invoice_download:" + orderno;
-            jedis.hset(redisKey, "accessToken", accessToken);
-            jedis.hset(redisKey, "orderno", orderno);
-            jedis.hset(redisKey, "firstExecTime", String.valueOf(System.currentTimeMillis()));
-            jedis.expire(redisKey, 86400); // 1天过期
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            if (jedis != null) jedis.close();
-        }
-    }
-
-
-    // 其他实体类(OMSNationUtil、OMSAccessTokenInfo等)替换为你项目中的实际类
-}

+ 0 - 30
src/main/java/com/jeeplus/modules/workinvoice/utils/ThreadPoolUtil.java

@@ -1,30 +0,0 @@
-package com.jeeplus.modules.workinvoice.utils;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-/**
- * 传统MVC项目 全局单例 延迟任务线程池工具类
- * 纯JDK原生,无任何依赖
- */
-public class ThreadPoolUtil {
-    // 全局唯一的延迟任务线程池实例(单例)
-    private static final ScheduledExecutorService DELAY_POOL;
-
-    static {
-        DELAY_POOL = Executors.newScheduledThreadPool(10);
-    }
-
-    // ===== 原方法:保留不动 =====
-    public static void executeDelay(int delaySeconds, Runnable runnable) {
-        DELAY_POOL.schedule(runnable, delaySeconds, TimeUnit.SECONDS);
-    }
-
-    // ===== 新增重载方法:支持传入【自定义业务对象】,给异步线程用 =====
-    public static void executeDelay(int delaySeconds, Runnable runnable, Object... params) {
-        DELAY_POOL.schedule(runnable, delaySeconds, TimeUnit.SECONDS);
-    }
-
-    // 私有化构造方法,禁止外部new对象
-    private ThreadPoolUtil(){}
-}