huangjiayang
2025-04-18 1b49796d9b6a6d90738bd0b23ee2abe05e2aa131
【UPDATE】1.修改同步U9工单工序方法 2.增加同步工单工序数据定时任务
已修改8个文件
227 ■■■■ 文件已修改
aps-modules/aps-job/src/main/java/com/aps/job/domain/ApsWorkOrderJob.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsWorkOrderJobMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsWorkOrderProcessMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/service/IApsWorkOrderProcessService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderProcessServiceImpl.java 109 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/task/RyTask.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/resources/mapper/job/ApsWorkOrderJobMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/resources/mapper/job/ApsWorkOrderProcessMapper.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-job/src/main/java/com/aps/job/domain/ApsWorkOrderJob.java
@@ -1,12 +1,12 @@
package com.aps.job.domain;
import java.math.BigDecimal;
import com.aps.common.core.annotation.Excel;
import com.aps.common.core.web.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.aps.common.core.annotation.Excel;
import com.aps.common.core.web.domain.BaseEntity;
import java.math.BigDecimal;
/**
 * 工单同步对象 aps_work_order_job
@@ -439,6 +439,7 @@
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .append("processStatus", getProcessStatus())
            .toString();
    }
}
aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsWorkOrderJobMapper.java
@@ -1,8 +1,9 @@
package com.aps.job.mapper;
import java.util.List;
import com.aps.job.domain.ApsWorkOrderJob;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
 * 工单同步Mapper接口
@@ -63,4 +64,11 @@
    int batchInsertApsWorkOrderJob(List<ApsWorkOrderJob> jobs);
    /**
     * 更新工单工序同步状态
     * @param docNo
     * @return
     */
    public int updateApsWorkOrderJobPrccessStatus(String docNo);
}
aps-modules/aps-job/src/main/java/com/aps/job/mapper/ApsWorkOrderProcessMapper.java
@@ -2,6 +2,7 @@
import com.aps.job.domain.ApsWorkOrderProcess;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
@@ -66,7 +67,21 @@
    /**
     * 根据工单号和工单工序号查询工单工序
     * @param map
     * @return
     * @return 工序id
     */
    public Long existsByDocNoOpNumOpId(Map map);
    /**
     * 批量插入工单工序
     * @param list
     * @return 更新数量
     */
    int updateApsWorkOrderProcessBatch(@Param("list") List<ApsWorkOrderProcess> list);
    /**
     * 批量插入工单工序
     * @param list
     * @return 插入数量
     */
    int insertApsWorkOrderProcessBatch(@Param("list") List<ApsWorkOrderProcess> list);
}
aps-modules/aps-job/src/main/java/com/aps/job/service/IApsWorkOrderProcessService.java
@@ -66,4 +66,9 @@
     * @return
     */
    public void getWorkOrderProcessFromU9(List<String> docNos) throws Exception;
    /**
     * 同步工单工序数据
     */
    public void syncWorkOrderProcessData();
}
aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderProcessServiceImpl.java
@@ -2,13 +2,19 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aps.common.core.utils.DateUtils;
import com.aps.common.core.utils.StringUtils;
import com.aps.job.domain.ApsWorkOrderJob;
import com.aps.job.domain.ApsWorkOrderJobLog;
import com.aps.job.domain.ApsWorkOrderProcess;
import com.aps.job.mapper.ApsWorkOrderJobMapper;
import com.aps.job.mapper.ApsWorkOrderProcessMapper;
import com.aps.job.service.IApsWorkOrderJobLogService;
import com.aps.job.service.IApsWorkOrderProcessService;
import jakarta.annotation.Resource;
import com.github.pagehelper.PageHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
@@ -17,6 +23,7 @@
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -35,11 +42,17 @@
    private final Logger logger = LoggerFactory.getLogger(ApsWorkOrderProcessServiceImpl.class);
    @Resource
    @Autowired
    private RestTemplate restTemplate;
    @Resource
    @Autowired
    private ApsWorkOrderProcessMapper apsWorkOrderProcessMapper;
    @Autowired
    private ApsWorkOrderJobMapper apsWorkOrderJobMapper;
    @Autowired
    private IApsWorkOrderJobLogService apsWorkOrderJobLogService;
    /**
     * 查询工单工序
@@ -121,19 +134,33 @@
        // 设置请求体
        JSONObject requestBody = new JSONObject();
        requestBody.put("DocList", docNos);
        requestBody.put("PageIndex", 1);
        requestBody.put("PageSize", 1000);
        // 创建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"))){
        ApsWorkOrderJobLog apsWorkOrderJobLog = new ApsWorkOrderJobLog();
        apsWorkOrderJobLog.setRequestData(requestBody.toJSONString());
        apsWorkOrderJobLog.setCreateTime(DateUtils.getNowDate());
        apsWorkOrderJobLog.setBizType("work_order_process");
        apsWorkOrderJobLog.setResult("SUCCESS");
        apsWorkOrderJobLogService.insertApsWorkOrderJobLog(apsWorkOrderJobLog);
        if (response.getStatusCode().is2xxSuccessful()) {
            if(!StringUtils.isEmpty(responseBody)){
                if("200".equals(responseBodyJson.getString("status"))){
                    JSONArray jsonArray = responseBodyJson.getJSONArray("data");
                    if (jsonArray != null) {
                        jsonArray.forEach(jsonObject -> {
                            JSONObject process = (JSONObject) jsonObject;
                    if (!jsonArray.isEmpty()) {
                        List<ApsWorkOrderProcess> addList = new ArrayList<>();
                        List<ApsWorkOrderProcess> updateList = new ArrayList<>();
                        String nowDocNo = null;
                        for (Object o : jsonArray) {
                            JSONObject process = (JSONObject) o;
                            if (nowDocNo == null) {
                                nowDocNo = process.getString("DocNo");
                            }
                            Map<String, Object> params = new HashMap<>();
                            params.put("docNo", process.getString("DocNo"));
                            params.put("opNum", process.getString("OpNum"));
@@ -155,22 +182,74 @@
                            apsWorkOrderProcess.setOrgCode(process.getString("OrgCode"));
                            if(existsId!=null){
                                apsWorkOrderProcess.setId(existsId);
                                apsWorkOrderProcessMapper.updateApsWorkOrderProcess(apsWorkOrderProcess);
                                logger.info("【UPDATE】获取并更新U9工序成功!【工单号:{},工序号:{}】", docNos, apsWorkOrderProcess.getOpNum());
                                updateList.add(apsWorkOrderProcess);
                            }else{
                                apsWorkOrderProcessMapper.insertApsWorkOrderProcess(apsWorkOrderProcess);
                                logger.info("【INSERT】获取并插入U9工序成功!【工单号:{}, 工序号:{}】", docNos, apsWorkOrderProcess.getOpNum());
                                addList.add(apsWorkOrderProcess);
                            }
                        });
                            if(!nowDocNo.equals(process.getString("DocNo"))){
                                //更新工单同步工序状态
                                apsWorkOrderJobMapper.updateApsWorkOrderJobPrccessStatus(nowDocNo);
                                nowDocNo = process.getString("DocNo");
                            }
                        }
                        if(!updateList.isEmpty()){
                            apsWorkOrderProcessMapper.updateApsWorkOrderProcessBatch(updateList);
                            apsWorkOrderJobLog.setResult("ok update "+updateList.size());
                            apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
                            logger.info("【UPDATE】获取并更新U9工序成功!【工单号:{}】", docNos);
                        }
                        if(!addList.isEmpty()){
                            apsWorkOrderProcessMapper.insertApsWorkOrderProcessBatch(addList);
                            apsWorkOrderJobLog.setResult("ok insert "+updateList.size());
                            apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
                            logger.info("【INSERT】获取并插入U9工序成功!【工单号:{}】", docNos);
                        }
                    }
                }else{
                    apsWorkOrderJobLog.setResponseData(response.getBody());
                    apsWorkOrderJobLog.setResult("fail");
                    apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
                    logger.error("【ERROR】查询U9工序失败!【工单号:{}, 错误码:{},错误信息:{}】", docNos, responseBodyJson.getString("status"), responseBodyJson.getString("message"));
                }
            }else{
                logger.warn("【WARNING】未查询到U9工序!【工单号:{}】", docNos);
            }
        } else {
            throw new Exception("【ERROR】获取U9工序失败!【工单号:"+ docNos +"】");
            apsWorkOrderJobLog.setResponseData(response.getBody());
            apsWorkOrderJobLog.setResult("fail");
            apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
            throw new Exception("【ERROR】查询U9工序失败!【工单号:{"+ docNos +"}, 错误码:{"+ responseBodyJson.getString("status") +"},错误信息:{"+ responseBodyJson.getString("message") +"}】");
        }
    }
    @Override
    public void syncWorkOrderProcessData() {
        try{
            //分页查询工单
            ApsWorkOrderJob apsWorkOrderJob = new ApsWorkOrderJob();
            apsWorkOrderJob.setProcessStatus("0");
            List<ApsWorkOrderJob> list = apsWorkOrderJobMapper.selectApsWorkOrderJobList(apsWorkOrderJob);
            int pageSize = 100;
            int allPage = list.size()/pageSize;
//            int allPage = 1;
            for (int i = 1; i <= allPage; i++) {
                long startTime = System.currentTimeMillis();
                PageHelper.startPage(i, pageSize);
                List<ApsWorkOrderJob> pageList = apsWorkOrderJobMapper.selectApsWorkOrderJobList(apsWorkOrderJob);
                if(!pageList.isEmpty()){
                    List<String> docNos = new ArrayList<>();
                    for (ApsWorkOrderJob apsWorkOrderJob1 : pageList){
                        docNos.add(apsWorkOrderJob1.getDocNo());
                    }
                    getWorkOrderProcessFromU9(docNos);
                }
                long endTime = System.currentTimeMillis(); // 记录结束时间
                long duration = endTime - startTime; // 计算运行时间
                System.out.println("运行时间:"+ duration +"毫秒");
            }
        }catch (Exception e){
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    }
}
aps-modules/aps-job/src/main/java/com/aps/job/task/RyTask.java
@@ -1,7 +1,9 @@
package com.aps.job.task;
import org.springframework.stereotype.Component;
import com.aps.common.core.utils.StringUtils;
import com.aps.job.service.IApsWorkOrderProcessService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
 * 定时任务调度测试
@@ -11,6 +13,9 @@
@Component("ryTask")
public class RyTask
{
    @Autowired
    private IApsWorkOrderProcessService iApsWorkOrderProcessService;
    public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i)
    {
        System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i));
@@ -25,4 +30,12 @@
    {
        System.out.println("执行无参方法");
    }
    /**
     * 同步工单工序数据
     */
    public void syncWorkOrderProcessData()
    {
        iApsWorkOrderProcessService.syncWorkOrderProcessData();
    }
}
aps-modules/aps-job/src/main/resources/mapper/job/ApsWorkOrderJobMapper.xml
@@ -35,6 +35,7 @@
        <result property="createTime"    column="create_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="processStatus"    column="process_status"    />
    </resultMap>
