CustomsDataInterface.java 5.91 KB
package com.erry.iclear.dateInterface.api;

import com.erry.iclear.dateInterface.api.request.MawbDetail;
import com.erry.iclear.dateInterface.enums.ErrorCodeEnum;
import com.erry.iclear.dateInterface.api.request.Mawb;
import com.erry.iclear.dateInterface.api.response.ResultRS;
import com.erry.iclear.dateInterface.entity.IClearApiLog;
import com.erry.iclear.dateInterface.repository.MawbAdd;
import com.erry.iclear.dateInterface.service.*;
import com.erry.iclear.dateInterface.util.StringUtil;
import com.google.gson.Gson;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StopWatch;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.*;

/**
 * @author Administrator
 */
@RestController
@RequestMapping("/customs")
@Slf4j
public class CustomsDataInterface {

    private Gson gson = new Gson();

    @Autowired
    private MawbService mawbService;

    @Autowired
    private MawbDetailService  mawbDetailServicel;

    @Autowired
    private IClearApiLogService iClearApiLogService;

    @Autowired
    private ChmConsignmentService chmConsignmentService;

    @Autowired
    private ChmConsignmentDetailService chmConsignmentDetailService;


    @ApiOperation(value = "推送主单数据", httpMethod = "POST", notes = "ex:  http://192.168.1.75:8080/customs/sendMawb")
    @PostMapping("/sendMawb")
    @ResponseBody
    public ResultRS sendMawb(HttpServletRequest request
                                ,@Validated(MawbAdd.class) @RequestBody Mawb mawb) {
        log.info("接收到请求数据billNo:"+mawb.getBillNo()+" data:" + gson.toJson(mawb));
        ResultRS result = new ResultRS(Boolean.FALSE,null,null,null);

        if(Objects.equals(mawb,null)){
            result.setCode(ErrorCodeEnum.ERROR_7.getCode());
            result.setMsg(ErrorCodeEnum.ERROR_7.getName());
            return result;
        }

        String checkrs = mawbService.checkMawbBaseInfo(mawb);
        if(StringUtil.isNotEmpty(checkrs)){
            result.setCode(ErrorCodeEnum.ERROR_7.getCode());
            result.setMsg(checkrs);
            return result;
        }

        //1、保存请求信息,保存到iClear的  SQLServer

        StopWatch sw = new StopWatch("receice mawb");
        sw.start("save log");

        String appId=(String) request.getHeader("Appid");
        String appKey=(String) request.getHeader("Appkey");
        String timeStamp=(String) request.getHeader("TimeStamp");
        IClearApiLog saveIClearApiLogResult = iClearApiLogService.saveIClearApiLog(iClearApiLogService.convertToIClearApiLog(mawb,appId,appKey,new Date(Long.valueOf(timeStamp))));

        mawb.setAppId(appId);
        if(!Objects.equals(saveIClearApiLogResult,null)){
            log.info("请求保存成功,msgId:"+saveIClearApiLogResult.getMsgId());
            mawb.setMsgId(saveIClearApiLogResult.getMsgId());
            mawb.getMawbDetailList().forEach(d->{
                d.setMsgId(saveIClearApiLogResult.getMsgId());
            });
            Map<String,String> map = mawbService.saveMawb(mawb);
            if(map != null && map.get("success").equals("true")){
                log.info("请求数据主单号"+mawb.getBillNo()+"保存成功,msgId:"+map.get("msg"));
            }else{
                log.info("请求数据主单号"+mawb.getBillNo()+"保存失败");
                String [] erroeMes = map.get("msg").split("interpolatedMessage=");
                String msg = "";
                if (erroeMes != null){
                    for (int i =1;i<erroeMes.length;i++){
                        if (i== erroeMes.length -1){
                            msg += erroeMes[i].substring(0,erroeMes[i].indexOf(","));
                        }else{
                            msg += erroeMes[i].substring(0,erroeMes[i].indexOf(","))+",";
                        }
                    }
                }
                sw.stop();
                result.setCode(ErrorCodeEnum.ERROR_30001.getCode());
                result.setMsg(msg);
                return result;
            }
        }else{
            log.info("请求日志保存失败,BillNo:"+mawb.getBillNo());
        }
        sw.stop();

        //校验单据币制
        result = mawbService.checkCurrency(mawb);
        if(!result.getSuccess()){
            return result;
        }


        //2、TODO 校验主单
        sw.start("checkMawb");
        result=mawbService.checkMawb(mawb);
        if(!result.getSuccess()){
            return result;
        }

        sw.stop();

//        //3、TODO 校验子单
//        sw.start("checkMawbDetail");
//        result=mawbDetailServicel.checkMawbDetail(mawb);
//        if(!result.getSuccess()){
//            return result;
//        }
//        sw.stop();

        //4、保存运单到iclear中
        sw.start("processChmConsignment");
        result = chmConsignmentService.processChmConsignment(mawb, timeStamp,appId);
        if(!result.getSuccess()){
            return result;
        }
        sw.stop();

        //5、更新日志
        sw.start("updateIClearApiLog");
        if(!Objects.equals(saveIClearApiLogResult,null)){
            saveIClearApiLogResult.setReceiveResult(result.getSuccess().toString());
            saveIClearApiLogResult.setErrorCode(result.getCode());
            saveIClearApiLogResult.setResponseTime(new Date());
            saveIClearApiLogResult.setSpendTime(sw.getTotalTimeMillis());

            iClearApiLogService.updateIClearApiLog(saveIClearApiLogResult);
        }
        log.info("请求数据billNo:"+mawb.getBillNo() +" 接收结束");
        sw.stop();
        log.info(sw.prettyPrint());

        //6、return result
        result.setSuccess(Boolean.TRUE);
        result.setCode(ErrorCodeEnum.SUCCESS.getCode());
        result.setMsg("操作成功");
        return result;
    }
}