czt
2025-03-24 c3160cb5049cde90eb5c7975bce41239d9796a0c
上海对农接口,增加结果回调接口
已修改4个文件
已添加1个文件
340 ■■■■■ 文件已修改
src/main/java/com/fzzy/inte/sh2023/controller/ControllerSh2023.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/inte/sh2023/dto/ApiResp.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/inte/sh2023/dto/ResultDto.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/inte/sh2023/service/SHDNService.java 283 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/push/sh2023/SH2023Constant.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/inte/sh2023/controller/ControllerSh2023.java
@@ -1,13 +1,18 @@
package com.fzzy.inte.sh2023.controller;
import com.alibaba.fastjson.JSONObject;
import com.fzzy.api.entity.Api9116;
import com.fzzy.api.utils.ContextUtil;
import com.fzzy.api.utils.RSAUtils;
import com.fzzy.api.utils.RedisUtil;
import com.fzzy.inte.sh2023.constant.ApiRespCode;
import com.fzzy.inte.sh2023.dto.ApiResp;
import com.fzzy.inte.sh2023.dto.SHDN2023ReqDto;
import com.fzzy.inte.sh2023.service.SHDNService;
import com.fzzy.push.sh2023.SH2023Constant;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
@@ -15,6 +20,8 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;
/**
 * ä¸Šæµ·å¯¹å†œæŽ¥å£
@@ -25,7 +32,8 @@
public class ControllerSh2023 {
    @Autowired
    private SHDNService shdnService;
    @Autowired
    private RedisUtil redisUtil;
    private static final String PRIVATE_KEY = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJGxqYyI/k6nYkm2nf4ggkAMViEvbnplbQqw6Qweu4neFXCC+iKY8cq5RZEj8JLfrm/gHBTPN8FF1sQIwWwsDV7UUc88DS5KwAi5JXBHMdcbh2tftkINr0YVn6rIgUBTbmPZ7Y8L2iW8psYsF9nxwvUUtcbFJXIMJfi39Qxl0NQvAgMBAAECgYBKWLHfoCy9sFbMrN7UxnwQ+PqetpiW5tkNApf58ljbErQ4FO5V51xDieXBGejy2igmuOM7jz6xZtUgdiNV8uji/RtiNRqsBekVBPMeYAnPwA4GQ0HNwyHJ3ebJNQqT9bwrk8QpRUuCnrx/U1l7P1QNR5o52H1HpEKPlS0ga0fuQQJBAMdiSFYKt8/PwsYclvU/GqXrPy4cxMBhtE/ZssH9KourxnJcyfRz7EPgfSZykxlGHn8j/r8C2XxtAIYW6mRckqECQQC7EIZCZ3eV8abSIB33oKmw2jZlPQrHXMt8DWz8FYbNIA/9bvk9e9O42iQwMUtHfOMcNMWbcvKR/J+83bcE08TPAkA1ErdYl+/H1HDvVUrlq0+HnPArcSL6ZsedfcB0nNRHa4kehg6IEJdylf4aTuNTFfQmOcmkxLhpw4YhK1ZnMrEhAkEAuiMLNXA3MmCumk+TAiBAOdYoYjyHSTEw2VOSqpPQ+rN4tbmDEIbyefG2KK4kNhIy+pIYP0H11QYG/KuxvX/rSQJBALs0TqUgcGOp9+IkOq4jCXiVkP5/r7JWinQ4d6bYhJ4wspQYloYFCHljKKXtst1m8I3PC+vJY8R6va/3xtQKT8U=";
    private static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCRsamMiP5Op2JJtp3+IIJADFYhL256ZW0KsOkMHruJ3hVwgvoimPHKuUWRI/CS365v4BwUzzfBRdbECMFsLA1e1FHPPA0uSsAIuSVwRzHXG4drX7ZCDa9GFZ+qyIFAU25j2e2PC9olvKbGLBfZ8cL1FLXGxSVyDCX4t/UMZdDULwIDAQAB";
    private static final String SIGN = "JD-DNSGSJ";
@@ -54,9 +62,25 @@
            return new ApiResp(ApiRespCode.R_500.getCode(),ApiRespCode.R_500.getMsg());
        }
        log.info("-----对农系统,接口编码={},数据解密={}-----",interfaceId, data);
        //异步保存
        shdnService.syncData(interfaceId, data, shdn2023ReqDto.getDeptId());
        return new ApiResp();
        //判断是否为结果回调接口
        if(SH2023Constant.SH_2023_API_CODE_3301.equals(interfaceId)){
            return shdnService.getResult(data);
        }
        //生成outID
        String outId = "OUT_ID_" + interfaceId + "_" + DateFormatUtils.format(new Date(), "yyyyMMddHHmmss");
        //异步解析
        shdnService.syncData(interfaceId, data, shdn2023ReqDto.getDeptId(), outId);
        //返回outId,用于对农系统回调
        return new ApiResp(outId);
    }
    public static void main(String[] args) {
        String outid = RSAUtils.encrypt("[{\n" +
                "\t\"outId\":\"OUT_ID_3101_20250324161241\"\n" +
                "\t}]",PUBLIC_KEY);
        System.out.println("=====" + outid);
    }
}
src/main/java/com/fzzy/inte/sh2023/dto/ApiResp.java
@@ -15,16 +15,17 @@
    private String msg = ApiRespCode.R_200.getMsg();
    private String outId;
    public ApiResp() {
    }
    public ApiResp(String outId) {
        this.outId = outId;
    }
    public ApiResp(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    public ApiResp(ApiRespCode apiRespCode) {
        this.code = apiRespCode.getCode();
        this.msg = apiRespCode.getMsg();
    }
}
src/main/java/com/fzzy/inte/sh2023/dto/ResultDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.fzzy.inte.sh2023.dto;
import lombok.Data;
@Data
public class ResultDto {
    private String outId;
}
src/main/java/com/fzzy/inte/sh2023/service/SHDNService.java
@@ -2,10 +2,11 @@
import com.alibaba.fastjson.JSONObject;
import com.fzzy.api.entity.*;
import com.fzzy.api.service.ApiCommonService;
import com.fzzy.api.utils.RedisUtil;
import com.fzzy.api.view.repository.*;
import com.fzzy.inte.sh2023.constant.ApiRespCode;
import com.fzzy.inte.sh2023.dto.ApiResp;
import com.fzzy.inte.sh2023.dto.ResultDto;
import com.fzzy.push.sh2023.SH2023Constant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -36,125 +37,197 @@
    private Api9115Rep api9115Rep;
    @Autowired
    private Api9116Rep api9116Rep;
    @Autowired
    private RedisUtil redisUtil;
    @Async
    public void syncData(String interfaceId, String dataStr, String deptId){
    public void syncData(String interfaceId, String dataStr, String deptId, String outId){
        ApiConfs apiConfs = apiConfsRep.getDataByDeptId(deptId);
        if(null == apiConfs){
            log.error("-----未获取到库区信息配置,不解析---------");
            resultRedis(outId, ApiRespCode.R_500.getCode(), "未获取到库区信息配置,不解析");
            return;
        }
        //单位信息
        if(SH2023Constant.SH_2023_API_CODE_3101.equals(interfaceId)){
            List<Api9109> list = JSONObject.parseArray(dataStr, Api9109.class);
            if(null == list || list.isEmpty()){
                log.error("-----未获取到信息,不解析---------");
                return;
        try {
            //单位信息
            if(SH2023Constant.SH_2023_API_CODE_3101.equals(interfaceId)){
                List<Api9109> list = JSONObject.parseArray(dataStr, Api9109.class);
                if(null == list || list.isEmpty()){
                    log.error("-----未获取到信息,不解析---------");
                    resultRedis(outId, ApiRespCode.R_500.getCode(), "未获取到信息,不解析");
                    return;
                }
                for (Api9109 apiData : list) {
                    apiData.setKqdm(apiConfs.getKqdm());
                    apiData.setZhgxsj(new Date());
                    api9109Rep.save(apiData);
                }
                log.info("-----单位信息解析完成={}-----", list);
                //解析结果放入缓存
                resultRedis(outId, ApiRespCode.R_200.getCode(), "单位信息解析完成");
            }
            for (Api9109 apiData : list) {
                apiData.setKqdm(apiConfs.getKqdm());
                apiData.setZhgxsj(new Date());
                api9109Rep.save(apiData);
            //收纳库信息
            if(SH2023Constant.SH_2023_API_CODE_3102.equals(interfaceId)){
                List<Api9110> list = JSONObject.parseArray(dataStr, Api9110.class);
                if(null == list || list.isEmpty()){
                    log.error("-----未获取到库区信息,不解析---------");
                    resultRedis(outId, ApiRespCode.R_500.getCode(), "未获取到库区信息,不解析");
                    return;
                }
                for (Api9110 apiData : list) {
                    apiData.setZhgxsj(new Date());
                    api9110Rep.save(apiData);
                }
                log.info("-----库区信息解析完成={}-----", list);
                //解析结果放入缓存
                resultRedis(outId, ApiRespCode.R_200.getCode(), "库区信息解析完成");
            }
            log.info("-----单位信息解析完成={}-----", list);
            //仓房信息
            if(SH2023Constant.SH_2023_API_CODE_3103.equals(interfaceId)){
                List<Api9111> list = JSONObject.parseArray(dataStr, Api9111.class);
                if(null == list || list.isEmpty()){
                    log.error("-----未获取到仓房信息,不解析---------");
                    resultRedis(outId, ApiRespCode.R_500.getCode(), "未获取到仓房信息,不解析");
                    return;
                }
                for (Api9111 apiData : list) {
                    apiData.setZhgxsj(new Date());
                    api9111Rep.save(apiData);
                }
                log.info("-----仓房信息解析完成={}-----", list);
                //解析结果放入缓存
                resultRedis(outId, ApiRespCode.R_200.getCode(), "仓房信息解析完成");
            }
            //廒间信息
            if(SH2023Constant.SH_2023_API_CODE_3104.equals(interfaceId)){
                List<Api9112> list = JSONObject.parseArray(dataStr, Api9112.class);
                if(null == list || list.isEmpty()){
                    log.error("-----未获取到仓房信息,不解析---------");
                    resultRedis(outId, ApiRespCode.R_500.getCode(), "未获取到仓房信息,不解析");
                    return;
                }
                for (Api9112 apiData : list) {
                    apiData.setKqdm(apiConfs.getKqdm());
                    apiData.setZhgxsj(new Date());
                    api9112Rep.save(apiData);
                }
                log.info("-----廒间信息解析完成={}-----", list);
                //解析结果放入缓存
                resultRedis(outId, ApiRespCode.R_200.getCode(), "廒间信息解析完成");
            }
            //货位信息
            if(SH2023Constant.SH_2023_API_CODE_3105.equals(interfaceId)){
                List<Api9113> list = JSONObject.parseArray(dataStr, Api9113.class);
                if(null == list || list.isEmpty()){
                    log.error("-----未获取到货位信息,不解析---------");
                    resultRedis(outId, ApiRespCode.R_500.getCode(), "未获取到仓房信息,不解析");
                    return;
                }
                for (Api9113 apiData : list) {
                    apiData.setKqdm(apiConfs.getKqdm());
                    apiData.setZhgxsj(new Date());
                    api9113Rep.save(apiData);
                }
                log.info("-----货位信息解析完成={}-----", list);
                //解析结果放入缓存
                resultRedis(outId, ApiRespCode.R_200.getCode(), "货位信息解析完成");
            }
            //粮食入库信息
            if(SH2023Constant.SH_2023_API_CODE_3201.equals(interfaceId)){
                List<Api9114> list = JSONObject.parseArray(dataStr, Api9114.class);
                if(null == list || list.isEmpty()){
                    log.error("-----未获取到粮食入库信息,不解析---------");
                    resultRedis(outId, ApiRespCode.R_500.getCode(), "未获取到仓房信息,不解析");
                    return;
                }
                for (Api9114 apiData : list) {
                    apiData.setKqdm(apiConfs.getKqdm());
                    apiData.setZhgxsj(new Date());
                    api9114Rep.save(apiData);
                }
                log.info("-----粮食入库信息解析完成={}-----", list);
                //解析结果放入缓存
                resultRedis(outId, ApiRespCode.R_200.getCode(), "粮食入库信息解析完成");
            }
            //来粮检验信息
            if(SH2023Constant.SH_2023_API_CODE_3202.equals(interfaceId)){
                List<Api9115> list = JSONObject.parseArray(dataStr, Api9115.class);
                if(null == list || list.isEmpty()){
                    log.error("-----未获取到来粮检验信息,不解析---------");
                    resultRedis(outId, ApiRespCode.R_500.getCode(), "未获取到仓房信息,不解析");
                    return;
                }
                for (Api9115 apiData : list) {
                    apiData.setKqdm(apiConfs.getKqdm());
                    apiData.setZhgxsj(new Date());
                    api9115Rep.save(apiData);
                }
                log.info("-----来粮检验信息解析完成={}-----", list);
                //解析结果放入缓存
                resultRedis(outId, ApiRespCode.R_200.getCode(), "来粮检验信息解析完成");
            }
            //粮食收购基础信息
            if(SH2023Constant.SH_2023_API_CODE_3203.equals(interfaceId)){
                List<Api9116> list = JSONObject.parseArray(dataStr, Api9116.class);
                if(null == list || list.isEmpty()){
                    log.error("-----未获取到粮食收购基础信息,不解析---------");
                    resultRedis(outId, ApiRespCode.R_500.getCode(), "未获取到仓房信息,不解析");
                    return;
                }
                for (Api9116 apiData : list) {
                    apiData.setKqdm(apiConfs.getKqdm());
                    apiData.setZhgxsj(new Date());
                    api9116Rep.save(apiData);
                }
                log.info("-----粮食收购基础信息解析完成={}-----", list);
                //解析结果放入缓存
                resultRedis(outId, ApiRespCode.R_200.getCode(), "粮食收购基础信息解析完成");
            }
        } catch (Exception e) {
            log.error("-----接口{}解析报错,错误原因={}-----", interfaceId, e.toString());
            resultRedis(outId, ApiRespCode.R_500.getCode(), "-----接口"+interfaceId+"解析报错,错误原因="+e.toString()+"-----");
        }
        //收纳库信息
        if(SH2023Constant.SH_2023_API_CODE_3102.equals(interfaceId)){
            List<Api9110> list = JSONObject.parseArray(dataStr, Api9110.class);
            if(null == list || list.isEmpty()){
                log.error("-----未获取到库区信息,不解析---------");
            }
            for (Api9110 apiData : list) {
                apiData.setZhgxsj(new Date());
                api9110Rep.save(apiData);
            }
            log.info("-----库区信息解析完成={}-----", list);
        }
    }
        //仓房信息
        if(SH2023Constant.SH_2023_API_CODE_3103.equals(interfaceId)){
            List<Api9111> list = JSONObject.parseArray(dataStr, Api9111.class);
            if(null == list || list.isEmpty()){
                return;
            }
            for (Api9111 apiData : list) {
                apiData.setZhgxsj(new Date());
                api9111Rep.save(apiData);
            }
            log.info("-----仓房信息解析完成={}-----", list);
    /**
     * ä»Žç¼“存中获取解析结果
     * @param dataStr
     * @return
     */
    public ApiResp getResult(String dataStr){
        List<ResultDto> list = JSONObject.parseArray(dataStr, ResultDto.class);
        if(null == list || list.isEmpty()){
            log.error("-----outId为空---------");
            return new ApiResp(ApiRespCode.R_500.getCode(), "outId为空,无法获取解析结果!");
        }
        ApiResp result = (ApiResp)redisUtil.get(list.get(0).getOutId());
        if(null == result){
            log.error("-----未获取到outId对应的解析结果---------");
            return new ApiResp(ApiRespCode.R_500.getCode(), "未获取到outId对应的解析结果!");
        }
        return result;
    }
        //廒间信息
        if(SH2023Constant.SH_2023_API_CODE_3104.equals(interfaceId)){
            List<Api9112> list = JSONObject.parseArray(dataStr, Api9112.class);
            if(null == list || list.isEmpty()){
                return;
            }
            for (Api9112 apiData : list) {
                apiData.setKqdm(apiConfs.getKqdm());
                apiData.setZhgxsj(new Date());
                api9112Rep.save(apiData);
            }
            log.info("-----廒间信息解析完成={}-----", list);
        }
        //货位信息
        if(SH2023Constant.SH_2023_API_CODE_3105.equals(interfaceId)){
            List<Api9113> list = JSONObject.parseArray(dataStr, Api9113.class);
            if(null == list || list.isEmpty()){
                return;
            }
            for (Api9113 apiData : list) {
                apiData.setKqdm(apiConfs.getKqdm());
                apiData.setZhgxsj(new Date());
                api9113Rep.save(apiData);
            }
            log.info("-----货位信息解析完成={}-----", list);
        }
        //粮食入库信息
        if(SH2023Constant.SH_2023_API_CODE_3201.equals(interfaceId)){
            List<Api9114> list = JSONObject.parseArray(dataStr, Api9114.class);
            if(null == list || list.isEmpty()){
                return;
            }
            for (Api9114 apiData : list) {
                apiData.setKqdm(apiConfs.getKqdm());
                apiData.setZhgxsj(new Date());
                api9114Rep.save(apiData);
            }
            log.info("-----粮食入库信息解析完成={}-----", list);
        }
        //来粮检验信息
        if(SH2023Constant.SH_2023_API_CODE_3202.equals(interfaceId)){
            List<Api9115> list = JSONObject.parseArray(dataStr, Api9115.class);
            if(null == list || list.isEmpty()){
                return;
            }
            for (Api9115 apiData : list) {
                apiData.setKqdm(apiConfs.getKqdm());
                apiData.setZhgxsj(new Date());
                api9115Rep.save(apiData);
            }
            log.info("-----来粮检验信息解析完成={}-----", list);
        }
        //粮食收购基础信息
        if(SH2023Constant.SH_2023_API_CODE_3203.equals(interfaceId)){
            List<Api9116> list = JSONObject.parseArray(dataStr, Api9116.class);
            if(null == list || list.isEmpty()){
                return;
            }
            for (Api9116 apiData : list) {
                apiData.setKqdm(apiConfs.getKqdm());
                apiData.setZhgxsj(new Date());
                api9116Rep.save(apiData);
            }
            log.info("-----粮食收购基础信息解析完成={}-----", list);
        }
    /**
     *
     * ç»“果存入缓存
     * @param outId
     * @param code
     * @param msg
     */
    public void resultRedis(String outId, String code, String msg){
        ApiResp result = new ApiResp(code, msg);
        //结果存入缓存2小时
        redisUtil.set(outId, result, 60*60*2);
    }
}
src/main/java/com/fzzy/push/sh2023/SH2023Constant.java
@@ -258,6 +258,11 @@
     */
    public static String SH_2023_API_CODE_3203 = "3203";
    /**
     * æŽ¥å£ç¼–码-3301 è§£æžç»“果回调
     */
    public static String SH_2023_API_CODE_3301 = "3301";
}