获取原材盘点单接口

接口说明

接口地址:

  • 获取盘点单数据接口: /gys/inspection-api-service/inventory/getInventoryList?projectId=347225275721728&beginTimestamp=20200615183500000

请求方式: GET

请求参数: projectId、beginTimestamp

重点说明:

  • 时间过滤条件是数据库每条记录的时间戳,不是应用报告的生成时间
  • 每次查询默认查出满足条件的前20条原材盘点期次数据,如果第21条及之后的数据的时间戳与第20条相同,则一同查出,返回的期次数据中包含每个期次下多个原材的盘点数据;
  • 取下一页数据时需要将上一次请求返回的数据中的maxTimestamp的值给下一次请求链接中的beginTimestamp
  • 数据不包含开始时间但包含结束时间。
    • 如果某个期次只添加了期次信息没有添加对应的原材信息,则该期次不会返回.
    • 期次下的原材记录的增删改操作都会刷新时间戳,每次查询包含新增及修改过的期次及原材数据
    • 返回数据中,每个期次数据下的原材数据都是全量返回
    • 项目层会包含库房信息,拌合站层查询不包含库房信息
    • 当传递id为项目层id,或使用项目层授权证且项目id不传递时,会查询项目层及项目下搅拌站数据

最佳实践

由于云端数据量较大,三方系统在通过接口请求数据时,我们建议项目ID(projectId)尽量传值,以项目为单位去请求数据。项目ID获取方式详见“获取集成项目接口协议”。

avatar

请求参数属性说明

参数名称 类型 必须 取值范围 默认值 描述
projectId Long N 项目ID,可为空;若使用租户层授权文件时,projectId为空查询全部项目数据,不为空时只查询对应项目的数据;若使用项目层授权文件时,为空则查询授权文件所属项目及下属拌合站的数据;不为空时只查询对应项目的数据;此项目ID获取方式详见获取集成项目
beginTimestamp String Y 开始时间, 字符串,时间包含毫秒,格式为yyyyMMddHHmmssSSS, 不能为空,如 20160319101010000,2016年3月19号10点10分10秒000毫秒

返回结果格式

{
    "data": {
        "inventoryCheckInfoVos": [    //返回的期次数据集合
            {
                "endTime": "2020-04-25 10:00:00",    //期次结束时间
                "id": 378046118256640,                //期次主键
                "inventoryDate": 202004,            //期次标识
                "materials": [        //期次下包含的原材数据
                    {
                        "id": 378046118285312,            //原材数据主键
                        "inventoryId": 378046118256640,    //所属期次id
                        "materialCode": "S11.001",        //材料编码
                        "materialId": 2494341,            //材料id
                        "materialName": "普通混凝土",     //材料名称
                        "materialUnitId": "4495347",    //第三方材料id
                        "realQuantity": 0,                //盘库数量
                        "spec": "",                        //材料规格
                        "texture": "",                    //材料材质
                        "unit": "立方米"                  //材料单位
                    }
                ],
                "mixProjectId": 1459383,                //所属搅拌站id
                "mixProjectName": "花香四季一期_2#搅拌站", //所属搅拌站名称
                "projectId": 1456353,                    //搅拌站上级项目id
                "projectName": "花香四季一期",            //搅拌站上级项目名称
                "rowTimestamp": 1589516832000            //时间戳
            },
            {
                "endTime": "2020-06-25 10:00:00",
                "id": 387695113093120,
                "inventoryDate": 202006,
                "materials": [
                    {
                        "id": 387695113138176,
                        "inventoryId": 387695113093120,
                        "materialCode": "I111.01.01.014",
                        "materialId": 1562959,
                        "materialName": "普通硅酸盐水泥",
                        "materialUnitId": "4495347",    
                        "realQuantity": 0,
                        "spec": "P.O32.5R",
                        "texture": "",
                        "unit": "吨",
                        "warehouseId": 15252333,        //库房名称(项目层数据包含库房信息)
                        "warehouseUnitId": "4495347",    //第三方库房id(项目层数据包含库房信息)
                        "warehouseName": "库房名称"          //库房名称(项目层数据包含库房信息)    
                    }
                ],
                "projectId": 1456353,                //项目id
                "projectName": "花香四季一期",        //项目名称
                "rowTimestamp": 1591872526000    
            }
        ],
        "maxTimestamp": "20200511190500000"
    },
    "errMsg": "",
    "success": true
}

Java代码示例

//1、请求的controller
public class InventoryController {
    @Autowired
    private InventoryCheckClient inventoryCheckClient;
    @Autowired
    private OrgClient orgClient;
    @Autowired
    private ProjectClient projectClient;
    @Autowired
    private MaterialFeignClient materialClient;
    @Autowired
    private WarehouseClient warehouseClient;