@@ -276,4 +277,8 @@
        </foreach>
    </insert>
    <update id="updateApsWorkOrderJobPrccessStatus" parameterType="String">
        update aps_work_order_job set process_status='1' where doc_no = #{docNo}
    </update>
</mapper>
aps-modules/aps-job/src/main/resources/mapper/job/ApsWorkOrderProcessMapper.xml
@@ -40,7 +40,7 @@
            <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>
            <if test="org_code != null  and org_code != ''"> and org_code = #{orgCode}</if>
        </where>
    </select>
    
@@ -123,4 +123,59 @@
          and op_id = #{opId}
    </select>
    <update id="updateApsWorkOrderProcessBatch">
        <foreach collection="list" item="item" separator=";">
            UPDATE aps_work_order_process
            SET item_code = #{item.itemCode},
            doc_no = #{item.docNo},
            op_num = #{item.opNum},
            op_id = #{item.opId},
            process_name = #{item.processName},
            standard_time = #{item.standardTime},
            plan_start_date = #{item.palnStartDate},
            plan_complete_date = #{item.planCompleteDate},
            process_qty = #{item.processQty},
            scrap_qty = #{item.scrapQty},
            op_status = #{item.opStatus},
            org = #{item.org},
            org_code = #{item.orgCode}
            WHERE id = #{item.id}
        </foreach>
    </update>
    <insert id="insertApsWorkOrderProcessBatch">
        INSERT INTO aps_work_order_process (
        item_code,
        doc_no,
        op_num,
        op_id,
        process_name,
        standard_time,
        plan_start_date,
        plan_complete_date,
        process_qty,
        scrap_qty,
        op_status,
        org,
        org_code
        ) VALUES
        <foreach collection="list" item="item" separator=",">
            (
            #{item.itemCode},
            #{item.docNo},
            #{item.opNum},
            #{item.opId},
            #{item.processName},
            #{item.standardTime},
            #{item.palnStartDate},
            #{item.planCompleteDate},
            #{item.processQty},
            #{item.scrapQty},
            #{item.opStatus},
            #{item.org},
            #{item.orgCode}
            )
        </foreach>
    </insert>
</mapper>