| | |
| | | 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; |
| | |
| | | @Scheduled(cron = "${erp.refreshtime}") |
| | | public void LocDetlScheduler() { |
| | | if (!erpEnabled) return; |
| | | |
| | | boolean result = false; |
| | | List<LocDetlChangelog> logs = locDetlChangelogMapper.selectUnprocessedLogs(); |
| | | |
| | | for (LocDetlChangelog changelog : logs) { |
| | |
| | | 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": |
| | |
| | | // 解析 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) -> { |
| | |
| | | } |
| | | }); |
| | | 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); |
| | | } |