    /**
     * 增量获取原材盘点单
     *
     * @param projectId      项目id
     * @param beginTimestamp 开始时间
     * @return
     * @throws Exception
     */
    @ResponseBody
    @GetMapping(value = "/getInventoryList")
    public ResultBaseVo<InventoryListInfoVo> getInventoryList(@RequestParam(value = "projectId", required = false) Long projectId,
                                                              @RequestParam("beginTimestamp") String beginTimestamp) throws Exception {
        ResultBaseVo<InventoryListInfoVo> resultBaseVo = new ResultBaseVo<>();

        //校验时间格式
        if (!verifyBeginTime(beginTimestamp)) {
            resultBaseVo.setSuccess(Boolean.FALSE);
            resultBaseVo.setErrMsg("开始时间戳格式不正确");
            sendInventoryErrMsg(traceInfo, "开始时间戳格式不正确");
            return resultBaseVo;
        }

        try {
            resultBaseVo = queryInventoryList(projectId, beginTimestamp, traceInfo);
        } catch (Exception e) {
            sendErrorMsg(traceInfo, e, "查询原材盘点单失败");
            throw e;
        }
        List<String> searchKey = new ArrayList<>();
        for (Object inventoryInfo : resultBaseVo.getData().getInventoryCheckInfoVos()) {
            JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(inventoryInfo));
            searchKey.add("ID:" + jsonObject.getString("id"));
            searchKey.add("PROJECT_ID:" + jsonObject.getString("projectId"));
            searchKey.add("DATE_NO:" + jsonObject.getString("dateNo"));
        }
        traceInfo.setSearchKey(searchKey);
        DownLogTracer.sendEndMsg(traceInfo, resultBaseVo);
        return resultBaseVo;
    }

        /**
     * 增量获取用料申请单
     *
     * @param projectId      项目id
     * @param beginTimestamp 开始时间
     * @return
     * @throws Exception
     */
    private ResultBaseVo<InventoryListInfoVo> queryInventoryList(Long projectId, String beginTimestamp, TraceInfo traceInfo) throws Exception {
        ResultBaseVo<InventoryListInfoVo> resultVo = new ResultBaseVo<>();
        List<InventoryIntegrationInfoVo> infoVos;
        Map<Long, ProjectVo> projectIdAndVoMap;
        String maxTimestamp = beginTimestamp;

        try {
            projectIdAndVoMap = getProjectMap(projectId, traceInfo, resultVo);
            if (projectIdAndVoMap == null) {
                return resultVo;
            }
            //根据开始时间及项目id查询对应原材盘点期次及材料
            ResultBaseVo<List<InventoryCheckInfoVo>> infoVosResult = inventoryCheckClient
                    .queryInventoryAndMaterial(new ArrayList<>(projectIdAndVoMap.keySet()), beginTimestamp);
            if (!infoVosResult.isSuccess()) {
                resultVo.setSuccess(Boolean.FALSE);
                resultVo.setErrMsg("查询原材盘点单失败");
                sendInventoryErrMsg(traceInfo, "查询原材盘点单失败");
                return resultVo;
            }
            DateFormat maxTimeFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            Date maxDate = maxTimeFormat.parse(maxTimestamp);
            infoVos = buildDataInfos(projectIdAndVoMap, infoVosResult.getData(), maxDate);
            maxTimestamp = maxTimeFormat.format(maxDate);
        } catch (BizException e1) {
            log.error("获取单据信息失败!", e1);
            resultVo.setErrMsg("获取单据信息失败!" + e1.getMessage());
            resultVo.setSuccess(Boolean.FALSE);
            sendErrorMsg(traceInfo, e1, "查询收料磅单异常");
            return resultVo;
        }
        InventoryListInfoVo billListInfoVo = new InventoryListInfoVo();
        billListInfoVo.setMaxTimestamp(maxTimestamp);
        billListInfoVo.setInventoryCheckInfoVos(infoVos);
        resultVo.setSuccess(Boolean.TRUE);
        resultVo.setData(billListInfoVo);
        return resultVo;
    }

    /**
     * 校验时间格式是否正确
     *
     * @param beginTimestamp
     * @return
     */
    private boolean verifyBeginTime(String beginTimestamp) {
        SimpleDateFormat beginDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        try {
            beginDateFormat.parse(beginTimestamp);
        } catch (Exception ex) {
            log.error("标准接口获取失败,type:{},tenantId:{},projectId:{},beginTimestamp:{}", MicroServiceContext.getCurrentContext().getTenantId(), MicroServiceContext.getCurrentContext().getProjectId(), beginTimestamp);
            return false;
        }
        return true;
    }


//2、业务层
public class DJBillIntegrateBiz {
    private static final Long MaxLimit = 3000L;

    @Autowired
    DJBillIntegrateMapper djBillIntegrateMapper;

