SapReceiptDataService.java 4.59 KB
package com.huaheng.pc.sap.service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.huaheng.api.utils.SAPUtils;
import com.huaheng.framework.web.service.ConfigService;
import com.huaheng.pc.sap.domain.Piarsh;
import com.huaheng.pc.system.config.service.IConfigService;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.utils.DateUtils;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.http.OkHttpUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.domain.AjaxResultSAP;
import com.huaheng.pc.config.address.service.AddressService;
import com.huaheng.pc.sap.domain.SapReceiptData;
import com.huaheng.pc.sap.domain.SapReceiptDetailData;
import com.huaheng.pc.sap.mapper.SapReceiptDataMapper;

/**
 * Created by Cotter on 2023/2/1.
 * @author zhouhong
 */
@Service
public class SapReceiptDataService extends ServiceImpl<SapReceiptDataMapper, SapReceiptData> {

    @Resource
    private SapReceiptDetailDataService sapReceiptDetailDataService;
    @Resource
    private AddressService addressService;
    @Resource
    private ConfigService configService;

    public Boolean checkDataExist(String containerCode, String rollNumber) {
        LambdaQueryWrapper<SapReceiptData> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(SapReceiptData::getDrumId, containerCode);
        queryWrapper.eq(SapReceiptData::getDatum, DateUtils.getDate());
        List<SapReceiptData> list = this.list(queryWrapper);
        if (list != null && list.size() > 0) {
            return false;
        }
        return true;
    }

    public AjaxResult sendSapReceipts() {
        LambdaQueryWrapper<SapReceiptData> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(SapReceiptData::getStatus, 1);
        queryWrapper.eq(SapReceiptData::getSendOK,1);
        queryWrapper.orderByAsc(SapReceiptData::getId);
        List<SapReceiptData> list = this.list(queryWrapper);
        for (SapReceiptData sapReceiptData : list) {
            try {
                sendSapReceipt(sapReceiptData);
            } catch (Exception e) {

            }
        }
        return AjaxResult.success();
    }

    public void sendSapReceipt(SapReceiptData sapReceiptData) {
        String uniqueId = sapReceiptData.getUniqueId();

        List<SapReceiptDetailData> list = sapReceiptDetailDataService.list(new LambdaQueryWrapper<SapReceiptDetailData>()
                .eq(SapReceiptDetailData::getUniqueId, uniqueId));
        //2 入库指令
        sapReceiptData.setMFlag("2");
        //构建推送SAP入库指令信息
        Piarsh piarsh = SAPUtils.createPiarshData(sapReceiptData, list);
        String json = JSON.toJSONString(piarsh, SerializerFeature.SortField);
        AjaxResultSAP tag = sendReceiptToSap(json);
        // 回传成功修改回传状态
        sapReceiptData.setLastUpdated(new Date());
        if (!tag.hasErr()) {
            // 1未回传 2已回传
            sapReceiptData.setStatus(2);
            this.updateById(sapReceiptData);
        } else {
            sapReceiptData.setSendNum(sapReceiptData.getSendNum() + 1);
            sapReceiptData.setStatus(3);
            sapReceiptData.setSapMsg(tag.getMsg());
            this.updateById(sapReceiptData);
        }
    }

    public AjaxResultSAP sendReceiptToSap(String JsonParam) {
        String url = addressService.selectAddress(QuantityConstant.PLATFORM_SAP_RECEIPT, QuantityConstant.WAREHOUSECODE, null);
        String authKey = configService.getKey(QuantityConstant.SAP_AUTHORIZATION);
        //添加权限认证
        Map<String,String> map = new HashMap<>();
        map.put("Authorization",authKey);
        map.put("code","SAVE");
        String result = OkHttpUtils.bodypost(url, JsonParam,map);
        if (StringUtils.isEmpty(result)) {
            return AjaxResultSAP.error("接口地址错误或返回为空");
        }
        AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
        if(ajaxResult.hasErr()){
            return AjaxResultSAP.error(ajaxResult.getMessage());
        }
        return AjaxResultSAP.success(ajaxResult.getData());
    }
}