package weaver.shouwen.cronjob; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import weaver.conn.RecordSet; import weaver.general.BaseBean; import weaver.interfaces.schedule.BaseCronJob; import java.util.*; /** * @author:CL * @date:2023/2/14 10:16 */ public class DocreceiveunitTimeCron extends BaseCronJob { private static final Logger LOGGER = LoggerFactory.getLogger("收发文单位job"); @Override public void execute() { LOGGER.info(" com.weaver.shouwen.cronjob.DocreceiveunitTimeCron 已进入"); // 取到部门值 BaseBean bb = new BaseBean(); //所属机构 int subcompanyid = Integer.parseInt(bb.getPropValue("gongwenTimesubcompanyid", "subcompanyid")); //外部单位 int companytype = Integer.parseInt(bb.getPropValue("gongwenTimesubcompanyid", "companytype")); // 先查标准表 存入list // String selBzSql = "SELECT id,receiveunitname,canceled from docreceiveunit where subcompanyid="+subcompanyid+" and companytype="+companytype+""; String selBzSql = "SELECT id,receiveunitname,canceled from docreceiveunit where subcompanyid=? and companytype=?"; RecordSet recordSet = new RecordSet(); boolean flag = recordSet.executeQuery(selBzSql,subcompanyid,companytype); List> docList = new ArrayList<>(); if (flag) { while (recordSet.next()) { Map map = new HashMap<>(); // 标准表里1是封存0是启用 map.put("id", recordSet.getString("id")); map.put("单位名称", recordSet.getString("receiveunitname")); map.put("是否封存", recordSet.getString("canceled")); docList.add(map); } } // 再查建模表 存入list String selJmSql = "SELECT id,dwmc,sjzt from formtable_main_18"; recordSet = new RecordSet(); boolean flag2 = recordSet.executeQuery(selJmSql); List> jianmoList = new ArrayList<>(); if (flag2) { while (recordSet.next()) { Map map = new HashMap<>(); // 建模表里1是启用0是封存 map.put("id", recordSet.getString("id")); map.put("单位名称", recordSet.getString("dwmc")); map.put("是否封存", recordSet.getString("sjzt")); jianmoList.add(map); } } // 如果测试表开始就无数据 直接插入 建模表中数据 if (docList.size() == 0) { // 封存 String canceled = null; for (Map jianmoMap : jianmoList) { String insertSql = "INSERT into docreceiveunit " + "(receiveunitname,companytype,subcompanyid,showorder,canceled) VALUES" + "('" + jianmoMap.get("单位名称") + "','"+companytype+"','" + subcompanyid + "','.00'," + ("0".equals(jianmoMap.get("是否封存"))?"1":"0") + ")"; boolean b = recordSet.execute(insertSql); LOGGER.info(" com.weaver.shouwen.cronjob.DocreceiveunitTimeCron 标准表内为空 插入数据行"); } } else { // 比对结果 String insertSql = null; String updateSql = null; HashSet jianmoNameSet = new HashSet<>(); HashSet docNameSet = new HashSet<>(); HashSet deleteset = new HashSet<>(); for (Map jianmoMap : jianmoList) { jianmoNameSet.add((String) jianmoMap.get("单位名称")); // 判断是否需要新增 Integer fg = 0; for (Map docMap : docList) { //如果建模表没有与标准表匹配的单位名称,则删除标准表的数据 docNameSet.add((String) docMap.get("单位名称") ); // 如果单位名称一样 但封存状态不一样 就更新他的封存状态 if (docMap.get("单位名称").equals(jianmoMap.get("单位名称")) && docMap.get("是否封存").equals(jianmoMap.get("是否封存"))) { // 更新封存状态 updateSql = "UPDATE docreceiveunit set canceled='" + ("0".equals(jianmoMap.get("是否封存"))?"1":"0") + "' WHERE receiveunitname='" + jianmoMap.get("单位名称") + "'"; boolean b = recordSet.executeUpdate(updateSql); LOGGER.info(" com.weaver.shouwen.cronjob.DocreceiveunitTimeCron 更新数据sql执行结果 [{}]", b); } // 如果有一样的 就break if (docMap.get("单位名称").equals(jianmoMap.get("单位名称"))) { fg = 1; break; } } // 遍历完如果没有一样的就加入 if (fg == 0) { insertSql = "INSERT into docreceiveunit " + "(receiveunitname,companytype,subcompanyid,showorder,canceled) VALUES" + "('" + jianmoMap.get("单位名称") + "','"+companytype+"','" + subcompanyid + "','.00',"+("0".equals(jianmoMap.get("是否封存"))?"1":"0")+")"; boolean b = recordSet.execute(insertSql); LOGGER.info(" com.weaver.shouwen.cronjob.DocreceiveunitTimeCron 新增了数据"); } } //如果建模表没有与标准表匹配的单位名称,则删除标准表的数据 deleteset.addAll(docNameSet); deleteset.removeAll(jianmoNameSet); String deleteSql=null; String id=""; for(String receiveunitname: deleteset){ deleteSql= "select id from docreceiveunit where receiveunitname=?"; recordSet.executeQuery(deleteSql,receiveunitname); if (recordSet.next()) { id = recordSet.getString("id"); } deleteSql="delete from docreceiveunit where id="+id; recordSet.execute(deleteSql); } } } }