huangjiayang
2025-04-17 27478d0e43742dfb8dffe445ff62a6fb824e36c0
【ADD】查询U9接口获取工单工序数据
已添加5个文件
679 ■■■■■ 文件已修改
aps-modules/aps-job/src/main/java/com/aps/job/domain/ApsWorkOrderProcess.java 239 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsWorkOrderProcessMapper.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/service/ApsWorkOrderProcessServiceImpl.java 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/service/IApsWorkOrderProcessService.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/resources/mapper/job/ApsWorkOrderProcessMapper.xml 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/domain/ApsWorkOrderProcess.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,239 @@
package com.aps.job.domain;
import com.aps.common.core.annotation.Excel;
import com.aps.common.core.web.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.io.Serial;
import java.util.Date;
/**
 * å·¥å•工序对象 aps_work_order_process
 *
 * @author hjy
 * @date 2025-04-17
 */
public class ApsWorkOrderProcess extends BaseEntity
{
    @Serial
    private static final long serialVersionUID = 1L;
    /** ä¸»é”®è‡ªå¢ž */
    private Long id;
    /** æ–™å· */
    @Excel(name = "料号")
    private String itemCode;
    /** å·¥å•号 */
    @Excel(name = "工单号")
    private String docNo;
    /** å·¥åºåºå· */
    @Excel(name = "工序序号")
    private String opNum;
    /** å·¥åºid */
    @Excel(name = "工序id")
    private String opId;
    /** å·¥åºåç§°-U9-WorkCenter */
    @Excel(name = "工序名称-U9-WorkCenter")
    private String processName;
    /** æ ‡å‡†å·¥æ—¶-小数 */
    @Excel(name = "标准工时-小数")
    private Float standardTime;
    /** å·¥åºè®¡åˆ’开始时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "工序计划开始时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date palnStartDate;
    /** å·¥åºè®¡åˆ’完成日期 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "工序计划完成日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date planCompleteDate;
    /** åŠ å·¥æ•°é‡-小数 */
    @Excel(name = "加工数量-小数")
    private Float processQty;
    /** åºŸå¼ƒæ•°é‡ */
    @Excel(name = "废弃数量")
    private Float scrapQty;
    /** å·¥åºçŠ¶æ€ */
    @Excel(name = "工序状态")
    private String opStatus;
    /** è´¦å¥— */
    @Excel(name = "账套")
    private String org;
    /** è´¦å¥—编码 */
    @Excel(name = "账套编码")
    private String orgCode;
    public void setId(Long id)
    {
        this.id = id;
    }
    public Long getId()
    {
        return id;
    }
    public void setItemCode(String itemCode)
    {
        this.itemCode = itemCode;
    }
    public String getItemCode()
    {
        return itemCode;
    }
    public void setDocNo(String docNo)
    {
        this.docNo = docNo;
    }
    public String getDocNo()
    {
        return docNo;
    }
    public void setOpNum(String opNum)
    {
        this.opNum = opNum;
    }
    public String getOpNum()
    {
        return opNum;
    }
    public void setOpId(String opId)
    {
        this.opId = opId;
    }
    public String getOpId()
    {
        return opId;
    }
    public void setProcessName(String processName)
    {
        this.processName = processName;
    }
    public String getProcessName()
    {
        return processName;
    }
    public void setStandardTime(Float standardTime)
    {
        this.standardTime = standardTime;
    }
    public Float getStandardTime()
    {
        return standardTime;
    }
    public void setPalnStartDate(Date palnStartDate)
    {
        this.palnStartDate = palnStartDate;
    }
    public Date getPalnStartDate()
    {
        return palnStartDate;
    }
    public void setPlanCompleteDate(Date planCompleteDate)
    {
        this.planCompleteDate = planCompleteDate;
    }
    public Date getPlanCompleteDate()
    {
        return planCompleteDate;
    }
    public void setProcessQty(Float processQty)
    {
        this.processQty = processQty;
    }
    public Float getProcessQty()
    {
        return processQty;
    }
    public void setScrapQty(Float scrapQty)
    {
        this.scrapQty = scrapQty;
    }
    public Float getScrapQty()
    {
        return scrapQty;
    }
    public void setOpStatus(String opStatus)
    {
        this.opStatus = opStatus;
    }
    public String getOpStatus()
    {
        return opStatus;
    }
    public void setOrg(String org)
    {
        this.org = org;
    }
    public String getOrg()
    {
        return org;
    }
    public void setOrgCode(String orgCode)
    {
        this.orgCode = orgCode;
    }
    public String getOrgCode()
    {
        return orgCode;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("itemCode", getItemCode())
            .append("docNo", getDocNo())
            .append("opNum", getOpNum())
            .append("opId", getOpId())
            .append("processName", getProcessName())
            .append("standardTime", getStandardTime())
            .append("palnStartDate", getPalnStartDate())
            .append("planCompleteDate", getPlanCompleteDate())
            .append("processQty", getProcessQty())
            .append("scrapQty", getScrapQty())
            .append("opStatus", getOpStatus())
            .append("org", getOrg())
            .append("orgCode", getOrgCode())
            .toString();
    }
}
aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsWorkOrderProcessMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.aps.job.mapper;
import com.aps.job.domain.ApsWorkOrderProcess;
import java.util.List;
import java.util.Map;
/**
 * å·¥å•工序Mapper接口
 *
 * @author hjy
 * @date 2025-04-17
 */
