package com.ruoyi.common.utils.api; import cn.hutool.http.HttpRequest; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.common.config.ifs.IfsConfig; import com.ruoyi.common.core.domain.Result; import com.ruoyi.common.config.ifs.IfsProperties; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * @Author zhuo * @Date 2024/9/29 */ @Slf4j @AllArgsConstructor @Component public class IfsApiUtils { private IfsConfig ifsConfig; public IfsProperties getPropByContract(String contract){ return ifsConfig.getProps().stream().filter(f-> StringUtils.equals(contract,f.getContract())).findFirst().orElse(new IfsProperties()); } /** * 查询采购订单未检验 */ public List> getInventory(Map inAttrMap) { List> maps = new ArrayList<>(); ifsConfig.getProps().forEach(ifsProp->{ String procedureName = "QUERY_POL_RECEIPT_STD"; inAttrMap.put("LOCATION_NO",ifsProp.getTobeInspectedLocation()); String inAttr = JSONUtil.toJsonStr(inAttrMap); JSONObject stockMap = getJsonObject(procedureName, inAttr,ifsProp.getContract(),ifsProp.getContractKeyPost()); String body = HttpRequest.post(ifsProp.getCustorderPort()).form(stockMap).execute().body(); ObjectMapper objectMapper = new ObjectMapper(); try { Map map = objectMapper.readValue(body, Map.class); maps.addAll(objectMapper.readValue(JSONUtil.toJsonStr(map.get("LIST_INFO")), new TypeReference>>() { })); log.info("获取采购订单-->>" + maps); } catch (JsonProcessingException e) { e.printStackTrace(); throw new RuntimeException(e); } }); return maps; } /** * 登记采购检验结果STD */ public Result getProcurementResults(String contract,String inAttr) { return getResult(contract,"REGIST_INSPECTION_RESULTS_STD", inAttr, "GET", "登记采购检验结果-->"); } /** * 原材料检验-检验后移库 * * @param inAttr * @return */ public Result moveReceipt(String contract,String inAttr) { return getResult(contract,"MOVE_RECEIPT_STD", inAttr, "GET", "检验后移库-->"); } /** * 原材料检验-采购接收更改批号 * * @param inAttr * @return */ public Result updateMoveReceiptLot(String contract,String inAttr) { return getResult(contract,"MODIFY_PURCH_RECEIPT_LOT_STD", inAttr, "GET", "修改采购订单批次号-->"); } /** * 查询库存数据 * * @param inAttr * @return */ public Result getIfsStock(String contract,String inAttr) { return getResult(contract,"QUERY_INVENTORY_INFO_STD", inAttr, "POST", "查询库存信息-->"); } /** * 库存物料批次属性新增修改接口 * * @param inAttr * @return */ public Result importPartLotAttr(String contract,String inAttr) { return getResult(contract,"IMPORT_PART_LOT_ATTR_STD", inAttr, "GET", "库存物料批次属性新增修改接口-->"); } /** * 通用接口 * @param contract IFS域 * @param procedureName 方法名 * @param inAttr 传参 * @param urlType 请求类型(GET/POST) * @param image 消息 * @return */ private Result getResult(String contract,String procedureName, String inAttr, String urlType, String image) { IfsProperties ifsProperties = getPropByContract(contract); JSONObject stockMap = new JSONObject(); stockMap.put("procedureName", procedureName); stockMap.put("contract", ifsProperties.getContract()); stockMap.put("contractKey", ifsProperties.getContractKeyPost()); stockMap.put("userId", "lims_user"); stockMap.put("inAttr", inAttr); String url = StringUtils.equals("GET",urlType)?ifsProperties.getCustorder():ifsProperties.getCustorderPort(); String body = HttpRequest.post(url).form(stockMap).execute().body(); log.info(image + body); ObjectMapper objectMapper = new ObjectMapper(); try { Map map = objectMapper.readValue(body, Map.class); String successFlag = map.get("SuccessFlag").toString(); if (Integer.valueOf(successFlag) == 1) { return Result.success(map); } else { return Result.fail(map.get("ErrorMsg").toString()); } } catch (JsonProcessingException e) { e.printStackTrace(); return Result.fail(e.getMessage()); } } /** * 获取添加请求信息 * @param procedureName 结构名称 * @param inAttr 请求参数 * @return */ private JSONObject getJsonObject(String procedureName, String inAttr,String contract,String contractKeyPost) { JSONObject stockMap = new JSONObject(); stockMap.put("procedureName", procedureName); stockMap.put("contract", contract); stockMap.put("contractKey", contractKeyPost); stockMap.put("userId", "lims_user"); stockMap.put("inAttr", inAttr); return stockMap; } }