        /**
     * 根据时间及项目id增量查询原材盘点单期次及材料
     *
     * @param beginTimestamp
     * @param projectIds
     * @return
     */
    @GetMapping(path = "/queryInventoryAndMaterial")
    public ResultBaseVo<List<InventoryCheckInfoVo>> queryInventoryAndMaterial(@RequestParam("projectIds") List<Long> projectIds,
                                                                              @RequestParam("beginTimestamp") String beginTimestamp) {
        ResultBaseVo<List<InventoryCheckInfoVo>> baseVo = new ResultBaseVo<>();
        try {
            //查询原材盘点期次及材料信息
            List<InventoryCheckInfoVo> inventoryCheckInfos = inventoryCheckBiz.queryInventoryAndMaterial(projectIds, beginTimestamp);
            baseVo.setData(inventoryCheckInfos);
        } catch (Exception e) {
            log.error("查询原材盘点期次及材料异常!", e);
            baseVo.setSuccess(Boolean.FALSE);
            baseVo.setErrMsg("查询原材盘点期次及材料异常!" + e.getMessage());
        }
        return baseVo;
    }
}




// 3、mapper层
public interface InventoryCheckMapper {
    /**
     * 获取列表最大时间
     *
     * @param projectIds
     * @param beginTimestamp
     * @return
     */
    Date getInventoryMaxTime(@Param("projectIds") List<Long> projectIds,
                             @Param("beginTimestamp") String beginTimestamp);

    /**
     * 根据项目id,开始结束时间增量查询对应原材盘点期次信息
     *
     * @param projectIds
     * @param beginTimestamp
     * @param endTimestamp
     * @return
     */
    List<InventoryCheckInfoVo> queryInventoryCheckInfos(@Param("projectIds") List<Long> projectIds,
                                                        @Param("beginTimestamp") String beginTimestamp,
                                                        @Param("endTimestamp") String endTimestamp);

    /**
     * 根据inventoryIds 查询对应盘点期次材料信息
     *
     * @param inventoryIds
     * @return
     */
    List<InventoryMaterialInfoVo> queryMaterialListByInventoryIds(@Param("inventoryIds") List<Long> inventoryIds);

}

//4、mapper对应的xml文件

DJBillIntegrateMapper.ibm.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.glodon.gys.inspection.mapper.inventory.InventoryCheckMapper">
    <!--根据细表id获取细表信息-->
    <select id="getInventoryMaxTime" resultType="java.util.Date">
        select Max(F_ROW_TIMESTAMP) from
        (
        SELECT F_ROW_TIMESTAMP
        from t_inventory
        where
        <if test="projectIds!= null and projectIds.size > 0">
            F_PROJECT_ID in
            <foreach collection="projectIds" item="item" index="index" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="projectIds==null">
            F_PROJECT_ID !=-1
        </if>
        AND
        <![CDATA[ F_ROW_TIMESTAMP>#{beginTimestamp} ]]>
        order by
        F_ROW_TIMESTAMP ASC
        limit 20
        ) a
    </select>

    <select id="queryInventoryCheckInfos" resultType="com.glodon.gys.inspection.model.inventory.InventoryCheckInfoVo">
        SELECT
        F_ID as id ,
        F_PROJECT_ID as projectId,
        F_YEAR as year,
        F_MONTH as month,
        F_DATE_NO as dateNo,
        F_DATE as date,
        F_START_TIME as startTime,
        F_ROW_TIMESTAMP as rowTimestamp
        FROM t_inventory
        where
        F_PROJECT_ID in
        <foreach collection="projectIds" item="item" index="index" open="(" close=")" separator=",">
            #{item}
        </foreach>
        AND
        <![CDATA[ F_ROW_TIMESTAMP>#{beginTimestamp} ]]>
        AND
        <![CDATA[ F_ROW_TIMESTAMP<=#{endTimestamp} ]]>
        order by
        F_ROW_TIMESTAMP ASC
    </select>

    <select id="queryMaterialListByInventoryIds"
            resultType="com.glodon.gys.inspection.model.inventory.InventoryMaterialInfoVo">
        SELECT
        F_ID AS id,
        F_INVENTORY_ID AS inventoryId,
        F_MATERIAL_ID AS materialId,
        F_MATERIAL_CODE AS materialCode,
        F_UNIT AS unit,
        F_MATERIAL_NAME AS materialName,
        F_SPEC AS spec,
        F_TEXTURE AS texture,
        F_WAREHOUSE_ID AS warehouseId,
        F_WAREHOUSE_NAME AS warehouseName
        FROM
        T_INVENTORY_MATERIAL
        WHERE
        F_INVENTORY_ID in
        <foreach collection="inventoryIds" item="inventoryId" index="index" open="(" close=")" separator=",">
            #{inventoryId}
        </foreach>
    </select>
</mapper>



​

```

results matching ""

    No results matching ""