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.

139 lines
7.2 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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);
}
}
}
}
}