public interface ApsWorkOrderProcessMapper
{
    /**
     * æŸ¥è¯¢å·¥å•工序
     *
     * @param id å·¥å•工序主键
     * @return å·¥å•工序
     */
    public ApsWorkOrderProcess selectApsWorkOrderProcessById(Long id);
    /**
     * æŸ¥è¯¢å·¥å•工序列表
     *
     * @param apsWorkOrderProcess å·¥å•工序
     * @return å·¥å•工序集合
     */
    public List<ApsWorkOrderProcess> selectApsWorkOrderProcessList(ApsWorkOrderProcess apsWorkOrderProcess);
    /**
     * æ–°å¢žå·¥å•工序
     *
     * @param apsWorkOrderProcess å·¥å•工序
     * @return ç»“æžœ
     */
    public int insertApsWorkOrderProcess(ApsWorkOrderProcess apsWorkOrderProcess);
    /**
     * ä¿®æ”¹å·¥å•工序
     *
     * @param apsWorkOrderProcess å·¥å•工序
     * @return ç»“æžœ
     */
    public int updateApsWorkOrderProcess(ApsWorkOrderProcess apsWorkOrderProcess);
    /**
     * åˆ é™¤å·¥å•工序
     *
     * @param id å·¥å•工序主键
     * @return ç»“æžœ
     */
    public int deleteApsWorkOrderProcessById(Long id);
    /**
     * æ‰¹é‡åˆ é™¤å·¥å•工序
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteApsWorkOrderProcessByIds(Long[] ids);
    /**
     * æ ¹æ®å·¥å•号和工单工序号查询工单工序
     * @param map
     * @return
     */
    public Long existsByDocNoOpNumOpId(Map map);
}
aps-modules/aps-job/src/main/java/com/aps/job/service/ApsWorkOrderProcessServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,175 @@
package com.aps.job.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aps.common.core.utils.StringUtils;
import com.aps.job.domain.ApsWorkOrderProcess;
import com.aps.job.mapper.ApsWorkOrderProcessMapper;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * å·¥å•工序Service业务层处理
 *
 * @author hjy
 * @date 2025-04-17
 */
