|
|
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<Map<String, Object>> docList = new ArrayList<>();
|
|
|
if (flag) {
|
|
|
while (recordSet.next()) {
|
|
|
Map<String, Object> 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<Map<String, Object>> jianmoList = new ArrayList<>();
|
|
|
if (flag2) {
|
|
|
while (recordSet.next()) {
|
|
|
Map<String, Object> 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<String, Object> 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<String> jianmoNameSet = new HashSet<>();
|
|
|
HashSet<String> docNameSet = new HashSet<>();
|
|
|
HashSet<String> deleteset = new HashSet<>();
|
|
|
for (Map<String, Object> jianmoMap : jianmoList) {
|
|
|
jianmoNameSet.add((String) jianmoMap.get("receiveUnitName"));
|
|
|
// 判断是否需要新增
|
|
|
Integer fg = 0;
|
|
|
for (Map<String, Object> 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);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|