package weaver.shouwen.cronjob; import com.cloudstore.dev.api.util.Util_DataCache; 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("收发文单位定时任务"); @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,unitcode 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("receiveUnitName", recordSet.getString("receiveunitname")); map.put("canceled", recordSet.getString("canceled")); map.put("unitcode", recordSet.getString("unitcode")); docList.add(map); } } // 再查建模表 存入list String selJmSql = "SELECT id,dwmc,sjzt from uf_SFWDWGL"; 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("receiveUnitName", recordSet.getString("dwmc")); map.put("canceled", recordSet.getString("sjzt")); jianmoList.add(map); } } LOGGER.info(" com.weaver.shouwen.cronjob.DocreceiveunitTimeCron 标准表 【"+docList+"】"); LOGGER.info(" com.weaver.shouwen.cronjob.DocreceiveunitTimeCron 建模表 【"+jianmoList+"】"); // 如果测试表开始就无数据 直接插入 建模表中数据 if (docList.size() == 0) { // 封存 String canceled = null; for (Map jianmoMap : jianmoList) { String insertSql = "INSERT into docreceiveunit " + "(receiveunitname,companytype,subcompanyid,showorder,canceled,unitcode) VALUES" + "(?,?,?,?,?,?)"; recordSet.executeQuery(insertSql, jianmoMap.get("receiveUnitName").toString(), companytype, subcompanyid, ".00", ("0".equals(jianmoMap.get("canceled").toString()) ? "1" : "0"), jianmoMap.get("id").toString()); } 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("receiveUnitName")); // 判断是否需要新增 Integer fg = 0; for (Map docMap : docList) { //如果建模表没有与标准表匹配的receiveUnitName,则删除标准表的数据 docNameSet.add((String) docMap.get("receiveUnitName")); // 如果公文表编码和建模表id一样 但封存状态或者名字改变了 if (docMap.get("unitcode").toString().equals(jianmoMap.get("id").toString()) && (docMap.get("canceled").toString().equals(jianmoMap.get("canceled").toString()) || !docMap.get("receiveUnitName").toString().equals(jianmoMap.get("receiveUnitName").toString()))) { // 更新封存状态和receiveUnitName updateSql = "UPDATE docreceiveunit set canceled=?,receiveunitname=? WHERE unitcode=?"; recordSet.executeUpdate(updateSql, ("0".equals(jianmoMap.get("canceled").toString()) ? "1" : "0"), jianmoMap.get("receiveUnitName"), docMap.get("unitcode")); LOGGER.info(" com.weaver.shouwen.cronjob.DocreceiveunitTimeCron 更新数据sql执行数量"); } // 如果有一样的 就break String unitcode = docMap.get("unitcode").toString(); String id = jianmoMap.get("id").toString(); if (unitcode.equals(id)) { LOGGER.info(" =============判断id 编码相等=================="); fg = 1; break; } } // 遍历完如果没有一样的就加入 if (fg == 0) { LOGGER.info(" com.weaver.shouwen.cronjob.DocreceiveunitTimeCron 新增了数据"); insertSql = "INSERT into docreceiveunit " + "(receiveunitname,companytype,subcompanyid,showorder,canceled,unitcode) VALUES" + "(?,?,?,?,?,?)"; recordSet.executeQuery(insertSql, jianmoMap.get("receiveUnitName").toString(), companytype, subcompanyid, ".00", ("0".equals(jianmoMap.get("canceled").toString()) ? "1" : "0"), jianmoMap.get("id").toString()); } } //如果建模表没有与标准表匹配的receiveUnitName,则删除标准表的数据 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"); } if(!id.isEmpty()){ deleteSql = "delete from docreceiveunit where id=" + id; recordSet.execute(deleteSql); LOGGER.info(" com.weaver.shouwen.cronjob.DocreceiveunitTimeCron 删除了【" + receiveunitname + "】的数据id为" + id); } } } } }