自动化立体仓库 - WMS系统
lty
22 小时以前 d44606236559adf331ee38846ef6acb1b25e5eef
src/main/java/com/zy/third/erp/task/ERPLocDetlScheduler.java
@@ -1,5 +1,6 @@
package com.zy.third.erp.task;
import com.core.exception.CoolException;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.LocDetlChangelog;
import com.zy.asrs.mapper.LocDetlChangelogMapper;
@@ -35,7 +36,7 @@
    @Scheduled(cron = "${erp.refreshtime}")
    public void LocDetlScheduler() {
        if (!erpEnabled) return;
        boolean result = false;
        List<LocDetlChangelog> logs = locDetlChangelogMapper.selectUnprocessedLogs();
        for (LocDetlChangelog changelog : logs) {
@@ -47,8 +48,12 @@
                switch (action) {
                    case "INSERT":
                        String insertSql = buildInsertSql("asr_loc_detl", content);
                        erpSqlServer.update(insertSql);
                        if(erpSqlServer.update(insertSql) > 0){
                        log.info("同步ERP新增成功: locNo={}", item.getLocNo());
                            result = true;
                        }else{
                            log.info("同步ERP新增失败: locNo={}", item.getLocNo());
                        }
                        break;
                    case "UPDATE":
@@ -56,7 +61,6 @@
                            // 解析 JSON
                            Map<String, Object> dataMap = JSON.parseObject(changelog.getData(), Map.class);
                            Map<String, Object> afterMap = (Map<String, Object>) dataMap.get("after");
                            // 拼接 UPDATE SQL
                            StringBuilder setSql = new StringBuilder();
                            afterMap.forEach((k, v) -> {
@@ -69,27 +73,42 @@
                                }
                            });
                            setSql.deleteCharAt(setSql.length() - 1); // 去掉最后逗号
                            String updateSql = "UPDATE asr_loc_detl SET " + setSql + " WHERE loc_no='" + escapeSql((String)afterMap.get("loc_no")) + "' AND zpallet='" + escapeSql((String)afterMap.get("zpallet")) + "'";
                            erpSqlServer.update(updateSql);
                            String updateSql =
                                    "UPDATE asr_loc_detl SET " + setSql +
                                            " WHERE loc_no='" + escapeSql((String)afterMap.get("loc_no")) +
                                            "' AND zpallet='" + escapeSql((String)afterMap.get("zpallet")) +
                                            "' AND matnr='" + escapeSql((String)afterMap.get("matnr")) + "'";
                            if(erpSqlServer.update(updateSql) > 0){
                            log.info("同步ERP更新成功: locNo={}, zpallet={}", afterMap.get("loc_no"), afterMap.get("zpallet"));
                                result = true;
                            }else{
                                log.info("同步ERP更新失败: locNo={}, zpallet={}", afterMap.get("loc_no"), afterMap.get("zpallet"));
                            }
                        } catch (Exception e) {
                            log.error("更新ERP失败: locNo=" + changelog.getLocNo(), e);
                        }
                    case "DELETE":
                        String deleteSql = "DELETE FROM asr_loc_detl WHERE loc_no='" + escapeSql(item.getLocNo()) + "'";
                        erpSqlServer.update(deleteSql);
                        log.info("同步ERP删除成功: locNo={}", item.getLocNo());
                        break;
                    case "DELETE":
                        String deleteSql = "DELETE FROM asr_loc_detl WHERE " +
                                "loc_no='" + escapeSql(item.getLocNo()) + "' AND " +
                                "zpallet='" + escapeSql(item.getZpallet()) + "' AND " +
                                "matnr='" + escapeSql(item.getMatnr()) + "' AND " +
                                "anfme=" + item.getAnfme();
                        if(erpSqlServer.update(deleteSql) > 0){
                            log.info("同步ERP删除成功: locNo={}", item.getLocNo());
                            result = true;
                        }else{
                            log.info("同步ERP删除失败: locNo={}", item.getLocNo());
                        }
                        break;
                    default:
                        log.error("未知操作类型:" + action);
                }
                if(result){
                locDetlChangelogMapper.markProcessed(changelog.getId());
                }else {
                    throw new CoolException("同步失败");
                }
            } catch (Exception e) {
                log.error("同步ERP失败,日志ID:" + changelog.getId(), e);
            }