You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
6.2 KiB
Java

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<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("单位名称", 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<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("单位名称", recordSet.getString("dwmc"));
map.put("是否封存", recordSet.getString("sjzt"));
jianmoList.add(map);
}
}
// 如果测试表开始就无数据 直接插入 建模表中数据
if (docList.size() == 0) {
// 封存
String canceled = null;
for (Map<String, Object> 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<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("单位名称"));
// 判断是否需要新增
Integer fg = 0;
for (Map<String, Object> 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);
}
}
}
}