Commit db2cd8b2 by 王衍超

合同预警完善;

parent 9ab9d937
......@@ -43,6 +43,9 @@ public class BaseBusinessWarn {
/** 指标*/
protected String target;
/** 预警设置ID*/
protected UUID warnSettingId;
private IWarningCalculate warningCalculate;
private IWarningSettingService warningSettingService;
......@@ -56,11 +59,20 @@ public class BaseBusinessWarn {
private StaffDAO staffDAO;
public BaseBusinessWarn(@NonNull UUID warnSettingId) {
Assert.notNull(warnSettingId, "The warnSettingId must not be null!");
this.warnSettingId = warnSettingId;
init();
}
public BaseBusinessWarn(@NonNull String billType, @Nullable UUID billId, @Nullable String target) {
Assert.notNull(billType, "The billType must not be null!");
this.billType = billType;
this.billId = billId;
this.target = target;
init();
}
private void init() {
remindService = getRemindService();
staffService = getStaffService();
warningSettingService = getWarningSettingService();
......@@ -68,8 +80,10 @@ public class BaseBusinessWarn {
}
/** 预警设置*/
protected WarnSetting getWarnSetting() {
public WarnSetting getWarnSetting() {
if(warnSettingId!=null) {
return warningSettingService.getWarnSetting(warnSettingId);
}
return warningSettingService.getWarnSetting(billType, billId, target);
}
......@@ -91,34 +105,34 @@ public class BaseBusinessWarn {
boolean isWarning = false;
WarnSetting warnSetting = getWarnSetting();
if(warnSetting==null || !warnSetting.isOpen()) return false;
if(warnSetting==null ) return false;//|| !warnSetting.isOpen()
Assert.notNull(warningCalculate, "The warningCalculate must not be null!");
//计算业务实际的值, 与预警设置中的值做比较, 计算是否预警
isWarning = warningCalculate.isWarning(warnSetting);
if(!isWarning) isNotice= false;
UUID warnSettingId = warnSetting.getSettingId();
// if(!isWarning) isNotice= false;
//记录预警日志
UUID warnSettingId = warnSetting.getSettingId();
WarnExeRecord warnExeRecord = warningSettingService.queryWarnExeRecord(warnSettingId);
//1.当前没有执行中的预警记录
if (warnExeRecord == null) {
//新增预警执行信息
if(!isWarning) return false;//1.1 没有触发预警, 则不做任何操作;
//1.2 新增预警执行信息
warnExeRecord = createWarnExeRecord(warnSetting);
warningSettingService.insertWarnExe(warnExeRecord);
}else {
//修改预警执行信息
//2.当前存在执行中的预警记录,则修改预警执行信息
Date currentTime = new Date();
warnExeRecord.setRecentlyTime(currentTime);
if(!isWarning) {
if(!isWarning) {//2.1 如果没有处罚预警,则结束该预警记录
warnExeRecord.setEndTime(currentTime);
}
warningSettingService.updateWarnExe(warnExeRecord);
}
String[] noticePerson = warnSetting.getPersonnel();
String message = "message";
String message = warningCalculate.warnMessage();
try {
if (isNotice)
if (isWarning)
notice(noticePerson, message, warnSetting.getBillId());
} catch (Exception e) {
e.printStackTrace();
......@@ -155,11 +169,11 @@ public class BaseBusinessWarn {
UUID remindId = UUID.randomUUID();
remObject.put("id", remindId);
remObject.put("createTime", currentTimeStr);
remObject.put("remindContent", "合同预警通知");
remObject.put("remindTime", currentTimeStr);
remObject.put("remindContent", message);//消息
remObject.put("data",billId );//param.getString("id")
remObject.put("lookName", "contractY");
remObject.put("data",billId );
remObject.put("lookName", "");//标题
remObject.put("lookType", "Contract");
remObject.put("_type", CommonConstants.REMIND_ENTITY);
remObject.put("isToCustomer", false);
......
......@@ -5,11 +5,12 @@ package com.xyst.dinas.biz.warn;
* @author Jackpot
* @date 2021年3月30日
*/
@FunctionalInterface
//@FunctionalInterface
public interface IWarningCalculate {
boolean isWarning(WarnSetting warnSetting);
String warnMessage();
//boolean isRepeat();重复执行
......
......@@ -5,9 +5,16 @@ public class WarnSettingConstant {
/** 实体名:预警设置 */
public static final String ENTITY_WARNSETTING = "com.xyst.dinas.biz.datamodel.WarnSetting";
/************************************/
/** 实体名:预警执行记录 */
public static final String ENTITY_WARNINGEXE = "com.xyst.dinas.biz.datamodel.WarningExe";
/** 项目 */
public static final String PROJECT = "project";
/** 预警结束时间 */
public static final String END_TIME = "endTime";
/** 最近预警时间 */
public static final String RECENTLY_TIME = "recentlyTime";
}
package com.xyst.dinas.biz.warn;
import java.util.UUID;
public class WarnTest {
public void warnTest() {
String billType = "contract";
UUID billId = null;
String target = "青砂";
int count = 10000;//青砂余量
// BaseBusinessWarn contractBusinessWarn = new BaseBusinessWarn(billType, billId,target);
// DinasCountWarningCalculate dinasCountWarningCalculate = new DinasCountWarningCalculate(count);
// contractBusinessWarn.setWarningCalculate(dinasCountWarningCalculate);
// contractBusinessWarn.warn();
}
}
package com.xyst.dinas.biz.warn.dao;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
......@@ -18,7 +19,6 @@ import org.springframework.orm.hibernate5.HibernateCallback;
import org.springframework.orm.hibernate5.HibernateOperations;
import org.springframework.stereotype.Repository;
import com.beecode.amino.common.Convert;
import com.beecode.bcp.type.KObject;
import com.xyst.dinas.biz.warn.WarnExeRecord;
import com.xyst.dinas.biz.warn.WarnSetting;
......@@ -47,9 +47,23 @@ public class WarnSettingDao {
return (KObject) template.get(WarnSettingConstant.ENTITY_WARNINGEXE, id);
}
/**
* 将一条预警执行记录改为结束状态
* @param warnRecord
*/
public void endWarnRecordState(KObject warnRecord) {
if(warnRecord==null) return;
LocalDateTime now = LocalDateTime.now();
warnRecord.set(WarnSettingConstant.END_TIME, now);
warnRecord.set(WarnSettingConstant.RECENTLY_TIME, now);
update(warnRecord);
}
public WarnSetting getWarnSetting(UUID warnSettingId) {
KObject warnSetting = queryWarnSettingById(warnSettingId);
return warnSettingToEntity(warnSetting);
}
public WarnSetting getWarnSetting(String billType, UUID billId, String target) {
......@@ -66,10 +80,16 @@ public class WarnSettingDao {
if(billId!=null) query.setParameter("billId", billId);
if(target!=null) query.setParameter("target", target);
KObject singleResult = query.getSingleResult();
return warnSettingToEntity(singleResult);
});
}
private WarnSetting warnSettingToEntity(KObject singleResult) {
if(singleResult==null) return null;
UUID settingId = singleResult.getUuid("id");
UUID billId2 = singleResult.getUuid("billId");
String target2 = singleResult.getString("target");
UUID billId = singleResult.getUuid("billId");
String billType = singleResult.getString("billType");
String target = singleResult.getString("target");
String max = singleResult.getString("max");
String min = singleResult.getString("min");
String personnel = singleResult.getString("personnel");
......@@ -78,8 +98,8 @@ public class WarnSettingDao {
WarnSettingEntity warnSettingEntity = new WarnSettingEntity();
warnSettingEntity.setBillType(billType);
warnSettingEntity.setBillId(billId2);
warnSettingEntity.setTarget(target2);
warnSettingEntity.setBillId(billId);
warnSettingEntity.setTarget(target);
warnSettingEntity.setSettingId(settingId);
warnSettingEntity.setMin(min);
warnSettingEntity.setMax(max);
......@@ -88,11 +108,27 @@ public class WarnSettingDao {
String[] personnelArray= personnel!=null && !personnel.isEmpty()?personnel.split(","):null;
warnSettingEntity.setPersonnel(personnelArray);
return warnSettingEntity;
});
}
/**
* 通过预警设置ID查询一条未结束的预警执行记录
* @param warnSettingId
* @return
*/
public KObject queryWarnExeRecordBySettingId(UUID warnSettingId) {
String QUERY_HQL = "from " + WarnSettingConstant.ENTITY_WARNINGEXE + " where endTime is null and warnSetting.id =:warnSettingId";
return template.execute(session -> {
Query<KObject> query = session.createQuery(QUERY_HQL, KObject.class);
query.setParameter("warnSettingId", warnSettingId);
List<KObject> resultList = query.getResultList();
if (resultList.isEmpty()) return null;
return resultList.get(0);
});
}
public WarnExeRecord queryWarnExeRecord(UUID warnSettingId) {
......@@ -100,20 +136,19 @@ public class WarnSettingDao {
return template.execute(session -> {
Query<KObject> query = session.createQuery(QUERY_HQL, KObject.class);//KObject
Query<KObject> query = session.createQuery(QUERY_HQL, KObject.class);
query.setParameter("warnSettingId", warnSettingId);
List<KObject> resultList = query.getResultList();
if (resultList.isEmpty()) {
return null;
}
KObject singleResult = query.getSingleResult();
if (resultList.isEmpty()) return null;
KObject singleResult = resultList.get(0);
Date stratTime = singleResult.getDate("stratTime");
Date stratTime = singleResult.getDate("startTime");
Date endTime = singleResult.getDate("endTime");
Date recentlyTime = singleResult.getDate("recentlyTime");
String max = singleResult.getString("max");
String min = singleResult.getString("min");
String message = singleResult.getString("message");
String memo = singleResult.getString("memo");
String target = singleResult.getString("target");
UUID billId = singleResult.getUuid("billId");
UUID id = singleResult.getUuid("id");
......@@ -127,6 +162,7 @@ public class WarnSettingDao {
warnExeRecord.setMax(max);
warnExeRecord.setMin(min);
warnExeRecord.setMessage(message);
warnExeRecord.setMemo(memo);
warnExeRecord.setTarget(target);
warnExeRecord.setBillId(billId);
warnExeRecord.setWarnState("warnState");
......
......@@ -20,6 +20,8 @@ public interface IWarningSettingService {
*/
public UUID insertWarnSetting(WarnSetting warnSetting) ;
WarnSetting getWarnSetting(@NonNull UUID warnSettingId);
WarnSetting getWarnSetting(@NonNull String billType, @Nullable UUID billId, @Nullable String target);
/**
* 根据ID查询一条预警设置
......@@ -42,6 +44,13 @@ public interface IWarningSettingService {
public void updateWarnExe(WarnExeRecord warnExeRecord);
/**
* 结束一条预警设置的预警执行记录
* @param warnSettingId
*/
void endWarnStateBySettingId(UUID warnSettingId);
/**
* 查询未结束的预警执行记录
* @param warnSettingId
......
package com.xyst.dinas.biz.warn.service;
/**
* 预警服务
*
* @author Jackpot
* @date 2021年4月1日
*/
public class WarningService {
}
......@@ -50,9 +50,29 @@ public class WarningSettingServiceImpl implements IWarningSettingService{
KClass type = Amino.getApplicationMetadataContext().getBean(WarnSettingConstant.ENTITY_WARNINGEXE, KClass.class);
JsonNode json = JSONObjectUtils.toJson(warnExeRecord);
KObject object = JSONObjectUtils.toObject(json, type);
object.set("startTime", warnExeRecord.getStratTime());
object.set("recentlyTime", warnExeRecord.getRecentlyTime());
UUID warnSettingId = warnExeRecord.getWarnSettingId();
KObject warnSettingObj = warnSettingDao.queryWarnSettingById(warnSettingId);
object.set("warnSetting", warnSettingObj);
return warnSettingDao.create(object);
}
/**
* 结束一条预警设置的预警执行记录
* @param warnSettingId
*/
public void endWarnStateBySettingId(UUID warnSettingId) {
KObject warnExeRecord = warnSettingDao.queryWarnExeRecordBySettingId(warnSettingId);
warnSettingDao.endWarnRecordState(warnExeRecord);
}
@Override
public WarnSetting getWarnSetting(UUID warnSettingId) {
return warnSettingDao.getWarnSetting(warnSettingId);
}
@Override
public WarnSetting getWarnSetting(String billType, UUID billId, String target) {
return warnSettingDao.getWarnSetting(billType, billId, target);
......@@ -73,6 +93,12 @@ public class WarningSettingServiceImpl implements IWarningSettingService{
KClass type = Amino.getApplicationMetadataContext().getBean(WarnSettingConstant.ENTITY_WARNINGEXE, KClass.class);
JsonNode json = JSONObjectUtils.toJson(warnExeRecord);
KObject object = JSONObjectUtils.toObject(json, type);
object.set("startTime", warnExeRecord.getStratTime());
object.set("endTime", warnExeRecord.getEndTime());
object.set("recentlyTime", warnExeRecord.getRecentlyTime());
UUID warnSettingId = warnExeRecord.getWarnSettingId();
KObject warnSettingObj = warnSettingDao.queryWarnSettingById(warnSettingId);
object.set("warnSetting", warnSettingObj);
warnSettingDao.update(object);
}
......
......@@ -28,12 +28,12 @@ public class WarnSettingController {
private IWarningSettingService warningSettingService;
//更新预警设置
@PostMapping("/warnsetting/update")
public String updateWarnSettingPerson(@RequestBody UpdateWarnSetting warnSetting) {
warningSettingService.updateWarnSetting(warnSetting);
return "success";
}
// @PostMapping("/warnsetting/update")
// public String updateWarnSettingPerson(@RequestBody UpdateWarnSetting warnSetting) {
//
// warningSettingService.updateWarnSetting(warnSetting);
// return "success";
// }
//查询一条预警设置
@GetMapping("/warnsetting/{id}")
......
......@@ -19,8 +19,10 @@ public class ContractExpireCheckTask implements Task{
@Override
public void execute(TaskContext arg0) {
logger.info("合同过期检查任务开始执行...");
// Amino.getApplicationContext().getBean(getClass());
System.out.println("ContractExpireCheckTask.execute....");
}
......
......@@ -26,19 +26,28 @@ public class ContractExpireCheckTaskRegister implements ServiceInitializer{
@Override
public void init(ApplicationMetadataContext arg0) {
}
public void crateScheduleTask(){
Optional<ScheduleDetail> Optional = scheduleService.findByName(EXPIRE_REMIND_TASK_NAME);
if (Optional.isPresent()) {
// 如果该租户的库中存在这个轮询任务那么就不再去注册了
scheduleService.removeTask(EXPIRE_REMIND_TASK_NAME);
}
TaskDetail TaskDetail = new TaskDetail(EXPIRE_REMIND_TASK_NAME, ContractExpireCheckTask.class.getName());
// 每天凌晨12点执行调度,如测试可修改为每十五秒:*/15 * * * * ?(表达式由至少6个由空格分隔的时间元素,从左至右可分为秒,分,时,日,月,星期)
// scheduleService.scheduleTask(TaskDetail, "0 0 0 * * ?");
scheduleService.scheduleTask(TaskDetail, "0 0 0 * * ?");
// 测试调度时进行调用
scheduleService.scheduleTask(TaskDetail, "*/10 * * * * ?");
// scheduleService.scheduleTask(TaskDetail, "*/10 * * * * ?");
logger.info("合同到期提醒任务初始化成功!");
}
@PostConstruct
public void init() {
crateScheduleTask();
}
}
......@@ -14,6 +14,8 @@ public class DinasCountWarningCalculate implements IWarningCalculate{
//砂石余量
private int dinsaCount;
private String warnMessage;
/**
* 砂石余量预警计算器
* @param dinsaCount 砂石余量
......@@ -27,8 +29,11 @@ public class DinasCountWarningCalculate implements IWarningCalculate{
public boolean isWarning(WarnSetting warnSetting) {
String min = warnSetting.getMin();
String target = warnSetting.getTarget();
if(min==null || min.trim().length()==0) return false;
//业务数据与设置的阀值做比较,计算是否预警
if (dinsaCount <= Integer.valueOf(min)) {
warnMessage = "["+target+"]"+"的当前余量为"+dinsaCount+",已不足"+min+"吨!";
return true;
}
return false;
......@@ -42,4 +47,10 @@ public class DinasCountWarningCalculate implements IWarningCalculate{
public void setDinsaCount(int dinsaCount) {
this.dinsaCount = dinsaCount;
}
@Override
public String warnMessage() {
return warnMessage;
}
}
......@@ -21,7 +21,9 @@ import com.beecode.bcp.type.KObject;
import com.beecode.bcp.type.json.JSONObjectUtils;
import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.beecode.xlib.runtime.Assert;
import com.xyst.dinas.biz.request.UpdateWarnSetting;
import com.xyst.dinas.biz.warn.BaseBusinessWarn;
import com.xyst.dinas.biz.warn.WarnSetting;
import com.xyst.dinas.biz.warn.service.IWarningSettingService;
import com.xyst.dinas.contract.constant.ContractConstant;
import com.xyst.dinas.contract.entity.BaseEntity;
......@@ -149,10 +151,9 @@ public class ContractController {
// 合同审批通过后,自动新增砂石余量预警设置
String billType = "合同";
UUID contractId = UUID.fromString("598A9B1B-34C7-4BFB-A846-40EDEF357752");
String target = "清砂";
int count = 100;// 青砂余量
UUID contractId = UUID.fromString("b399f4a5-e446-439c-9601-177aad94b675");
String target = "细砂2";
int count = 100;// 某种砂石余量
BaseBusinessWarn contractBusinessWarn = new BaseBusinessWarn(billType, contractId, target);
DinasCountWarningCalculate dinasCountWarningCalculate = new DinasCountWarningCalculate(count);
......@@ -168,6 +169,29 @@ public class ContractController {
return contractService.queryWarnSettingById(id);
}
//更新预警设置
@PostMapping("/warnsetting/update")// /contract
public ResponseObj updateWarnSettingPerson(@RequestBody UpdateWarnSetting updateWarnSetting) {
UUID settingId = updateWarnSetting.getId();
BaseBusinessWarn contractBusinessWarn = new BaseBusinessWarn(settingId);
WarnSetting warnSetting = contractBusinessWarn.getWarnSetting();
String minOld = warnSetting.getMin()!=null?warnSetting.getMin():"";
String min = updateWarnSetting.getMin()!=null?updateWarnSetting.getMin():"";
warningSettingService.updateWarnSetting(updateWarnSetting);
if (minOld.equals(min)) {
return ResponseObj.success("预警设置更新成功");
}
int count = 100; //查询合同中该砂石的余量
DinasCountWarningCalculate dinasCountWarningCalculate = new DinasCountWarningCalculate(count);
contractBusinessWarn.setWarningCalculate(dinasCountWarningCalculate);
contractBusinessWarn.warn();
return ResponseObj.success("预警设置更新成功");
}
/**
* @Description: 根据合同查询预警设置中所有人员
* @param id
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment