Commit bca0a163 by 王衍超

预警功能完善;

parent 9dc22999
...@@ -6,9 +6,9 @@ package com.xyst.dinas.biz.enumeration; ...@@ -6,9 +6,9 @@ package com.xyst.dinas.biz.enumeration;
public enum WarnStateEnum { public enum WarnStateEnum {
/** /**
* 未结束 * 执行中
*/ */
NOT_OVER(0), EXECUTING(0),
/** /**
* 已结束 * 已结束
......
...@@ -80,7 +80,7 @@ public class SandMiningAreaServiceImpl implements SandMiningAreaService { ...@@ -80,7 +80,7 @@ public class SandMiningAreaServiceImpl implements SandMiningAreaService {
warnSetting.setBillType(WarnSettingConstant.SAND_MINING_AREA_BILL_TYPE); warnSetting.setBillType(WarnSettingConstant.SAND_MINING_AREA_BILL_TYPE);
warnSetting.setBillId(kobject.getUuid("id")); warnSetting.setBillId(kobject.getUuid("id"));
warnSetting.setTarget(WarnSettingConstant.SAND_MINING_AREA_WARN_TARGET); warnSetting.setTarget(WarnSettingConstant.SAND_MINING_AREA_WARN_TARGET);
warnSetting.setTargetType(WarnTargetTypeEnum.NUMBER_TYPE.getCode()); warnSetting.setTargetType(WarnTargetTypeEnum.NUMBER_TYPE.name());
warnSetting.setOpen(false); warnSetting.setOpen(false);
warnSetting.setMemo(getAreaWarningInfo(kobject)); warnSetting.setMemo(getAreaWarningInfo(kobject));
warningSettingService.insertWarnSetting(warnSetting); warningSettingService.insertWarnSetting(warnSetting);
......
...@@ -3,20 +3,49 @@ package com.xyst.dinas.biz.request; ...@@ -3,20 +3,49 @@ package com.xyst.dinas.biz.request;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
public class UpdateWarnSetting { public class WarnSettingReq {
private UUID id; private UUID id;
private UUID version; private UUID version;
private String billType;
private UUID billId; private UUID billId;
private String target; private String target;
private String targetType;
private String max;
private String min; private String min;
private String max;
private String warnCalculator;
private List<UUID> personnel; private List<UUID> personnel;
private String memo; private String memo;
private Boolean isOpen;
public String getBillType() {
return billType;
}
public void setBillType(String billType) {
this.billType = billType;
}
public String getTargetType() {
return targetType;
}
public void setTargetType(String targetType) {
this.targetType = targetType;
}
public String getWarnCalculator() {
return warnCalculator;
}
public void setWarnCalculator(String warnCalculator) {
this.warnCalculator = warnCalculator;
}
public Boolean isOpen() {
return isOpen;
}
public void setOpen(Boolean isOpen) {
this.isOpen = isOpen;
}
public UUID getId() { public UUID getId() {
return id; return id;
} }
......
...@@ -29,7 +29,9 @@ import com.xyst.dinas.biz.warn.service.WarningService; ...@@ -29,7 +29,9 @@ import com.xyst.dinas.biz.warn.service.WarningService;
/** /**
* 业务预警基类 * 业务预警基类
* *
* 别动我代码!!!
*
* @author Jackpot * @author Jackpot
* @date 2021年3月26日 * @date 2021年3月26日
*/ */
...@@ -47,7 +49,7 @@ public class BaseBusinessWarn { ...@@ -47,7 +49,7 @@ public class BaseBusinessWarn {
/** 预警设置ID*/ /** 预警设置ID*/
protected UUID warnSettingId; protected UUID warnSettingId;
private IWarningCalculate warningCalculate; private IWarningCalculator warningCalculate;
private WarningService warningSettingService; private WarningService warningSettingService;
...@@ -90,7 +92,7 @@ public class BaseBusinessWarn { ...@@ -90,7 +92,7 @@ public class BaseBusinessWarn {
} }
/** 计算是否预警*/ /** 计算是否预警*/
public final void setWarningCalculate(IWarningCalculate warningCalculate) { public final void setWarningCalculate(IWarningCalculator warningCalculate) {
this.warningCalculate = warningCalculate; this.warningCalculate = warningCalculate;
} }
...@@ -108,11 +110,12 @@ public class BaseBusinessWarn { ...@@ -108,11 +110,12 @@ public class BaseBusinessWarn {
boolean isWarning = false; boolean isWarning = false;
WarnSetting warnSetting = getWarnSetting(); WarnSetting warnSetting = getWarnSetting();
if(warnSetting==null ) return false;//|| !warnSetting.isOpen() if(warnSetting==null ) return false;//|| !warnSetting.isOpen()
if(warningCalculate == null && warnSetting.warnCalculator()!=null) {
warningCalculate = Amino.getApplicationMetadataContext().getBean(warnSetting.warnCalculator(),IWarningCalculator.class);
}
Assert.notNull(warningCalculate, "The warningCalculate must not be null!"); Assert.notNull(warningCalculate, "The warningCalculate must not be null!");
//计算业务实际的值, 与预警设置中的值做比较, 计算是否预警
isWarning = warningCalculate.isWarning(warnSetting); isWarning = warningCalculate.isWarning(warnSetting);
// if(!isWarning) isNotice= false;
//记录预警日志 //记录预警日志
UUID warnSettingId = warnSetting.getSettingId(); UUID warnSettingId = warnSetting.getSettingId();
WarnExeRecord warnExeRecord = warningSettingService.queryWarnExeRecord(warnSettingId); WarnExeRecord warnExeRecord = warningSettingService.queryWarnExeRecord(warnSettingId);
...@@ -128,16 +131,13 @@ public class BaseBusinessWarn { ...@@ -128,16 +131,13 @@ public class BaseBusinessWarn {
Date currentTime = new Date(); Date currentTime = new Date();
warnExeRecord.setRecentlyTime(currentTime); warnExeRecord.setRecentlyTime(currentTime);
warnExeRecord.setActualValue(warningCalculate.getActualValue()); warnExeRecord.setActualValue(warningCalculate.getActualValue());
if(!isWarning) {//2.1 如果没有触发预警,则结束该预警记录 if(!isWarning) { //2.1 如果没有触发预警,则结束该预警记录
//如果预警已经结束,则不修改
if((WarnStateEnum.OVER.getValue()+"").equals(warnExeRecord.getWarnState())){
return true;
}
warnExeRecord.setEndTime(currentTime); warnExeRecord.setEndTime(currentTime);
warnExeRecord.setWarnState(WarnStateEnum.OVER.getValue()+""); warnExeRecord.setWarnState(WarnStateEnum.OVER.getValue());
} }
warningSettingService.updateWarnExe(warnExeRecord); warningSettingService.updateWarnExe(warnExeRecord);
} }
//通知人员
String[] noticePerson = warnSetting.getPersonnel(); String[] noticePerson = warnSetting.getPersonnel();
String message = warningCalculate.warnMessage(); String message = warningCalculate.warnMessage();
try { try {
...@@ -152,7 +152,7 @@ public class BaseBusinessWarn { ...@@ -152,7 +152,7 @@ public class BaseBusinessWarn {
private WarnExeRecord createWarnExeRecord(WarnSetting warnSetting) { private WarnExeRecord createWarnExeRecord(WarnSetting warnSetting) {
WarnExeRecord warnExeRecord = new WarnExeRecord(); WarnExeRecord warnExeRecord = new WarnExeRecord();
Date currentTime = new Date(); Date currentTime = new Date();
warnExeRecord.setWarnState(WarnStateEnum.NOT_OVER.getValue()+""); warnExeRecord.setWarnState(WarnStateEnum.EXECUTING.getValue());
warnExeRecord.setStartTime(currentTime); warnExeRecord.setStartTime(currentTime);
warnExeRecord.setRecentlyTime(currentTime); warnExeRecord.setRecentlyTime(currentTime);
warnExeRecord.setTarget(warnSetting.getTarget()); warnExeRecord.setTarget(warnSetting.getTarget());
......
package com.xyst.dinas.biz.warn; package com.xyst.dinas.biz.warn;
/** /**
* 预警计算器 * 预警计算器<br/>
* *
* 预警计算器的实现分为两类:<br/>
* 1. 注册为Bean, 并且持久化到预警设置中的预警计算器; 使用场景: 新增/修改预警设置,手动触发预警以及业务数据变化实时触发预警;<br/>
* 2. 轻量级预警计算器; (不需要注册为Bean,不需要持久化) 使用场景:业务数据变化实时触发预警<br/>
*
* 注: 因为轻量级预警计算器不需要再次查询业务实时数据,所以更适合实时触发预警的场景;<br/>
*
* @author Jackpot * @author Jackpot
* @date 2021年3月30日 * @date 2021年3月30日
*/ */
public interface IWarningCalculate { public interface IWarningCalculator {
/** /**
* 计算是否预警 * 计算是否预警
...@@ -26,7 +32,6 @@ public interface IWarningCalculate { ...@@ -26,7 +32,6 @@ public interface IWarningCalculate {
*/ */
String getActualValue(); String getActualValue();
//boolean isRepeat();重复执行 //重复执行
} }
...@@ -18,7 +18,7 @@ public class WarnExeRecord { ...@@ -18,7 +18,7 @@ public class WarnExeRecord {
private Date recentlyTime; private Date recentlyTime;
private UUID warnSettingId; private UUID warnSettingId;
private String warnState; private Integer warnState;
private UUID billId; private UUID billId;
private String target; private String target;
...@@ -72,10 +72,10 @@ public class WarnExeRecord { ...@@ -72,10 +72,10 @@ public class WarnExeRecord {
public void setWarnSettingId(UUID warnSettingId) { public void setWarnSettingId(UUID warnSettingId) {
this.warnSettingId = warnSettingId; this.warnSettingId = warnSettingId;
} }
public String getWarnState() { public Integer getWarnState() {
return warnState; return warnState;
} }
public void setWarnState(String warnState) { public void setWarnState(Integer warnState) {
this.warnState = warnState; this.warnState = warnState;
} }
public UUID getBillId() { public UUID getBillId() {
......
package com.xyst.dinas.biz.warn; package com.xyst.dinas.biz.warn;
import java.util.List;
import java.util.UUID; import java.util.UUID;
/** /**
...@@ -13,12 +12,6 @@ import java.util.UUID; ...@@ -13,12 +12,6 @@ import java.util.UUID;
*/ */
public interface WarnSetting { public interface WarnSetting {
//触发时机
/** 预警开关:是否预警*/
boolean isOpen();
/** 预警设置ID*/ /** 预警设置ID*/
UUID getSettingId(); UUID getSettingId();
...@@ -39,11 +32,15 @@ public interface WarnSetting { ...@@ -39,11 +32,15 @@ public interface WarnSetting {
/** 阀值下限*/ /** 阀值下限*/
String getMin(); String getMin();
/** 人员*/ /** 通知人员*/
String[] getPersonnel(); String[] getPersonnel();
/** 备注*/ /** 备注*/
String getMemo(); String getMemo();
/** 预警开关:是否预警*/
boolean isOpen();
/** 预警计算器: Bean标识*/
String warnCalculator();
} }
...@@ -10,12 +10,26 @@ public class WarnSettingConstant { ...@@ -10,12 +10,26 @@ public class WarnSettingConstant {
/** 实体名:预警执行记录 */ /** 实体名:预警执行记录 */
public static final String ENTITY_WARNINGEXE = "com.xyst.dinas.biz.datamodel.WarningExe"; public static final String ENTITY_WARNINGEXE = "com.xyst.dinas.biz.datamodel.WarningExe";
/** 预警结束时间 */ /** 预警设置ID */
public static final String END_TIME = "endTime"; public static final String WARN_SETTING = "warnSetting";
/** 预警开始时间 */
public static final String START_TIME = "startTime";
/** 最近预警时间 */ /** 最近预警时间 */
public static final String RECENTLY_TIME = "recentlyTime"; public static final String RECENTLY_TIME = "recentlyTime";
/** 预警结束时间 */
public static final String END_TIME = "endTime";
/** 预警记录状态 */
public static final String WARN_STATE = "warnState"; public static final String WARN_STATE = "warnState";
/** 实际值 */
public static final String ACTUAL_VALUE = "actualValue";
/** 预警计算器 */
public static final String warnCalculator = "warnCalculator";
/** 预警开关 */
public static final String isOpen = "isOpen";
/** 预警阀值下限 */
public static final String min = "min";
/** 预警阀值上限 */
public static final String max = "max";
/** /**
......
...@@ -2,23 +2,21 @@ package com.xyst.dinas.biz.warn; ...@@ -2,23 +2,21 @@ package com.xyst.dinas.biz.warn;
import java.util.UUID; import java.util.UUID;
public class WarnSettingEntity implements WarnSetting{ public class WarnSettingEntity implements WarnSetting {
private UUID settingId; private UUID settingId;
private String billType; private String billType;
private UUID billId; private UUID billId;
private String target; private String target;
private String targetType; private String targetType;
private String max; private String max;
private String min; private String min;
private String warnCalculator;
private String[] personnel; private String[] personnel;
private String memo;
private boolean isOpen; private boolean isOpen;
private String memo;
public String getTargetType() { public String getTargetType() {
return targetType; return targetType;
} }
...@@ -83,7 +81,6 @@ public class WarnSettingEntity implements WarnSetting{ ...@@ -83,7 +81,6 @@ public class WarnSettingEntity implements WarnSetting{
this.min = min; this.min = min;
} }
public String[] getPersonnel() { public String[] getPersonnel() {
return personnel; return personnel;
} }
...@@ -100,5 +97,14 @@ public class WarnSettingEntity implements WarnSetting{ ...@@ -100,5 +97,14 @@ public class WarnSettingEntity implements WarnSetting{
this.isOpen = isOpen; this.isOpen = isOpen;
} }
public void setWarnCalculator(String warnCalculator) {
this.warnCalculator = warnCalculator;
}
@Override
public String warnCalculator() {
return warnCalculator;
}
} }
...@@ -11,44 +11,38 @@ public enum WarnTargetTypeEnum { ...@@ -11,44 +11,38 @@ public enum WarnTargetTypeEnum {
/** /**
* 整数 * 整数
*/ */
INT_TYPE("INT_TYPE","整数"), INT_TYPE("整数"),
/** /**
* 小数 * 小数
*/ */
NUMBER_TYPE("NUMBER_TYPE","小数"), NUMBER_TYPE("小数"),
/** /**
* 日期 * 日期
*/ */
DATE_TYPE("DATE_TYPE","日期"), DATE_TYPE("日期"),
/** /**
* 时间 * 时间
*/ */
TIME_TYPE("TIME_TYPE","时间"), TIME_TYPE("时间"),
/** /**
* 日期时间 * 日期时间
*/ */
DATE_TIME_TYPE("DATE_TIME_TYPE","日期时间"), DATE_TIME_TYPE("日期时间"),
/** /**
* 布尔 * 布尔
*/ */
BOOL_TYPE("BOOL_TYPE","布尔"), BOOL_TYPE("布尔"),
; ;
String code; String code;
String name; String name;
WarnTargetTypeEnum(String code,String name) { WarnTargetTypeEnum(String name) {
this.code = code;
this.name = name; this.name = name;
} }
public String getCode() {
return code;
}
public String getName() { public String getName() {
return name; return name;
} }
......
...@@ -16,7 +16,7 @@ import com.beecode.bcp.type.KObject; ...@@ -16,7 +16,7 @@ import com.beecode.bcp.type.KObject;
import com.beecode.bcp.type.json.JSONObjectUtils; import com.beecode.bcp.type.json.JSONObjectUtils;
import com.beecode.inz.common.BaseConstants; import com.beecode.inz.common.BaseConstants;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.xyst.dinas.biz.request.UpdateWarnSetting; import com.xyst.dinas.biz.request.WarnSettingReq;
import com.xyst.dinas.biz.warn.dao.WarnSettingDao; import com.xyst.dinas.biz.warn.dao.WarnSettingDao;
import com.xyst.dinas.biz.warn.service.WarningService; import com.xyst.dinas.biz.warn.service.WarningService;
...@@ -27,7 +27,8 @@ public class WarningServiceImpl implements WarningService{ ...@@ -27,7 +27,8 @@ public class WarningServiceImpl implements WarningService{
private WarnSettingDao warnSettingDao; private WarnSettingDao warnSettingDao;
/** /**
* 新增预警设置 * 新增预警设置<br/>
* 自动触发预警
*/ */
@Override @Override
public UUID insertWarnSetting(WarnSetting warnSetting) { public UUID insertWarnSetting(WarnSetting warnSetting) {
...@@ -38,7 +39,42 @@ public class WarningServiceImpl implements WarningService{ ...@@ -38,7 +39,42 @@ public class WarningServiceImpl implements WarningService{
object.set(BaseConstants.CREATE_TIME, LocalDateTime.now()); object.set(BaseConstants.CREATE_TIME, LocalDateTime.now());
object.set(BaseConstants.DEL,false); object.set(BaseConstants.DEL,false);
object.set(BaseConstants.DISCARD,false); object.set(BaseConstants.DISCARD,false);
return warnSettingDao.create(object); object.set(WarnSettingConstant.isOpen, warnSetting.isOpen());
object.set(WarnSettingConstant.warnCalculator, warnSetting.warnCalculator());
UUID warSettingId = warnSettingDao.create(object);
//新增后触发预警
BaseBusinessWarn baseBusinessWarn = new BaseBusinessWarn(warSettingId);
baseBusinessWarn.warn();
return warSettingId;
}
/**
* 更新预警设置<br/>
* 自动触发预警
*/
@Override
public void updateWarnSetting(WarnSettingReq warnSetting) {
UUID warSettingId = warnSetting.getId();
Assert.notNull(warSettingId, "The warSettingId must not be null");
KObject warSettingIdObj = warnSettingDao.queryWarnSettingById(warSettingId);
List<UUID> personnel = warnSetting.getPersonnel();
if (personnel!=null) {
String personnelStr = UuidListToString(personnel);
warSettingIdObj.set("personnel", personnelStr);
}
String min = warnSetting.getMin();
if(min != null) warSettingIdObj.set(WarnSettingConstant.min, min);
String max = warnSetting.getMax();
if(max != null) warSettingIdObj.set(WarnSettingConstant.max, max);
Boolean isOpen = warnSetting.isOpen();
if(isOpen != null) warSettingIdObj.set(WarnSettingConstant.isOpen, isOpen);
warnSettingDao.update(warSettingIdObj);
//修改后触发预警
BaseBusinessWarn baseBusinessWarn = new BaseBusinessWarn(warSettingId);
baseBusinessWarn.warn();
} }
/** /**
...@@ -52,14 +88,28 @@ public class WarningServiceImpl implements WarningService{ ...@@ -52,14 +88,28 @@ public class WarningServiceImpl implements WarningService{
KClass type = Amino.getApplicationMetadataContext().getBean(WarnSettingConstant.ENTITY_WARNINGEXE, KClass.class); KClass type = Amino.getApplicationMetadataContext().getBean(WarnSettingConstant.ENTITY_WARNINGEXE, KClass.class);
JsonNode json = JSONObjectUtils.toJson(warnExeRecord); JsonNode json = JSONObjectUtils.toJson(warnExeRecord);
KObject object = JSONObjectUtils.toObject(json, type); KObject object = JSONObjectUtils.toObject(json, type);
object.set("startTime", warnExeRecord.getStartTime()); object.set(WarnSettingConstant.START_TIME, warnExeRecord.getStartTime());
object.set("recentlyTime", warnExeRecord.getRecentlyTime()); object.set(WarnSettingConstant.RECENTLY_TIME, warnExeRecord.getRecentlyTime());
UUID warnSettingId = warnExeRecord.getWarnSettingId(); UUID warnSettingId = warnExeRecord.getWarnSettingId();
KObject warnSettingObj = warnSettingDao.queryWarnSettingById(warnSettingId); KObject warnSettingObj = warnSettingDao.queryWarnSettingById(warnSettingId);
object.set("warnSetting", warnSettingObj); object.set(WarnSettingConstant.WARN_SETTING, warnSettingObj);
object.set(WarnSettingConstant.WARN_STATE, warnExeRecord.getWarnState());
object.set(WarnSettingConstant.ACTUAL_VALUE, warnExeRecord.getActualValue());
return warnSettingDao.create(object); return warnSettingDao.create(object);
} }
@Override
public void updateWarnExe(WarnExeRecord warnExeRecord) {
KClass type = Amino.getApplicationMetadataContext().getBean(WarnSettingConstant.ENTITY_WARNINGEXE, KClass.class);
JsonNode json = JSONObjectUtils.toJson(warnExeRecord);
KObject object = JSONObjectUtils.toObject(json, type);
object.set("recentlyTime", warnExeRecord.getRecentlyTime());
object.set("endTime", warnExeRecord.getEndTime());
object.set("warnState", warnExeRecord.getWarnState());
object.set("actualValue", warnExeRecord.getActualValue());
warnSettingDao.update(object);
}
/** /**
* 结束一条预警设置的预警执行记录 * 结束一条预警设置的预警执行记录
* @param warnSettingId * @param warnSettingId
...@@ -94,7 +144,7 @@ public class WarningServiceImpl implements WarningService{ ...@@ -94,7 +144,7 @@ public class WarningServiceImpl implements WarningService{
@Override @Override
public void ignoreWarnExeRecord(UUID id) { public void ignoreWarnExeRecord(UUID id) {
KObject kObject = warnSettingDao.queryWarningExeById(id); KObject kObject = warnSettingDao.queryWarningExeById(id);
kObject.set(WarnSettingConstant.WARN_STATE, WarnStateEnum.IGNORE.getValue()+""); kObject.set(WarnSettingConstant.WARN_STATE, WarnStateEnum.IGNORE.getValue());
warnSettingDao.update(kObject); warnSettingDao.update(kObject);
} }
...@@ -103,19 +153,6 @@ public class WarningServiceImpl implements WarningService{ ...@@ -103,19 +153,6 @@ public class WarningServiceImpl implements WarningService{
return warnSettingDao.warnRecodeGroupInfo(regionalCompanyIds,targets); return warnSettingDao.warnRecodeGroupInfo(regionalCompanyIds,targets);
} }
@Override
public void updateWarnExe(WarnExeRecord warnExeRecord) {
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.getStartTime());
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);
}
@Override @Override
public KObject queryWarnSettingById(UUID id) { public KObject queryWarnSettingById(UUID id) {
...@@ -123,28 +160,6 @@ public class WarningServiceImpl implements WarningService{ ...@@ -123,28 +160,6 @@ public class WarningServiceImpl implements WarningService{
return KObj; return KObj;
} }
@Override
public void updateWarnSetting(UpdateWarnSetting warnSetting) {
UUID warSettingId = warnSetting.getId();
Assert.notNull(warSettingId, "The warSettingId must not be null");
KObject warSettingIdObj = warnSettingDao.queryWarnSettingById(warSettingId);
List<UUID> personnel = warnSetting.getPersonnel();
if (personnel!=null) {
String personnelStr = UuidListToString(personnel);
warSettingIdObj.set("personnel", personnelStr);
}
String min = warnSetting.getMin();
if(min != null) {
warSettingIdObj.set("min", min);
}
String max = warnSetting.getMax();
if(max != null) {
warSettingIdObj.set("max", max);
}
warnSettingDao.update(warSettingIdObj);
}
/** /**
* 删除预警设置 * 删除预警设置
......
package com.xyst.dinas.biz.warn.dao; package com.xyst.dinas.biz.warn.dao;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.persistence.Tuple; import javax.persistence.Tuple;
import com.beecode.amino.core.Amino;
import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.json.JSONObjectUtils;
import com.beecode.inz.basis.util.JsonUtil;
import com.xyst.dinas.biz.constant.SandMiningAreaConstant;
import com.xyst.dinas.biz.enumeration.WarnStateEnum;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.hibernate.HibernateException; import org.hibernate.HibernateException;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.criterion.*; import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Disjunction;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.query.Query; import org.hibernate.query.Query;
import org.hibernate.transform.Transformers; import org.hibernate.transform.Transformers;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateCallback; import org.springframework.orm.hibernate5.HibernateCallback;
import org.springframework.orm.hibernate5.HibernateOperations; import org.springframework.orm.hibernate5.HibernateOperations;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import org.springframework.util.CollectionUtils;
import com.beecode.amino.core.Amino;
import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.KObject; import com.beecode.bcp.type.KObject;
import com.xyst.dinas.biz.enumeration.WarnStateEnum;
import com.xyst.dinas.biz.warn.WarnExeRecord; import com.xyst.dinas.biz.warn.WarnExeRecord;
import com.xyst.dinas.biz.warn.WarnSetting; import com.xyst.dinas.biz.warn.WarnSetting;
import com.xyst.dinas.biz.warn.WarnSettingConstant; import com.xyst.dinas.biz.warn.WarnSettingConstant;
import com.xyst.dinas.biz.warn.WarnSettingEntity; import com.xyst.dinas.biz.warn.WarnSettingEntity;
import org.springframework.util.CollectionUtils;
@Repository @Repository
public class WarnSettingDao { public class WarnSettingDao {
...@@ -62,7 +69,7 @@ public class WarnSettingDao { ...@@ -62,7 +69,7 @@ public class WarnSettingDao {
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
warnRecord.set(WarnSettingConstant.END_TIME, now); warnRecord.set(WarnSettingConstant.END_TIME, now);
warnRecord.set(WarnSettingConstant.RECENTLY_TIME, now); warnRecord.set(WarnSettingConstant.RECENTLY_TIME, now);
warnRecord.set(WarnSettingConstant.WARN_STATE, WarnStateEnum.OVER.getValue() + ""); warnRecord.set(WarnSettingConstant.WARN_STATE, WarnStateEnum.OVER.getValue());
update(warnRecord); update(warnRecord);
} }
...@@ -82,7 +89,7 @@ public class WarnSettingDao { ...@@ -82,7 +89,7 @@ public class WarnSettingDao {
if (billId != null) hql.append(" and billId =:billId"); if (billId != null) hql.append(" and billId =:billId");
if (target != null) hql.append(" and target =:target"); if (target != null) hql.append(" and target =:target");
Query<KObject> query = session.createQuery(hql.toString(), KObject.class);//KObject Query<KObject> query = session.createQuery(hql.toString(), KObject.class);
query.setParameter("billType", billType); query.setParameter("billType", billType);
if (billId != null) query.setParameter("billId", billId); if (billId != null) query.setParameter("billId", billId);
if (target != null) query.setParameter("target", target); if (target != null) query.setParameter("target", target);
...@@ -102,6 +109,7 @@ public class WarnSettingDao { ...@@ -102,6 +109,7 @@ public class WarnSettingDao {
String personnel = singleResult.getString("personnel"); String personnel = singleResult.getString("personnel");
boolean isOpen = singleResult.getBoolean("isOpen"); boolean isOpen = singleResult.getBoolean("isOpen");
String memo = singleResult.getString("memo"); String memo = singleResult.getString("memo");
String warnCalculator = singleResult.getString("warnCalculator");
WarnSettingEntity warnSettingEntity = new WarnSettingEntity(); WarnSettingEntity warnSettingEntity = new WarnSettingEntity();
warnSettingEntity.setBillType(billType); warnSettingEntity.setBillType(billType);
...@@ -112,6 +120,7 @@ public class WarnSettingDao { ...@@ -112,6 +120,7 @@ public class WarnSettingDao {
warnSettingEntity.setMax(max); warnSettingEntity.setMax(max);
warnSettingEntity.setOpen(isOpen); warnSettingEntity.setOpen(isOpen);
warnSettingEntity.setMemo(memo); warnSettingEntity.setMemo(memo);
warnSettingEntity.setWarnCalculator(warnCalculator);
String[] personnelArray = personnel != null && !personnel.isEmpty() ? personnel.split(",") : null; String[] personnelArray = personnel != null && !personnel.isEmpty() ? personnel.split(",") : null;
warnSettingEntity.setPersonnel(personnelArray); warnSettingEntity.setPersonnel(personnelArray);
...@@ -161,6 +170,7 @@ public class WarnSettingDao { ...@@ -161,6 +170,7 @@ public class WarnSettingDao {
UUID billId = singleResult.getUuid("billId"); UUID billId = singleResult.getUuid("billId");
UUID id = singleResult.getUuid("id"); UUID id = singleResult.getUuid("id");
Long version = singleResult.getLong("version"); Long version = singleResult.getLong("version");
int warnState = singleResult.getInt("warnState");
WarnExeRecord warnExeRecord = new WarnExeRecord(); WarnExeRecord warnExeRecord = new WarnExeRecord();
warnExeRecord.setStartTime(startTime); warnExeRecord.setStartTime(startTime);
...@@ -173,10 +183,9 @@ public class WarnSettingDao { ...@@ -173,10 +183,9 @@ public class WarnSettingDao {
warnExeRecord.setMemo(memo); warnExeRecord.setMemo(memo);
warnExeRecord.setTarget(target); warnExeRecord.setTarget(target);
warnExeRecord.setBillId(billId); warnExeRecord.setBillId(billId);
warnExeRecord.setWarnState("warnState"); warnExeRecord.setWarnState(warnState);
warnExeRecord.setId(id); warnExeRecord.setId(id);
warnExeRecord.setVersion(version); warnExeRecord.setVersion(version);
return warnExeRecord; return warnExeRecord;
}); });
} }
......
...@@ -8,7 +8,7 @@ import org.springframework.lang.NonNull; ...@@ -8,7 +8,7 @@ import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
import com.beecode.bcp.type.KObject; import com.beecode.bcp.type.KObject;
import com.xyst.dinas.biz.request.UpdateWarnSetting; import com.xyst.dinas.biz.request.WarnSettingReq;
import com.xyst.dinas.biz.warn.BaseBusinessWarn; import com.xyst.dinas.biz.warn.BaseBusinessWarn;
import com.xyst.dinas.biz.warn.WarnExeRecord; import com.xyst.dinas.biz.warn.WarnExeRecord;
import com.xyst.dinas.biz.warn.WarnSetting; import com.xyst.dinas.biz.warn.WarnSetting;
...@@ -38,7 +38,7 @@ public interface WarningService { ...@@ -38,7 +38,7 @@ public interface WarningService {
* 更新预警设置 * 更新预警设置
* @param warnSetting * @param warnSetting
*/ */
void updateWarnSetting(UpdateWarnSetting warnSetting); void updateWarnSetting(WarnSettingReq warnSetting);
/** /**
* 删除预警设置 * 删除预警设置
......
...@@ -7,7 +7,7 @@ import com.beecode.bcp.type.KObject; ...@@ -7,7 +7,7 @@ import com.beecode.bcp.type.KObject;
import com.beecode.bcp.type.json.JSONObjectUtils; import com.beecode.bcp.type.json.JSONObjectUtils;
import com.beecode.inz.basis.team.pojo.ResponseObj; import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.xyst.dinas.biz.constant.SandMiningAreaConstant; import com.xyst.dinas.biz.constant.SandMiningAreaConstant;
import com.xyst.dinas.biz.request.UpdateWarnSetting; import com.xyst.dinas.biz.request.WarnSettingReq;
import com.xyst.dinas.biz.service.SandMiningAreaService; import com.xyst.dinas.biz.service.SandMiningAreaService;
import com.xyst.dinas.biz.warn.service.WarningService; import com.xyst.dinas.biz.warn.service.WarningService;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -130,7 +130,7 @@ public class SandMiningAreaController { ...@@ -130,7 +130,7 @@ public class SandMiningAreaController {
//更新预警设置 //更新预警设置
@PostMapping("/warnSetting/update")//采区预警设置更新 @PostMapping("/warnSetting/update")//采区预警设置更新
public ResponseObj updateWarnSettingPerson(@RequestBody UpdateWarnSetting updateWarnSetting) { public ResponseObj updateWarnSettingPerson(@RequestBody WarnSettingReq updateWarnSetting) {
UUID settingId = updateWarnSetting.getId(); UUID settingId = updateWarnSetting.getId();
warningSettingService.updateWarnSetting(updateWarnSetting); warningSettingService.updateWarnSetting(updateWarnSetting);
......
...@@ -8,11 +8,15 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -8,11 +8,15 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.beecode.bcp.type.KObject; import com.beecode.bcp.type.KObject;
import com.beecode.inz.basis.team.pojo.ResponseObj; import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.xyst.dinas.biz.request.WarnSettingReq;
import com.xyst.dinas.biz.warn.WarnSettingEntity;
import com.xyst.dinas.biz.warn.service.WarningService; import com.xyst.dinas.biz.warn.service.WarningService;
/** /**
...@@ -27,13 +31,22 @@ public class WarnSettingController { ...@@ -27,13 +31,22 @@ public class WarnSettingController {
@Autowired @Autowired
private WarningService warningService; private WarningService warningService;
//新增预警设置
@PostMapping("/warnsetting/insert")
public Object insertWarnSetting(@RequestBody WarnSettingEntity warnSettingEntity) {
warningService.insertWarnSetting(warnSettingEntity);
return ResponseObj.success("预警设置新增成功");
}
//更新预警设置 //更新预警设置
// @PostMapping("/warnsetting/update") @PostMapping("/warnsetting/update")
// public String updateWarnSettingPerson(@RequestBody UpdateWarnSetting warnSetting) { public Object updateWarnSetting(@RequestBody WarnSettingReq warnSettingReq) {
//
// warningSettingService.updateWarnSetting(warnSetting); warningService.updateWarnSetting(warnSettingReq);
// return "success"; return ResponseObj.success("预警设置更新成功");
// } }
//查询一条预警设置 //查询一条预警设置
@GetMapping("/warnsetting/{id}") @GetMapping("/warnsetting/{id}")
...@@ -53,4 +66,6 @@ public class WarnSettingController { ...@@ -53,4 +66,6 @@ public class WarnSettingController {
} }
...@@ -35,6 +35,9 @@ ...@@ -35,6 +35,9 @@
<attribute id='cbb5b983-299b-4259-97d9-6470651bb18b' name='isOpen' columnName='is_open' title='是否开启' type='boolean' default='' precision='' isArray='false'> <attribute id='cbb5b983-299b-4259-97d9-6470651bb18b' name='isOpen' columnName='is_open' title='是否开启' type='boolean' default='' precision='' isArray='false'>
<annotation id='ea154cb8-f939-4e9f-9793-9673d984161f' attributeId='ffc0a199-4038-4ebf-a94f-a0f12bfc76dd' name='length' value='100'></annotation> <annotation id='ea154cb8-f939-4e9f-9793-9673d984161f' attributeId='ffc0a199-4038-4ebf-a94f-a0f12bfc76dd' name='length' value='100'></annotation>
</attribute> </attribute>
<attribute id='cbb5b983-299b-4259-97d9-6470651bb18b' name='warnCalculator' columnName='warn_calculator' title='预警计算器' type='string' default='' precision='' isArray='false'>
<annotation id='ea154cb8-f939-4e9f-9793-9673d984161f' attributeId='ffc0a199-4038-4ebf-a94f-a0f12bfc76dd' name='length' value='100'></annotation>
</attribute>
<attribute id='cbb5b983-299b-4259-97d9-6470651bb18b' name='personnel' columnName='personnel' title='人员' type='string' default='' precision='' isArray='false'> <attribute id='cbb5b983-299b-4259-97d9-6470651bb18b' name='personnel' columnName='personnel' title='人员' type='string' default='' precision='' isArray='false'>
<annotation id='ea154cb8-f939-4e9f-9793-9673d984161f' attributeId='ffc0a199-4038-4ebf-a94f-a0f12bfc76dd' name='length' value='1000'></annotation> <annotation id='ea154cb8-f939-4e9f-9793-9673d984161f' attributeId='ffc0a199-4038-4ebf-a94f-a0f12bfc76dd' name='length' value='1000'></annotation>
</attribute> </attribute>
......
...@@ -27,8 +27,8 @@ ...@@ -27,8 +27,8 @@
<annotation id='00caecc1-35aa-4342-90c8-250f84609fe4' attributeId='55efd3f5-036a-4ac4-83c9-14e22cf5465a' name='length' value='undefined'></annotation> <annotation id='00caecc1-35aa-4342-90c8-250f84609fe4' attributeId='55efd3f5-036a-4ac4-83c9-14e22cf5465a' name='length' value='undefined'></annotation>
<annotation id='95a6dd6d-c676-4265-9c8b-d115c13b472f' attributeId='43768653-e259-4b0f-8c9d-8739f030675b' name='mappingType' value='many-to-one'></annotation> <annotation id='95a6dd6d-c676-4265-9c8b-d115c13b472f' attributeId='43768653-e259-4b0f-8c9d-8739f030675b' name='mappingType' value='many-to-one'></annotation>
</attribute> </attribute>
<attribute id='cbb5b983-299b-4259-97d9-6470651bb18b' name='warnState' columnName='warn_state' title='预警状态' type='string' default='' precision='' isArray='false'> <attribute id='cbb5b983-299b-4259-97d9-6470651bb18b' name='warnState' columnName='warn_state' title='预警状态' type='int' default='' precision='' isArray='false'>
<annotation id='ea154cb8-f939-4e9f-9793-9673d984161f' attributeId='ffc0a199-4038-4ebf-a94f-a0f12bfc76dd' name='length' value='100'></annotation> <annotation id='ea154cb8-f939-4e9f-9793-9673d984161f' attributeId='ffc0a199-4038-4ebf-a94f-a0f12bfc76dd' name='length' value='6'></annotation>
</attribute> </attribute>
<attribute id='cbb5b983-299b-4259-97d9-6470651bb18b' name='message' columnName='message' title='预警消息' type='string' default='' precision='' isArray='false'> <attribute id='cbb5b983-299b-4259-97d9-6470651bb18b' name='message' columnName='message' title='预警消息' type='string' default='' precision='' isArray='false'>
<annotation id='ea154cb8-f939-4e9f-9793-9673d984161f' attributeId='ffc0a199-4038-4ebf-a94f-a0f12bfc76dd' name='length' value='100'></annotation> <annotation id='ea154cb8-f939-4e9f-9793-9673d984161f' attributeId='ffc0a199-4038-4ebf-a94f-a0f12bfc76dd' name='length' value='100'></annotation>
......
...@@ -173,6 +173,29 @@ ...@@ -173,6 +173,29 @@
<m:attribute> <m:attribute>
<m:annotations> <m:annotations>
<m:annotation> <m:annotation>
<m:type>bcp.type.constraint.StringLength</m:type>
<m:value>100</m:value>
</m:annotation>
<m:annotation>
<m:type>javax.persistence.Column</m:type>
<m:properties>
<m:property>
<m:key>name</m:key>
<m:value>warn_calculator</m:value>
</m:property>
</m:properties>
</m:annotation>
</m:annotations>
<m:id>cbb5b983-299b-4259-97d9-6470651bb18b</m:id>
<m:name>warnCalculator</m:name>
<m:title>预警计算器</m:title>
<m:type>string</m:type>
<m:description></m:description>
<m:default></m:default>
</m:attribute>
<m:attribute>
<m:annotations>
<m:annotation>
<m:type>javax.persistence.Column</m:type> <m:type>javax.persistence.Column</m:type>
<m:properties> <m:properties>
<m:property> <m:property>
......
...@@ -123,10 +123,6 @@ ...@@ -123,10 +123,6 @@
<m:attribute> <m:attribute>
<m:annotations> <m:annotations>
<m:annotation> <m:annotation>
<m:type>bcp.type.constraint.StringLength</m:type>
<m:value>100</m:value>
</m:annotation>
<m:annotation>
<m:type>javax.persistence.Column</m:type> <m:type>javax.persistence.Column</m:type>
<m:properties> <m:properties>
<m:property> <m:property>
...@@ -136,13 +132,13 @@ ...@@ -136,13 +132,13 @@
</m:properties> </m:properties>
</m:annotation> </m:annotation>
</m:annotations> </m:annotations>
<m:id>cbb5b983-299b-4259-97d9-6470651bb18b</m:id> <m:id>0933ceb1-f327-4372-a316-cffa1c80991a</m:id>
<m:name>warnState</m:name> <m:name>warnState</m:name>
<m:title>预警状态</m:title> <m:title>预警状态</m:title>
<m:type>string</m:type> <m:type>int</m:type>
<m:description></m:description> <m:description></m:description>
<m:default></m:default> <m:default></m:default>
</m:attribute> </m:attribute>
<m:attribute> <m:attribute>
<m:annotations> <m:annotations>
<m:annotation> <m:annotation>
......
...@@ -64,6 +64,9 @@ ...@@ -64,6 +64,9 @@
<property name="isOpen" type="boolean" not-null="false"> <property name="isOpen" type="boolean" not-null="false">
<column name="is_open" length="1"></column> <column name="is_open" length="1"></column>
</property> </property>
<property name="warnCalculator" type="nstring" not-null="false">
<column name="warn_calculator" length="100"></column>
</property>
<property name="personnel" type="nstring" not-null="false"> <property name="personnel" type="nstring" not-null="false">
<column name="personnel" length="1000"></column> <column name="personnel" length="1000"></column>
......
...@@ -25,8 +25,8 @@ ...@@ -25,8 +25,8 @@
<many-to-one name="warnSetting" entity-name="com.xyst.dinas.biz.datamodel.WarnSetting" fetch="select"> <many-to-one name="warnSetting" entity-name="com.xyst.dinas.biz.datamodel.WarnSetting" fetch="select">
<column name="warn_setting_id" not-null="false"/> <column name="warn_setting_id" not-null="false"/>
</many-to-one> </many-to-one>
<property name="warnState" type="nstring" not-null="false"> <property name="warnState" type="int" not-null="false">
<column name="warn_state" length="50"></column> <column name="warn_state" length="6"></column>
</property> </property>
<property name="message" type="nstring" not-null="false"> <property name="message" type="nstring" not-null="false">
<column name="message" length="100"></column> <column name="message" length="100"></column>
......
...@@ -23,6 +23,9 @@ import com.xyst.dinas.contract.service.ContractService; ...@@ -23,6 +23,9 @@ import com.xyst.dinas.contract.service.ContractService;
import com.xyst.dinas.contract.service.ContractWarnService; import com.xyst.dinas.contract.service.ContractWarnService;
import com.xyst.dinas.contract.task.ContractExpireCheckTask; import com.xyst.dinas.contract.task.ContractExpireCheckTask;
import com.xyst.dinas.contract.task.ContractExpireCheckTaskRegister; import com.xyst.dinas.contract.task.ContractExpireCheckTaskRegister;
import com.xyst.dinas.contract.warn.AdvanceBalanceWarningCalculator;
import com.xyst.dinas.contract.warn.ContractExpireWarningCalculator;
import com.xyst.dinas.contract.warn.DinasCountWarningCalculator;
import com.xyst.dinas.contract.web.ContractController; import com.xyst.dinas.contract.web.ContractController;
import com.xyst.dinas.contract.web.ContractWarnController; import com.xyst.dinas.contract.web.ContractWarnController;
/** /**
...@@ -134,4 +137,20 @@ public class ContractConfiguration { ...@@ -134,4 +137,20 @@ public class ContractConfiguration {
public ContractExpireCheckTask contractExpireCheckTask() { public ContractExpireCheckTask contractExpireCheckTask() {
return new ContractExpireCheckTask(); return new ContractExpireCheckTask();
} }
@Bean("com.xyst.dinas.contract.warn.DinasCountWarningCalculator")
public DinasCountWarningCalculator dinasCountWarningCalculator() {
return new DinasCountWarningCalculator();
}
@Bean("com.xyst.dinas.contract.warn.AdvanceBalanceWarningCalculator")
public AdvanceBalanceWarningCalculator advanceBalanceWarningCalculator() {
return new AdvanceBalanceWarningCalculator();
}
@Bean("com.xyst.dinas.contract.warn.ContractExpireWarningCalculator")
public ContractExpireWarningCalculator contractExpireWarningCalculator() {
return new ContractExpireWarningCalculator();
}
} }
...@@ -8,6 +8,9 @@ public class ContractConstant { ...@@ -8,6 +8,9 @@ public class ContractConstant {
/** 实体名:合同表 */ /** 实体名:合同表 */
public static final String ENTITY_CONTRACT = "com.xyst.dinas.contract.datamodel.Contract"; public static final String ENTITY_CONTRACT = "com.xyst.dinas.contract.datamodel.Contract";
/** 实体名:合同子表 */
public static final String CONTRACT_DETAILS = "contractDetails";
/** 项目 */ /** 项目 */
public static final String PROJECT = "project"; public static final String PROJECT = "project";
/** 项目编号 */ /** 项目编号 */
...@@ -42,6 +45,9 @@ public class ContractConstant { ...@@ -42,6 +45,9 @@ public class ContractConstant {
public static final String CHANGE_REASON = "changeReason"; public static final String CHANGE_REASON = "changeReason";
/** 砂石种类 */
public static final String dinasType = "dinasType";
/*********************** 工作流 *************************************/ /*********************** 工作流 *************************************/
......
...@@ -31,6 +31,7 @@ import com.xyst.dinas.contract.enumeration.ContractStateEnum; ...@@ -31,6 +31,7 @@ import com.xyst.dinas.contract.enumeration.ContractStateEnum;
import com.xyst.dinas.contract.internal.dao.ContractDao; import com.xyst.dinas.contract.internal.dao.ContractDao;
import com.xyst.dinas.contract.internal.dao.ContractInfoDao; import com.xyst.dinas.contract.internal.dao.ContractInfoDao;
import com.xyst.dinas.contract.service.ContractService; import com.xyst.dinas.contract.service.ContractService;
import com.xyst.dinas.contract.warn.ContractWarnConst;
import com.xyst.dinas.project.dao.ProjectFiledDao; import com.xyst.dinas.project.dao.ProjectFiledDao;
import com.xyst.dinas.project.dao.PurchaseSandCompanyDao; import com.xyst.dinas.project.dao.PurchaseSandCompanyDao;
...@@ -207,40 +208,40 @@ public class ContractServiceImpl implements ContractService { ...@@ -207,40 +208,40 @@ public class ContractServiceImpl implements ContractService {
//1.合同审批通过后,自动新增砂石余量预警设置 //1.合同审批通过后,自动新增砂石余量预警设置
UUID contractId = contract.getUuid("id"); UUID contractId = contract.getUuid("id");
String billType = "合同"; String billType = ContractWarnConst.billType;
String contractBaseInfo = getContractBaseInfo(contract); String contractBaseInfo = getContractBaseInfo(contract);
List<KObject> detials = contract.get("contractDetails").toList(); List<KObject> detials = contract.get("contractDetails").toList();
//
for (KObject detail : detials) { for (KObject detail : detials) {
String dinasTypeName = detail.get("dinasType").getString("dinasTypeName"); String dinasTypeName = detail.get("dinasType").getString("dinasTypeName");
WarnSettingEntity warnSetting = new WarnSettingEntity(); WarnSettingEntity warnSetting = new WarnSettingEntity();
warnSetting.setBillType(billType); warnSetting.setBillType(billType);
warnSetting.setBillId(contractId); warnSetting.setBillId(contractId);
warnSetting.setTarget(dinasTypeName); warnSetting.setTarget(dinasTypeName);
warnSetting.setTargetType(WarnTargetTypeEnum.NUMBER_TYPE.getCode()); warnSetting.setTargetType(WarnTargetTypeEnum.NUMBER_TYPE.name());
warnSetting.setOpen(true); warnSetting.setOpen(true);
warnSetting.setMemo(contractBaseInfo); warnSetting.setMemo(contractBaseInfo);
warnSetting.setWarnCalculator(ContractWarnConst.dinasCountWarningCalculator);
warningSettingService.insertWarnSetting(warnSetting); warningSettingService.insertWarnSetting(warnSetting);
} }
//2.自动新增一条合同到期预警设置 //2.自动新增一条合同到期预警设置
String target2 = "到期提醒(天)";
WarnSettingEntity expireWarnSetting = new WarnSettingEntity(); WarnSettingEntity expireWarnSetting = new WarnSettingEntity();
expireWarnSetting.setBillType(billType); expireWarnSetting.setBillType(billType);
expireWarnSetting.setBillId(contractId); expireWarnSetting.setBillId(contractId);
expireWarnSetting.setTarget(target2); expireWarnSetting.setTarget(ContractWarnConst.warningTarget2);
expireWarnSetting.setTargetType(WarnTargetTypeEnum.INT_TYPE.getCode()); expireWarnSetting.setTargetType(WarnTargetTypeEnum.INT_TYPE.name());
expireWarnSetting.setOpen(true); expireWarnSetting.setOpen(true);
expireWarnSetting.setMemo(contractBaseInfo); expireWarnSetting.setMemo(contractBaseInfo);
expireWarnSetting.setWarnCalculator(ContractWarnConst.contractExpireWarningCalculator);
warningSettingService.insertWarnSetting(expireWarnSetting); warningSettingService.insertWarnSetting(expireWarnSetting);
//3.自动新增一条合同预付款余额预警设置 //3.自动新增一条合同预付款余额预警设置
String target3 = "预付款余额";
WarnSettingEntity paymentWarnSetting = new WarnSettingEntity(); WarnSettingEntity paymentWarnSetting = new WarnSettingEntity();
paymentWarnSetting.setBillType(billType); paymentWarnSetting.setBillType(billType);
paymentWarnSetting.setBillId(contractId); paymentWarnSetting.setBillId(contractId);
paymentWarnSetting.setTarget(target3); paymentWarnSetting.setTarget(ContractWarnConst.warningTarget3);
paymentWarnSetting.setTargetType(WarnTargetTypeEnum.NUMBER_TYPE.getCode()); paymentWarnSetting.setTargetType(WarnTargetTypeEnum.NUMBER_TYPE.name());
paymentWarnSetting.setOpen(true); paymentWarnSetting.setOpen(true);
paymentWarnSetting.setMemo(contractBaseInfo); paymentWarnSetting.setMemo(contractBaseInfo);
paymentWarnSetting.setWarnCalculator(ContractWarnConst.advanceBalanceWarningCalculator);
warningSettingService.insertWarnSetting(paymentWarnSetting); warningSettingService.insertWarnSetting(paymentWarnSetting);
} }
......
package com.xyst.dinas.contract.internal.service; package com.xyst.dinas.contract.internal.service;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import com.beecode.bcp.type.KObject;
import com.xyst.dinas.biz.warn.WarnSettingEntity;
import com.xyst.dinas.biz.warn.service.WarningService;
import com.xyst.dinas.contract.constant.ContractConstant;
import com.xyst.dinas.contract.enumeration.ContractStateEnum;
import com.xyst.dinas.contract.internal.dao.ContractInfoDao;
import com.xyst.dinas.contract.service.ContractWarnService; import com.xyst.dinas.contract.service.ContractWarnService;
public class ContractWarnServiceImpl implements ContractWarnService{ public class ContractWarnServiceImpl implements ContractWarnService{
@Autowired /*
private WarningService warningSettingService; * @Autowired private WarningService warningSettingService;
*
@Autowired * @Autowired private ContractInfoDao contractInfoDao;
private ContractInfoDao contractInfoDao; */
// @Override
public void afterApproved(KObject contract) {
contract.set(ContractConstant.CONTRACT_STATE,ContractStateEnum.EXECUTING.name());
contractInfoDao.update(contract);
//合同审批通过后,自动新增砂石余量预警设置
UUID contractId = contract.getUuid("id");
List<KObject> detials = contract.get("contractDetail").toList();
//
for (KObject detail : detials) {
String dinasTypeName = detail.get("dinasType").getString("dinasTypeName");
String billType = "合同";
WarnSettingEntity warnSetting = new WarnSettingEntity();
warnSetting.setBillType(billType);
warnSetting.setBillId(contractId);
warnSetting.setTarget(dinasTypeName);
warnSetting.setOpen(true);
warningSettingService.insertWarnSetting(warnSetting);
}
}
} }
package com.xyst.dinas.contract.warn;
import org.springframework.beans.factory.annotation.Autowired;
import com.xyst.dinas.biz.warn.IWarningCalculator;
import com.xyst.dinas.biz.warn.WarnSetting;
import com.xyst.dinas.contract.service.ContractService;
/**
* 预付款余额 预警计算器
*
* @author Jackpot
* @date 2021年4月22日
*/
public class AdvanceBalanceWarningCalculator implements IWarningCalculator{
private double advanceBalance;
private String warnMessage;
@Autowired
private ContractService contractService;
@Override
public boolean isWarning(WarnSetting warnSetting) {
//TODO
return false;
}
@Override
public String warnMessage() {
return warnMessage;
}
@Override
public String getActualValue() {
return advanceBalance+"";
}
}
package com.xyst.dinas.contract.warn;
import org.springframework.beans.factory.annotation.Autowired;
import com.xyst.dinas.biz.warn.IWarningCalculator;
import com.xyst.dinas.biz.warn.WarnSetting;
import com.xyst.dinas.contract.service.ContractService;
/**
* 合同过期提醒 预警计算器
*
* @author Jackpot
* @date 2021年4月22日
*/
public class ContractExpireWarningCalculator implements IWarningCalculator{
private double advanceBalance;
private String warnMessage;
@Autowired
private ContractService contractService;
@Override
public boolean isWarning(WarnSetting warnSetting) {
//TODO
return false;
}
@Override
public String warnMessage() {
return warnMessage;
}
@Override
public String getActualValue() {
return advanceBalance+"";
}
}
package com.xyst.dinas.contract.warn;
/**
* 合同砂石余量预警常量
*
* @author Jackpot
* @date 2021年4月22日
*/
public class ContractWarnConst {
public static final String billType = "合同";
public static final String dinasCountWarningCalculator = "com.xyst.dinas.contract.warn.DinasCountWarningCalculator";
/** 预付款余额 预警计算器*/
public static final String advanceBalanceWarningCalculator = "com.xyst.dinas.contract.warn.AdvanceBalanceWarningCalculator";
/** 合同过期提醒 预警计算器*/
public static final String contractExpireWarningCalculator = "com.xyst.dinas.contract.warn.ContractExpireWarningCalculator";
/** 预警指标*/
public static final String warningTarget2 = "到期提醒(天)";
/** 预警指标*/
public static final String warningTarget3 = "预付款余额";
}
package com.xyst.dinas.contract.warn; package com.xyst.dinas.contract.warn;
import com.xyst.dinas.biz.warn.IWarningCalculate; import com.xyst.dinas.biz.warn.IWarningCalculator;
import com.xyst.dinas.biz.warn.WarnSetting; import com.xyst.dinas.biz.warn.WarnSetting;
/** /**
...@@ -9,7 +9,7 @@ import com.xyst.dinas.biz.warn.WarnSetting; ...@@ -9,7 +9,7 @@ import com.xyst.dinas.biz.warn.WarnSetting;
* @author Jackpot * @author Jackpot
* @date 2021年4月1日 * @date 2021年4月1日
*/ */
public class DinasCountWarningCalculate implements IWarningCalculate{ public class DinasCountWarningCalculate implements IWarningCalculator{
//砂石余量 //砂石余量
private double dinsaCount; private double dinsaCount;
......
package com.xyst.dinas.contract.warn;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.beecode.bcp.type.KObject;
import com.xyst.dinas.biz.constant.DinasTypeConstant;
import com.xyst.dinas.biz.warn.IWarningCalculator;
import com.xyst.dinas.biz.warn.WarnSetting;
import com.xyst.dinas.contract.constant.ContractConstant;
import com.xyst.dinas.contract.service.ContractService;
/**
* 砂石余量预警计算器(新增/修改预警设置时使用)
*
* 需要注册为Bean, 把Bean的标识保存到预警设置中
* @author Jackpot
* @date 2021年4月22日
*/
public class DinasCountWarningCalculator implements IWarningCalculator{
//砂石余量
private double dinasAmount;
private String warnMessage;
@Autowired
private ContractService contractService;
@Override
public boolean isWarning(WarnSetting warnSetting) {
String min = warnSetting.getMin();
String target = warnSetting.getTarget();
if(min==null || min.trim().length()==0) return false;
KObject contract = contractService.queryContract(warnSetting.getBillId());
List<KObject> details = contract.get(ContractConstant.CONTRACT_DETAILS).toList();
for (KObject detail : details) {
String dinasTypeName = detail.get(ContractConstant.dinasType).getString(DinasTypeConstant.DINASTYPE_NAME);
if (dinasTypeName.equalsIgnoreCase(target)) {
//业务数据与设置的阀值做比较,计算是否预警
dinasAmount = detail.getDouble(ContractConstant.DINAS_AMOUNT);
if (dinasAmount <= Double.valueOf(min)) {
warnMessage = "["+target+"]"+"的当前余量为"+dinasAmount+",已不足"+min+"吨!";
return true;
}
}
}
return false;
}
@Override
public String warnMessage() {
return warnMessage;
}
@Override
public String getActualValue() {
return dinasAmount+"";
}
}
...@@ -5,18 +5,10 @@ import java.util.UUID; ...@@ -5,18 +5,10 @@ import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.beecode.xlib.runtime.Assert; 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.WarningService;
import com.xyst.dinas.contract.service.ContractService; import com.xyst.dinas.contract.service.ContractService;
import com.xyst.dinas.contract.warn.DinasCountWarningCalculate;
@RestController @RestController
public class ContractWarnController { public class ContractWarnController {
...@@ -26,53 +18,16 @@ public class ContractWarnController { ...@@ -26,53 +18,16 @@ public class ContractWarnController {
@Autowired @Autowired
private ContractService contractService; private ContractService contractService;
@Autowired // @Autowired
private WarningService warningService; // private WarningService warningService;
@PostMapping("/contract/warn/fire")
public void warnFire() {
// 合同审批通过后,自动新增砂石余量预警设置
String billType = "合同";
UUID contractId = UUID.fromString("b399f4a5-e446-439c-9601-177aad94b675");
String target = "细砂2";
int count = 100;// 某种砂石余量
BaseBusinessWarn contractBusinessWarn = warningService.createWarn(billType, contractId, target);
contractBusinessWarn.setWarningCalculate(new DinasCountWarningCalculate(count));
contractBusinessWarn.warn();
}
//查询一条预警设置 //查询一条预警设置
@GetMapping("/contract/warnsetting/{id}") @GetMapping("/contract/warnsetting/{id}")
public Object queryWarnSetting(@PathVariable UUID id) { public Object queryWarnSetting(@PathVariable UUID id) {
Assert.notNull(id,"The id must not be null"); Assert.notNull(id,"The id must not be null");
return contractService.queryWarnSettingById(id); return contractService.queryWarnSettingById(id);
} }
//更新预警设置
@PostMapping("/warnsetting/update")// /contract
public Object updateWarnSettingPerson(@RequestBody UpdateWarnSetting updateWarnSetting) {
UUID settingId = updateWarnSetting.getId();
BaseBusinessWarn contractBusinessWarn = warningService.createWarn(settingId);
WarnSetting warnSetting = contractBusinessWarn.getWarnSetting();
String minOld = warnSetting.getMin()!=null?warnSetting.getMin():"";
String min = updateWarnSetting.getMin()!=null?updateWarnSetting.getMin():"";
warningService.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: 根据合同查询预警设置中所有人员 * @Description: 根据合同查询预警设置中所有人员
* @param id * @param id
......
package com.xyst.dinas.production.processor; package com.xyst.dinas.production.processor;
import com.xyst.dinas.biz.warn.IWarningCalculate; import com.xyst.dinas.biz.warn.IWarningCalculator;
import com.xyst.dinas.biz.warn.WarnSetting; import com.xyst.dinas.biz.warn.WarnSetting;
/** /**
...@@ -9,7 +9,7 @@ import com.xyst.dinas.biz.warn.WarnSetting; ...@@ -9,7 +9,7 @@ import com.xyst.dinas.biz.warn.WarnSetting;
* @author * @author
* @date 2021年4月1日 * @date 2021年4月1日
*/ */
public class SandAreaDinasCountWarningCalculate implements IWarningCalculate{ public class SandAreaDinasCountWarningCalculate implements IWarningCalculator{
/**上岸量 /**上岸量
* *
......
...@@ -12,6 +12,7 @@ import com.xyst.dinas.sales.internal.service.NeedPlanServiceImpl; ...@@ -12,6 +12,7 @@ import com.xyst.dinas.sales.internal.service.NeedPlanServiceImpl;
import com.xyst.dinas.sales.internal.service.SalesPlanServiceImpl; import com.xyst.dinas.sales.internal.service.SalesPlanServiceImpl;
import com.xyst.dinas.sales.processor.SalesPlanProcessor; import com.xyst.dinas.sales.processor.SalesPlanProcessor;
import com.xyst.dinas.sales.processor.SalesPlanTempProcessor; import com.xyst.dinas.sales.processor.SalesPlanTempProcessor;
import com.xyst.dinas.sales.processor.StockAmountWarnCalculator;
import com.xyst.dinas.sales.service.InventoryService; import com.xyst.dinas.sales.service.InventoryService;
import com.xyst.dinas.sales.service.NeedPlanService; import com.xyst.dinas.sales.service.NeedPlanService;
import com.xyst.dinas.sales.service.SalesPlanService; import com.xyst.dinas.sales.service.SalesPlanService;
...@@ -66,6 +67,11 @@ public class SalesConfiguration { ...@@ -66,6 +67,11 @@ public class SalesConfiguration {
return new SalesPlanProcessor(); return new SalesPlanProcessor();
} }
@Bean("com.xyst.dinas.sales.processor.StockAmountWarnCalculator")
public StockAmountWarnCalculator stockAmountWarnCalculator() {
return new StockAmountWarnCalculator();
}
/***********需用计划******************/ /***********需用计划******************/
......
package com.xyst.dinas.sales.processor;
import com.xyst.dinas.biz.warn.IWarningCalculator;
import com.xyst.dinas.biz.warn.WarnSetting;
/**
* 库存砂石余量 预警计算器
*
* @author Jackpot
* @date 2021年4月22日
*/
public class StockAmountWarnCalculator implements IWarningCalculator{
//砂石余量
private double stockAmount;
private String warnMessage;
@Override
public boolean isWarning(WarnSetting warnSetting) {
//TODO
return false;
}
@Override
public String warnMessage() {
return warnMessage;
}
@Override
public String getActualValue() {
return stockAmount+"";
}
}
...@@ -130,9 +130,6 @@ public class SalesPlanController { ...@@ -130,9 +130,6 @@ public class SalesPlanController {
// return ResponseObj.success("success", salesPlanService.querySalesPlanDetailsByMasterIdWarehouse(UUID.fromString(saleaPlanId), UUID.fromString(stationId))); // return ResponseObj.success("success", salesPlanService.querySalesPlanDetailsByMasterIdWarehouse(UUID.fromString(saleaPlanId), UUID.fromString(stationId)));
// } // }
public static void main(String[] args) {
System.out.println(UUID.randomUUID().toString());
}
@PostMapping("/salesplan/modify") @PostMapping("/salesplan/modify")
......
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