383 lines
21 KiB
Java
383 lines
21 KiB
Java
package tqq9.lc123.cloud.app.plugin.task;
|
||
|
||
import kd.bos.context.RequestContext;
|
||
import kd.bos.dataentity.entity.DynamicObject;
|
||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||
import kd.bos.exception.KDException;
|
||
import kd.bos.logging.Log;
|
||
import kd.bos.logging.LogFactory;
|
||
import kd.bos.orm.query.QCP;
|
||
import kd.bos.orm.query.QFilter;
|
||
import kd.bos.schedule.executor.AbstractTask;
|
||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
||
import kd.sdk.plugin.Plugin;
|
||
import org.apache.commons.lang3.StringUtils;
|
||
import tqq9.lc123.cloud.app.plugin.utils.ConfigUtils;
|
||
import tqq9.lc123.cloud.app.plugin.utils.DateDifferenceCalculator;
|
||
import tqq9.lc123.cloud.app.plugin.utils.EmailUtils;
|
||
|
||
import java.util.Date;
|
||
import java.util.HashMap;
|
||
import java.util.Map;
|
||
|
||
/**
|
||
* 供应商、注册证证照时间到期时间计算并发送预警邮件
|
||
* 增加生产商、采购合同
|
||
*/
|
||
public class DaysRemainingTask extends AbstractTask implements Plugin {
|
||
private final static Log logger = LogFactory.getLog(DaysRemainingTask.class);
|
||
|
||
@Override
|
||
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
|
||
int warnDays = 0;
|
||
String warnDaysStr = ConfigUtils.getDevSysConfigByNumber("WARN_LICENCE_DAYS");//预警天数
|
||
if(StringUtils.isNotBlank(warnDaysStr)){
|
||
warnDays = Integer.valueOf(warnDaysStr);
|
||
}
|
||
//key:用户编码,value:邮箱
|
||
Map<String, String> emailMap = new HashMap<>();
|
||
//供应商
|
||
QFilter f1 = new QFilter("enable", QCP.equals, "1");
|
||
QFilter f2 = new QFilter("status", QCP.equals, "C");
|
||
DynamicObject[] suppliers = BusinessDataServiceHelper.load("bd_supplier",
|
||
"id,number,name,tqq9_datefield1,tqq9_validdays_ylqxsc,tqq9_datefield21,tqq9_validdays_ylqxjy,tqq9_datefield4,tqq9_validdays_ylqxjy2,tqq9_datefield22," +
|
||
"tqq9_validdays_yljg,tqq9_licenseenddate,tqq9_integerfield,tqq9_zlbzxyyxqz,tqq9_validdays_zlbz,tqq9_datefield2,tqq9_validdays_gmp,tqq9_datefield7," +
|
||
"tqq9_validdays_frsq,tqq9_datefield9,tqq9_validdays_yyzz,tqq9_gspyxqz,tqq9_validdays_gsp,tqq9_minvaliddays,creator.email",
|
||
new QFilter[]{f1, f2});
|
||
Date currentDate = new Date();//当前日期
|
||
for (DynamicObject supplier : suppliers) {
|
||
String number = supplier.getString("number");//供应商编码
|
||
String name = supplier.getString("name");//供应商名称
|
||
int remainingDays = 0;
|
||
StringBuilder sb = new StringBuilder();
|
||
//医疗器械生生产许可证
|
||
Date tqq9_datefield1 = supplier.getDate("tqq9_datefield1");//失效日期
|
||
if (tqq9_datefield1 != null) {
|
||
remainingDays = DateDifferenceCalculator.calculateRemainingDays(tqq9_datefield1, currentDate);
|
||
supplier.set("tqq9_validdays_ylqxsc", remainingDays);
|
||
Long tqq9_minvaliddays = supplier.getLong("tqq9_minvaliddays");
|
||
if (remainingDays < tqq9_minvaliddays) {
|
||
supplier.set("tqq9_minvaliddays", remainingDays);
|
||
}
|
||
if(remainingDays <= warnDays){
|
||
//与预警天数进行对比
|
||
sb.append("医疗器械生生产许可证距离过期时间还剩余 " + remainingDays + " 天。");
|
||
}
|
||
}
|
||
//医疗器械经营许可证
|
||
Date tqq9_datefield21 = supplier.getDate("tqq9_datefield21");//失效日期
|
||
if (tqq9_datefield21 != null) {
|
||
remainingDays = DateDifferenceCalculator.calculateRemainingDays(tqq9_datefield21, currentDate);
|
||
supplier.set("tqq9_validdays_ylqxjy", remainingDays);
|
||
Long tqq9_minvaliddays = supplier.getLong("tqq9_minvaliddays");
|
||
if (remainingDays < tqq9_minvaliddays) {
|
||
supplier.set("tqq9_minvaliddays", remainingDays);
|
||
}
|
||
if(remainingDays <= warnDays){
|
||
//与预警天数进行对比
|
||
sb.append("医疗器械经营许可证距离过期时间还剩余 " + remainingDays + " 天。");
|
||
}
|
||
}
|
||
//第二类医疗器械经营备案凭证
|
||
Date tqq9_datefield4 = supplier.getDate("tqq9_datefield4");//失效日期
|
||
if (tqq9_datefield4 != null) {
|
||
remainingDays = DateDifferenceCalculator.calculateRemainingDays(tqq9_datefield4, currentDate);
|
||
supplier.set("tqq9_validdays_ylqxjy2", remainingDays);
|
||
Long tqq9_minvaliddays = supplier.getLong("tqq9_minvaliddays");
|
||
if (remainingDays < tqq9_minvaliddays) {
|
||
supplier.set("tqq9_minvaliddays", remainingDays);
|
||
}
|
||
if(remainingDays <= warnDays){
|
||
//与预警天数进行对比
|
||
sb.append("第二类医疗器械经营备案凭证距离过期时间还剩余 " + remainingDays + " 天。");
|
||
}
|
||
}
|
||
|
||
//医疗机构执行许可证
|
||
Date tqq9_datefield22 = supplier.getDate("tqq9_datefield22");//失效日期
|
||
if (tqq9_datefield22 != null) {
|
||
remainingDays = DateDifferenceCalculator.calculateRemainingDays(tqq9_datefield22, currentDate);
|
||
supplier.set("tqq9_validdays_yljg", remainingDays);
|
||
Long tqq9_minvaliddays = supplier.getLong("tqq9_minvaliddays");
|
||
if (remainingDays < tqq9_minvaliddays) {
|
||
supplier.set("tqq9_minvaliddays", remainingDays);
|
||
}
|
||
if(remainingDays <= warnDays){
|
||
//与预警天数进行对比
|
||
sb.append("医疗机构执行许可证距离过期时间还剩余 " + remainingDays + " 天。");
|
||
}
|
||
}
|
||
//化妆品许可证
|
||
Date tqq9_licenseenddate = supplier.getDate("tqq9_licenseenddate");//失效日期
|
||
if (tqq9_licenseenddate != null) {
|
||
remainingDays = DateDifferenceCalculator.calculateRemainingDays(tqq9_licenseenddate, currentDate);
|
||
supplier.set("tqq9_integerfield", remainingDays);
|
||
Long tqq9_minvaliddays = supplier.getLong("tqq9_minvaliddays");
|
||
if (remainingDays < tqq9_minvaliddays) {
|
||
supplier.set("tqq9_minvaliddays", remainingDays);
|
||
}
|
||
if(remainingDays <= warnDays){
|
||
//与预警天数进行对比
|
||
sb.append("化妆品许可证距离过期时间还剩余 " + remainingDays + " 天。");
|
||
}
|
||
}
|
||
//质量保证书
|
||
Date tqq9_zlbzxyyxqz = supplier.getDate("tqq9_zlbzxyyxqz");//失效日期
|
||
if (tqq9_zlbzxyyxqz != null) {
|
||
remainingDays = DateDifferenceCalculator.calculateRemainingDays(tqq9_zlbzxyyxqz, currentDate);
|
||
supplier.set("tqq9_validdays_zlbz", remainingDays);
|
||
Long tqq9_minvaliddays = supplier.getLong("tqq9_minvaliddays");
|
||
if (remainingDays < tqq9_minvaliddays) {
|
||
supplier.set("tqq9_minvaliddays", remainingDays);
|
||
}
|
||
if(remainingDays <= warnDays){
|
||
//与预警天数进行对比
|
||
sb.append("质量保证书距离过期时间还剩余 " + remainingDays + " 天。");
|
||
}
|
||
}
|
||
//GMP证书
|
||
Date tqq9_datefield2 = supplier.getDate("tqq9_datefield2");//失效日期
|
||
if (tqq9_datefield2 != null) {
|
||
remainingDays = DateDifferenceCalculator.calculateRemainingDays(tqq9_datefield2, currentDate);
|
||
supplier.set("tqq9_validdays_gmp", remainingDays);
|
||
Long tqq9_minvaliddays = supplier.getLong("tqq9_minvaliddays");
|
||
if (remainingDays < tqq9_minvaliddays) {
|
||
supplier.set("tqq9_minvaliddays", remainingDays);
|
||
}
|
||
if(remainingDays <= warnDays){
|
||
//与预警天数进行对比
|
||
sb.append("GMP证书距离过期时间还剩余 " + remainingDays + " 天。");
|
||
}
|
||
}
|
||
//法人委托授权书
|
||
Date tqq9_datefield7 = supplier.getDate("tqq9_datefield7");//失效日期
|
||
if (tqq9_datefield7 != null) {
|
||
remainingDays = DateDifferenceCalculator.calculateRemainingDays(tqq9_datefield7, currentDate);
|
||
supplier.set("tqq9_validdays_frsq", remainingDays);
|
||
Long tqq9_minvaliddays = supplier.getLong("tqq9_minvaliddays");
|
||
if (remainingDays < tqq9_minvaliddays) {
|
||
supplier.set("tqq9_minvaliddays", remainingDays);
|
||
}
|
||
if(remainingDays <= warnDays){
|
||
//与预警天数进行对比
|
||
sb.append("法人委托授权书距离过期时间还剩余 " + remainingDays + " 天。");
|
||
}
|
||
}
|
||
//营业执照
|
||
Date tqq9_datefield9 = supplier.getDate("tqq9_datefield9");//失效日期
|
||
if (tqq9_datefield9 != null) {
|
||
remainingDays = DateDifferenceCalculator.calculateRemainingDays(tqq9_datefield9, currentDate);
|
||
supplier.set("tqq9_validdays_yyzz", remainingDays);
|
||
Long tqq9_minvaliddays = supplier.getLong("tqq9_minvaliddays");
|
||
if (remainingDays < tqq9_minvaliddays) {
|
||
supplier.set("tqq9_minvaliddays", remainingDays);
|
||
}
|
||
if(remainingDays <= warnDays){
|
||
//与预警天数进行对比
|
||
sb.append("营业执照距离过期时间还剩余 " + remainingDays + " 天。");
|
||
}
|
||
}
|
||
//GSP证书
|
||
Date tqq9_gspyxqz = supplier.getDate("tqq9_gspyxqz");//失效日期
|
||
if (tqq9_gspyxqz != null) {
|
||
remainingDays = DateDifferenceCalculator.calculateRemainingDays(tqq9_gspyxqz, currentDate);
|
||
supplier.set("tqq9_validdays_gsp", remainingDays);
|
||
Long tqq9_minvaliddays = supplier.getLong("tqq9_minvaliddays");
|
||
if (remainingDays < tqq9_minvaliddays) {
|
||
supplier.set("tqq9_minvaliddays", remainingDays);
|
||
}
|
||
if(remainingDays <= warnDays){
|
||
//与预警天数进行对比
|
||
sb.append("GSP证书距离过期时间还剩余 " + remainingDays + " 天。");
|
||
}
|
||
}
|
||
|
||
//发送邮件
|
||
if(StringUtils.isNotBlank(sb.toString())){
|
||
DynamicObject creator = supplier.getDynamicObject("creator");//创建人
|
||
if(creator != null){
|
||
String emailAddress = null;
|
||
String creatorNumber = creator.getString("number");
|
||
if(emailMap.containsKey(creatorNumber)){
|
||
emailAddress = emailMap.get(creatorNumber);
|
||
}else{
|
||
creator = BusinessDataServiceHelper.loadSingle(creator.getPkValue(),
|
||
creator.getDynamicObjectType().getName(), "name,email");
|
||
emailAddress = creator.getString("email");
|
||
}
|
||
if(StringUtils.isNotBlank(emailAddress)){
|
||
emailMap.put(creatorNumber, emailAddress);
|
||
String warnStr = "供应商【编码:"+number+",名称:"+name+"】证照到期提醒:"+ sb;
|
||
EmailUtils.sendEmail(emailAddress, warnStr, "供应商证照到期提醒");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
SaveServiceHelper.save(suppliers);
|
||
|
||
//注册证
|
||
DynamicObject[] tqq9_registration = BusinessDataServiceHelper.load("tqq9_registration",
|
||
"id,number,name,tqq9_enddate,tqq9_validdays,creator.email",
|
||
new QFilter[]{f1, f2});
|
||
for (DynamicObject dynamicObject : tqq9_registration) {
|
||
String number = dynamicObject.getString("number");
|
||
String name = dynamicObject.getString("name");
|
||
|
||
//商品注册证
|
||
Date tqq9_enddate = dynamicObject.getDate("tqq9_enddate");//失效日期
|
||
if (tqq9_enddate != null) {
|
||
int remainingDays = DateDifferenceCalculator.calculateRemainingDays(tqq9_enddate, currentDate);
|
||
dynamicObject.set("tqq9_validdays", remainingDays);
|
||
if(remainingDays <= warnDays){
|
||
//商品注册证
|
||
String warnStr = "商品注册证【编码:"+number+",名称:"+name+"】证照到期提醒:距离过期时间还剩余 " + remainingDays + " 天。";
|
||
DynamicObject creator = dynamicObject.getDynamicObject("creator");
|
||
if(creator != null){
|
||
String emailAddress = null;
|
||
String creatorNumber = creator.getString("number");
|
||
if(emailMap.containsKey(creatorNumber)){
|
||
emailAddress = emailMap.get(creatorNumber);
|
||
}else{
|
||
creator = BusinessDataServiceHelper.loadSingle(creator.getPkValue(),
|
||
creator.getDynamicObjectType().getName(), "name,email");
|
||
emailAddress = creator.getString("email");
|
||
}
|
||
if(StringUtils.isNotBlank(emailAddress)){
|
||
emailMap.put(creatorNumber, emailAddress);
|
||
EmailUtils.sendEmail(emailAddress, warnStr, "商品注册证到期提醒");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
SaveServiceHelper.save(tqq9_registration);
|
||
|
||
//生产商
|
||
DynamicObject[] proxyandfactoryArr = BusinessDataServiceHelper.load("tqq9_proxyandfactory",
|
||
"id,name,number,creator," +
|
||
"tqq9_taxno,tqq9_prolicense,tqq9_saleno,tqq9_safeno,tqq9_beautyno," +
|
||
"tqq9_taxenddate,tqq9_proenddate,tqq9_saleenddate,tqq9_safeenddate,tqq9_beautyenddate," +
|
||
"tqq9_yyzzts,tqq9_qxscxkzts,tqq9_qxjyxkzts,tqq9_fsaqxkzts,tqq9_hzpxkzts," +
|
||
"tqq9_clnentry.tqq9_clnenddate,tqq9_clnentry.tqq9_xdpwsxkzts",
|
||
new QFilter[]{f1, f2});
|
||
for (DynamicObject proxyandfactory : proxyandfactoryArr) {
|
||
StringBuilder msg = new StringBuilder();
|
||
String name = proxyandfactory.getString("name");
|
||
String number = proxyandfactory.getString("number");
|
||
//营业执照税号
|
||
String tqq9_taxno = proxyandfactory.getString("tqq9_taxno");
|
||
Date tqq9_taxenddate = proxyandfactory.getDate("tqq9_taxenddate");
|
||
int tqq9_yyzzts = DateDifferenceCalculator.calculateRemainingDays(tqq9_taxenddate, currentDate);
|
||
proxyandfactory.set("tqq9_yyzzts", tqq9_yyzzts);
|
||
if(tqq9_yyzzts <= warnDays){
|
||
msg.append("营业执照税号 ").append(tqq9_taxno).append(" ,距离过期时间还剩余 ").append(tqq9_yyzzts).append(" 天。");
|
||
}
|
||
|
||
//医疗器械生产许可证号
|
||
String tqq9_prolicense = proxyandfactory.getString("tqq9_prolicense");
|
||
Date tqq9_proenddate = proxyandfactory.getDate("tqq9_proenddate");
|
||
int tqq9_qxscxkzts = DateDifferenceCalculator.calculateRemainingDays(tqq9_proenddate, currentDate);
|
||
proxyandfactory.set("tqq9_qxscxkzts", tqq9_qxscxkzts);
|
||
if(tqq9_qxscxkzts <= warnDays){
|
||
msg.append("医疗器械生产许可证号 ").append(tqq9_prolicense).append(" ,距离过期时间还剩余 ").append(tqq9_qxscxkzts).append(" 天。");
|
||
}
|
||
|
||
//医疗器械经营许可证号
|
||
String tqq9_saleno = proxyandfactory.getString("tqq9_saleno");
|
||
Date tqq9_saleenddate = proxyandfactory.getDate("tqq9_saleenddate");
|
||
int tqq9_qxjyxkzts = DateDifferenceCalculator.calculateRemainingDays(tqq9_saleenddate, currentDate);
|
||
proxyandfactory.set("tqq9_qxjyxkzts", tqq9_qxjyxkzts);
|
||
if(tqq9_qxjyxkzts <= warnDays){
|
||
msg.append("医疗器械经营许可证号 ").append(tqq9_saleno).append(" ,距离过期时间还剩余 ").append(tqq9_qxjyxkzts).append(" 天。");
|
||
}
|
||
|
||
//辐射安全许可证号
|
||
String tqq9_safeno = proxyandfactory.getString("tqq9_safeno");
|
||
Date tqq9_safeenddate = proxyandfactory.getDate("tqq9_safeenddate");
|
||
int tqq9_fsaqxkzts = DateDifferenceCalculator.calculateRemainingDays(tqq9_safeenddate, currentDate);
|
||
proxyandfactory.set("tqq9_fsaqxkzts", tqq9_fsaqxkzts);
|
||
if(tqq9_fsaqxkzts <= warnDays){
|
||
msg.append("辐射安全许可证号 ").append(tqq9_safeno).append(" ,距离过期时间还剩余 ").append(tqq9_fsaqxkzts).append(" 天。");
|
||
}
|
||
|
||
//化妆品许可证号
|
||
String tqq9_beautyno = proxyandfactory.getString("tqq9_beautyno");
|
||
Date tqq9_beautyenddate = proxyandfactory.getDate("tqq9_beautyenddate");
|
||
int tqq9_hzpxkzts = DateDifferenceCalculator.calculateRemainingDays(tqq9_beautyenddate, currentDate);
|
||
proxyandfactory.set("tqq9_hzpxkzts", tqq9_hzpxkzts);
|
||
if(tqq9_hzpxkzts <= warnDays){
|
||
msg.append("化妆品许可证号 ").append(tqq9_beautyno).append(" ,距离过期时间还剩余 ").append(tqq9_hzpxkzts).append(" 天。");
|
||
}
|
||
|
||
//消毒产品生产企业卫生许可证号
|
||
DynamicObjectCollection entries = proxyandfactory.getDynamicObjectCollection("tqq9_clnentry");
|
||
for (DynamicObject entry : entries) {
|
||
String tqq9_clnno = entry.getString("tqq9_clnno");
|
||
Date tqq9_clnenddate = entry.getDate("tqq9_clnenddate");
|
||
int tqq9_xdpwsxkzts = DateDifferenceCalculator.calculateRemainingDays(tqq9_clnenddate, currentDate);
|
||
entry.set("tqq9_xdpwsxkzts", tqq9_xdpwsxkzts);
|
||
if(tqq9_xdpwsxkzts <= warnDays){
|
||
msg.append("消毒产品生产企业卫生许可证号 ").append(tqq9_clnno).append(" ,距离过期时间还剩余 ").append(tqq9_xdpwsxkzts).append(" 天。");
|
||
}
|
||
}
|
||
|
||
if(msg != null && msg.toString().length() > 0){
|
||
DynamicObject creator = proxyandfactory.getDynamicObject("creator");
|
||
if(creator != null){
|
||
String emailAddress = null;
|
||
String creatorNumber = creator.getString("number");
|
||
if(emailMap.containsKey(creatorNumber)){
|
||
emailAddress = emailMap.get(creatorNumber);
|
||
}else{
|
||
creator = BusinessDataServiceHelper.loadSingle(creator.getPkValue(),
|
||
creator.getDynamicObjectType().getName(), "name,email");
|
||
emailAddress = creator.getString("email");
|
||
}
|
||
if(StringUtils.isNotBlank(emailAddress)){
|
||
String warnStr = "生产商【编码:"+number+",名称:"+name+"】证照到期提醒:" + msg;
|
||
emailMap.put(creatorNumber, emailAddress);
|
||
EmailUtils.sendEmail(emailAddress, warnStr, "生产商到期提醒");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
SaveServiceHelper.save(proxyandfactoryArr);
|
||
|
||
//采购合同
|
||
DynamicObject[] purcontractArr = BusinessDataServiceHelper.load("conm_purcontract",
|
||
"id,name,number,creator,biztimeend,tqq9_syyxts",
|
||
new QFilter[]{f1, f2});
|
||
for (DynamicObject purcontract : purcontractArr) {
|
||
String name = purcontract.getString("name");
|
||
String number = purcontract.getString("number");
|
||
Date biztimeend = purcontract.getDate("biztimeend");
|
||
int tqq9_syyxts = DateDifferenceCalculator.calculateRemainingDays(biztimeend, currentDate);
|
||
purcontract.set("tqq9_syyxts", tqq9_syyxts);
|
||
|
||
if(tqq9_syyxts <= warnDays){
|
||
DynamicObject creator = purcontract.getDynamicObject("creator");
|
||
if(creator != null){
|
||
String emailAddress = null;
|
||
String creatorNumber = creator.getString("number");
|
||
if(emailMap.containsKey(creatorNumber)){
|
||
emailAddress = emailMap.get(creatorNumber);
|
||
}else{
|
||
creator = BusinessDataServiceHelper.loadSingle(creator.getPkValue(),
|
||
creator.getDynamicObjectType().getName(), "name,email");
|
||
emailAddress = creator.getString("email");
|
||
}
|
||
if(StringUtils.isNotBlank(emailAddress)){
|
||
StringBuilder warnStr = new StringBuilder();
|
||
warnStr.append("采购合同【编码:"+number+",名称:"+name+"】证照到期提醒:").append("距离过期时间还剩余 ").append(tqq9_syyxts).append(" 天。");
|
||
emailMap.put(creatorNumber, emailAddress);
|
||
EmailUtils.sendEmail(emailAddress, warnStr.toString(), "采购合同提醒");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
SaveServiceHelper.save(purcontractArr);
|
||
|
||
}
|
||
|
||
} |