@Service
public class ApsWorkOrderProcessServiceImpl implements IApsWorkOrderProcessService
{
    @Value("${u9.workOrderProcessUrl}")
    private String u9WorkOrderProcessUrl;
    private final Logger logger = LoggerFactory.getLogger(ApsWorkOrderProcessServiceImpl.class);
    @Resource
    private RestTemplate restTemplate;
    @Resource
    private ApsWorkOrderProcessMapper apsWorkOrderProcessMapper;
    /**
     * æŸ¥è¯¢å·¥å•工序
     *
     * @param id å·¥å•工序主键
     * @return å·¥å•工序
     */
    @Override
    public ApsWorkOrderProcess selectApsWorkOrderProcessById(Long id)
    {
        return apsWorkOrderProcessMapper.selectApsWorkOrderProcessById(id);
    }
    /**
     * æŸ¥è¯¢å·¥å•工序列表
     *
     * @param apsWorkOrderProcess å·¥å•工序
     * @return å·¥å•工序
     */
    @Override
    public List<ApsWorkOrderProcess> selectApsWorkOrderProcessList(ApsWorkOrderProcess apsWorkOrderProcess)
    {
        return apsWorkOrderProcessMapper.selectApsWorkOrderProcessList(apsWorkOrderProcess);
    }
    /**
     * æ–°å¢žå·¥å•工序
     *
     * @param apsWorkOrderProcess å·¥å•工序
     * @return ç»“æžœ
     */
    @Override
    public int insertApsWorkOrderProcess(ApsWorkOrderProcess apsWorkOrderProcess)
    {
        return apsWorkOrderProcessMapper.insertApsWorkOrderProcess(apsWorkOrderProcess);
    }
    /**
     * ä¿®æ”¹å·¥å•工序
     *
     * @param apsWorkOrderProcess å·¥å•工序
     * @return ç»“æžœ
     */
    @Override
    public int updateApsWorkOrderProcess(ApsWorkOrderProcess apsWorkOrderProcess)
    {
        return apsWorkOrderProcessMapper.updateApsWorkOrderProcess(apsWorkOrderProcess);
    }
    /**
     * æ‰¹é‡åˆ é™¤å·¥å•工序
     *
     * @param ids éœ€è¦åˆ é™¤çš„工单工序主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteApsWorkOrderProcessByIds(Long[] ids)
    {
        return apsWorkOrderProcessMapper.deleteApsWorkOrderProcessByIds(ids);
    }
    /**
     * åˆ é™¤å·¥å•工序信息
     *
     * @param id å·¥å•工序主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteApsWorkOrderProcessById(Long id)
    {
        return apsWorkOrderProcessMapper.deleteApsWorkOrderProcessById(id);
    }
    @Override
    public void getWorkOrderProcessFromU9(List<String> docNos) throws Exception {
        // è®¾ç½®è¯·æ±‚头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        // è®¾ç½®è¯·æ±‚体
        JSONObject requestBody = new JSONObject();
        requestBody.put("DocList", docNos);
        // åˆ›å»ºHttpEntity对象
        HttpEntity<String> request = new HttpEntity<>(requestBody.toJSONString(), headers);
        // å‘送POST请求
        ResponseEntity<String> response = restTemplate.postForEntity(u9WorkOrderProcessUrl, request, String.class);
        if (response.getStatusCode().is2xxSuccessful()) {
            String responseBody = response.getBody();
            if(StringUtils.isEmpty(responseBody)){
                JSONObject responseBodyJson = JSONObject.parseObject(responseBody);
                if(!"200".equals(responseBodyJson.getString("status"))){
                    JSONArray jsonArray = responseBodyJson.getJSONArray("data");
                    if (jsonArray != null) {
                        jsonArray.forEach(jsonObject -> {
                            JSONObject process = (JSONObject) jsonObject;
                            Map<String, Object> params = new HashMap<>();
                            params.put("docNo", process.getString("DocNo"));
                            params.put("opNum", process.getString("OpNum"));
                            params.put("opId", process.getString("OpID"));
                            Long existsId = apsWorkOrderProcessMapper.existsByDocNoOpNumOpId(params);
                            ApsWorkOrderProcess apsWorkOrderProcess = new ApsWorkOrderProcess();
                            apsWorkOrderProcess.setItemCode(process.getString("ItemCode"));
                            apsWorkOrderProcess.setDocNo(process.getString("DocNo"));
                            apsWorkOrderProcess.setOpNum(process.getString("OpNum"));
                            apsWorkOrderProcess.setOpId(process.getString("OpID"));
                            apsWorkOrderProcess.setProcessName(process.getString("WorkCenter"));
                            apsWorkOrderProcess.setStandardTime(process.getFloat("StandardTime"));
                            apsWorkOrderProcess.setPalnStartDate(process.getDate("PlanStartDate"));
                            apsWorkOrderProcess.setPlanCompleteDate(process.getDate("PlanCompleteDate"));
                            apsWorkOrderProcess.setProcessQty(process.getFloat("ProcessQty"));
                            apsWorkOrderProcess.setScrapQty(process.getFloat("ScrapQty"));
                            apsWorkOrderProcess.setOpStatus(process.getString("OpStatus"));
                            apsWorkOrderProcess.setOrg(process.getString("Org"));
                            apsWorkOrderProcess.setOrgCode(process.getString("OrgCode"));
                            if(existsId!=null){
                                apsWorkOrderProcess.setId(existsId);
                                apsWorkOrderProcessMapper.updateApsWorkOrderProcess(apsWorkOrderProcess);
                                logger.info("【UPDATE】获取并更新U9工序成功!【工单号:{},工序号:{}】", docNos, apsWorkOrderProcess.getOpNum());
                            }else{
                                apsWorkOrderProcessMapper.insertApsWorkOrderProcess(apsWorkOrderProcess);
                                logger.info("【INSERT】获取并插入U9工序成功!【工单号:{}, å·¥åºå·ï¼š{}】", docNos, apsWorkOrderProcess.getOpNum());
                            }
                        });
                    }
                }else{
                    logger.error("【ERROR】查询U9工序失败!【工单号:{}, é”™è¯¯ç ï¼š{},错误信息:{}】", docNos, responseBodyJson.getString("status"), responseBodyJson.getString("message"));
                }
            }else{
                logger.warn("【WARNING】未查询到U9工序!【工单号:{}】", docNos);
            }
        } else {
            throw new Exception("【ERROR】获取U9工序失败!【工单号:"+ docNos +"】");
        }
    }
}
aps-modules/aps-job/src/main/java/com/aps/job/service/IApsWorkOrderProcessService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,69 @@
package com.aps.job.service;
import com.aps.job.domain.ApsWorkOrderProcess;
import java.util.List;
/**
 * å·¥å•工序Service接口
 *
 * @author hjy
 * @date 2025-04-17
 */
public interface IApsWorkOrderProcessService
{
    /**
     * æŸ¥è¯¢å·¥å•工序
     *
     * @param id å·¥å•工序主键
     * @return å·¥å•工序
     */
    public ApsWorkOrderProcess selectApsWorkOrderProcessById(Long id);
    /**
     * æŸ¥è¯¢å·¥å•工序列表
     *
     * @param apsWorkOrderProcess å·¥å•工序
     * @return å·¥å•工序集合
     */
    public List<ApsWorkOrderProcess> selectApsWorkOrderProcessList(ApsWorkOrderProcess apsWorkOrderProcess);
    /**
     * æ–°å¢žå·¥å•工序
     *
     * @param apsWorkOrderProcess å·¥å•工序
     * @return ç»“æžœ
     */
    public int insertApsWorkOrderProcess(ApsWorkOrderProcess apsWorkOrderProcess);
    /**
     * ä¿®æ”¹å·¥å•工序
     *
     * @param apsWorkOrderProcess å·¥å•工序
     * @return ç»“æžœ
     */
    public int updateApsWorkOrderProcess(ApsWorkOrderProcess apsWorkOrderProcess);
    /**
     * æ‰¹é‡åˆ é™¤å·¥å•工序
     *
     * @param ids éœ€è¦åˆ é™¤çš„工单工序主键集合
     * @return ç»“æžœ
     */
    public int deleteApsWorkOrderProcessByIds(Long[] ids);
    /**
     * åˆ é™¤å·¥å•工序信息
     *
     * @param id å·¥å•工序主键
     * @return ç»“æžœ
     */
    public int deleteApsWorkOrderProcessById(Long id);
    /**
     * ä»ŽU9获取工单工序信息
     * @param docNo
     * @return
     */
    public void getWorkOrderProcessFromU9(List<String> docNos) throws Exception;
}
aps-modules/aps-job/src/main/resources/mapper/job/ApsWorkOrderProcessMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,126 @@
<?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.aps.job.mapper.ApsWorkOrderProcessMapper">
    <resultMap type="ApsWorkOrderProcess" id="ApsWorkOrderProcessResult">
        <result property="id"    column="id"    />
        <result property="itemCode"    column="item_code"    />
        <result property="docNo"    column="doc_no"    />
        <result property="opNum"    column="op_num"    />
        <result property="opId"    column="op_id"    />
        <result property="processName"    column="process_name"    />
        <result property="standardTime"    column="standard_time"    />
        <result property="palnStartDate"    column="paln_start_date"    />
        <result property="planCompleteDate"    column="plan_complete_date"    />
        <result property="processQty"    column="process_qty"    />
        <result property="scrapQty"    column="scrap_qty"    />
        <result property="opStatus"    column="op_status"    />
        <result property="org"    column="org"    />
        <result property="org_code"    column="org_code"    />
    </resultMap>
    <sql id="selectApsWorkOrderProcessVo">
        select id, item_code, doc_no, op_num, op_id, process_name, standard_time, paln_start_date, plan_complete_date, process_qty, scrap_qty, op_status, org, org_code from aps_work_order_process
    </sql>
    <select id="selectApsWorkOrderProcessList" parameterType="ApsWorkOrderProcess" resultMap="ApsWorkOrderProcessResult">
        <include refid="selectApsWorkOrderProcessVo"/>
        <where>
            <if test="itemCode != null  and itemCode != ''"> and item_code = #{itemCode}</if>
            <if test="docNo != null  and docNo != ''"> and doc_no = #{docNo}</if>
            <if test="opNum != null  and opNum != ''"> and op_num = #{opNum}</if>
            <if test="opId != null  and opId != ''"> and op_id = #{opId}</if>
            <if test="processName != null  and processName != ''"> and process_name like concat('%', #{processName}, '%')</if>
            <if test="standardTime != null  and standardTime != ''"> and standard_time = #{standardTime}</if>
            <if test="palnStartDate != null "> and paln_start_date = #{palnStartDate}</if>
            <if test="planCompleteDate != null "> and plan_complete_date = #{planCompleteDate}</if>
            <if test="processQty != null "> and process_qty = #{processQty}</if>
            <if test="scrapQty != null "> and scrap_qty = #{scrapQty}</if>
            <if test="opStatus != null  and opStatus != ''"> and op_status = #{opStatus}</if>
            <if test="org != null  and org != ''"> and org = #{org}</if>
            <if test="org_code != null  and opStatus != ''"> and op_status = #{opStatus}</if>
        </where>
    </select>
    <select id="selectApsWorkOrderProcessById" parameterType="Long" resultMap="ApsWorkOrderProcessResult">
        <include refid="selectApsWorkOrderProcessVo"/>
        where id = #{id}
    </select>
    <insert id="insertApsWorkOrderProcess" parameterType="ApsWorkOrderProcess">
        insert into aps_work_order_process
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="itemCode != null">item_code,</if>
            <if test="docNo != null">doc_no,</if>
            <if test="opNum != null">op_num,</if>
            <if test="opId != null">op_id,</if>
            <if test="processName != null">process_name,</if>
            <if test="standardTime != null">standard_time,</if>
            <if test="palnStartDate != null">paln_start_date,</if>
            <if test="planCompleteDate != null">plan_complete_date,</if>
            <if test="processQty != null">process_qty,</if>
            <if test="scrapQty != null">scrap_qty,</if>
            <if test="opStatus != null">op_status,</if>
            <if test="org != null">org,</if>
            <if test="orgCode != null">org_code,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="itemCode != null">#{itemCode},</if>
            <if test="docNo != null">#{docNo},</if>
            <if test="opNum != null">#{opNum},</if>
            <if test="opId != null">#{opId},</if>
            <if test="processName != null">#{processName},</if>
            <if test="standardTime != null">#{standardTime},</if>
            <if test="palnStartDate != null">#{palnStartDate},</if>
            <if test="planCompleteDate != null">#{planCompleteDate},</if>
            <if test="processQty != null">#{processQty},</if>
            <if test="scrapQty != null">#{scrapQty},</if>
            <if test="opStatus != null">#{opStatus},</if>
            <if test="org != null">#{org},</if>
            <if test="orgCode != null">#{orgCode},</if>
         </trim>
    </insert>
    <update id="updateApsWorkOrderProcess" parameterType="ApsWorkOrderProcess">
        update aps_work_order_process
        <trim prefix="SET" suffixOverrides=",">
            <if test="itemCode != null">item_code = #{itemCode},</if>
            <if test="docNo != null">doc_no = #{docNo},</if>
            <if test="opNum != null">op_num = #{opNum},</if>
            <if test="opId != null">op_id = #{opId},</if>
            <if test="processName != null">process_name = #{processName},</if>
            <if test="standardTime != null">standard_time = #{standardTime},</if>
            <if test="palnStartDate != null">paln_start_date = #{palnStartDate},</if>
            <if test="planCompleteDate != null">plan_complete_date = #{planCompleteDate},</if>
            <if test="processQty != null">process_qty = #{processQty},</if>
            <if test="scrapQty != null">scrap_qty = #{scrapQty},</if>
            <if test="opStatus != null">op_status = #{opStatus},</if>
            <if test="org != null">org = #{org},</if>
            <if test="orgCode != null">org_code = #{orgCode},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteApsWorkOrderProcessById" parameterType="Long">
        delete from aps_work_order_process where id = #{id}
    </delete>
    <delete id="deleteApsWorkOrderProcessByIds" parameterType="String">
        delete from aps_work_order_process where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    <select id="existsByDocNoOpNumOpId" parameterType="map" resultMap="Long">
        select id from aps_work_order_process
        where doc_no = #{docNo}
          and op_num = #{opNum}
          and op_id = #{opId}
    </select>
</mapper>