Commit 1293d095 authored by 高飞's avatar 高飞

五分钟

parent 7208731a
......@@ -48,7 +48,7 @@ public class ScheduleTaskConfig {
if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DATE)) {
log.info("每个月最后一天执行删除前2个月车流量数据操作start");
//删除2个月之前车流量详情的数据
traffFlowService.deleteBeforeTwoMonthVehicles(DateUtils.getlastMonth(-2));
traffFlowService.deleteBeforeTwoMonthVehicles();
}
}
......
......@@ -16,7 +16,12 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
import java.io.InputStream;
......@@ -27,6 +32,8 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@RestController
......@@ -49,6 +56,10 @@ public class TraffController {
@Value("${flv.resisvalue}")
private String resisvalue;
@Value("${json.resisurl}")
private String resisjsonvalue;
@Autowired
private StringRedisTemplate stringRedisTemplate;
......@@ -101,7 +112,7 @@ public class TraffController {
@PostMapping("/alarmevent")
public ResultObj rece(@RequestBody Alarm trffClientMessage) {
log.info("alarmevent--------------");
if (!TYPE.equals(trffClientMessage.getType())) {
return ResultObj.error(ResponseEnum.E_1002.getCode(), "type类型不正确");
}
......@@ -142,10 +153,7 @@ public class TraffController {
}
//ts 時間轉成正常時間
trffClientMessage.setDept(xzbh);
Map map = new HashMap();
map.put("type", "alarm");
map.put("data", trffClientMessage);
WebSocket.GroupSending(JsonUtil.beanToString(map));
try { // 清空redis中的部分旧数据
// importService.cleanCache();
......@@ -157,7 +165,8 @@ public class TraffController {
}
return ResultObj.ok(trffClientMessage);
}
public void sendevent( Alarm trffClientMessage){
public void sendevent(Alarm trffClientMessage) {
Traffalarmrecord traffAlarmRecord = new Traffalarmrecord();
traffAlarmRecord.setAreaid(Long.valueOf(trffClientMessage.getDept()));
traffAlarmRecord.setRecordtype(trffClientMessage.getIncident_type().toLowerCase());
......@@ -166,29 +175,35 @@ public void sendevent( Alarm trffClientMessage){
traffAlarmRecord.setFdid(videoIdArr[0]);
Integer channelid = Integer.valueOf(videoIdArr[1]) + 1;
traffAlarmRecord.setChannelid(channelid);
//判断该事件在规定事件内是否发生过,发生过不需要入库
int exists=traffAlarmRecordMapper.selectExitsTraffAlarm(traffAlarmRecord);
if(exists>0){
//存在直接返回
return;
}
else{
//判断是否在正检时间内
exists=traffAlarmRecordMapper.selectInChecktimeTraffAlarm(traffAlarmRecord);
if(exists>0)
int exists = traffAlarmRecordMapper.selectInChecktimeTraffAlarm(traffAlarmRecord);
log.info("selectInChecktimeTraffAlarm" + exists);
if (exists > 0) {
return;
}
//发送给前端
Map map = new HashMap();
map.put("type", "alarm");
map.put("data", trffClientMessage);
WebSocket.GroupSending(JsonUtil.beanToString(map));
traffAlarmRecord.setVideourlfrom(trffClientMessage.getVideo_record_url());
traffAlarmRecord.setCreatetime(new Date());
traffAlarmRecord.setObjlable(trffClientMessage.getObjLabel());
traffAlarmRecord.setPushstatus(9);//设置为未推送
//支持对某一个点位报施工事件后 倒推RECTIFYTIME 查看是否是施工事件 一段时间(时间可以配置)之前的停车事件和行人闯入事件矫正为施工事件
exists=traffAlarmRecordMapper.selectInworkRectifytimeTraffAlarm(traffAlarmRecord);
if(exists>0 && (traffAlarmRecord.getRecordtype().equalsIgnoreCase("no_motor_ban") ||traffAlarmRecord.getRecordtype().equalsIgnoreCase("illegal_parking") ))
{
log.info("selectInworkRectifytimeTraffAlarm" + exists);
if ((traffAlarmRecord.getRecordtype().equalsIgnoreCase("roadworks_out_of_line") || traffAlarmRecord.getRecordtype().equalsIgnoreCase("roadworks"))) {
//支持对某一个点位报施工事件后 倒推RECTIFYTIME 查看是否是施工事件 一段时间(时间可以配置)之前的停车事件和行人闯入事件矫正为施工事件
exists = traffAlarmRecordMapper.updateInworkRectifytimeTraffAlarm(traffAlarmRecord);
//这个事件如果为停车事件或者行人闯入事件时,设置纠偏状态为1
if (exists > 0) {
log.info("setRectificationtype=1");
}
}
......@@ -213,7 +228,7 @@ public void sendevent( Alarm trffClientMessage){
traffAlarmRecord.setCheckstatus(9);
}
int recordid = traffAlarmRecordMapper.selectmax();
traffAlarmRecord.setRecordid((long)(recordid+1));
traffAlarmRecord.setRecordid((long) (recordid + 1));
traffAlarmRecord.setProcessstatus("0");
traffAlarmRecordMapper.inserTraffAlarmRecord(traffAlarmRecord);
......@@ -234,13 +249,10 @@ public void sendevent( Alarm trffClientMessage){
traffAlarmRecordMapper.updateTraffAlarmRecordUrl(traffAlarmRecord);
}
//如果监控视频为空,延时加载重新获取
if(null==recordBak.getVideopath() || "".equalsIgnoreCase(recordBak.getVideopath())) {
if (null == recordBak.getVideopath() || "".equalsIgnoreCase(recordBak.getVideopath())) {
schedulepool.schedule(()->{
schedulepool.schedule(() -> {
for (String key : transferRecordMap.keySet()) {
if (key.equals("videopath")) {
final String url = transferRecordMap.get(key).toString();
......@@ -266,8 +278,7 @@ public void sendevent( Alarm trffClientMessage){
ResultObj obj = eventWriteService.updateAndAutoSendEvent(traffAlarmRecord);
log.info("send to guangda:HTTP_OK" + obj.toString());
}
}
else{
} else {
ResultObj obj = eventWriteService.updateAndAutoSendEvent(traffAlarmRecord);
log.info("send to guangda HttpURLConnection.HTTP_Fail--->response message:" + obj.toString());
}
......@@ -280,10 +291,10 @@ public void sendevent( Alarm trffClientMessage){
}
return 1;
},50, TimeUnit.SECONDS); //等待50秒钟执行
}, 50, TimeUnit.SECONDS); //等待50秒钟执行
}else {
} else {
//推送给第三方
ResultObj obj = eventWriteService.updateAndAutoSendEvent(traffAlarmRecord);
log.info("send to guangda novideopath --->response message" + obj.toString());
......@@ -293,7 +304,7 @@ public void sendevent( Alarm trffClientMessage){
} catch (Exception e) {
log.error("alarm fail :" + e.getMessage());
}
}
}
private RateLimiter getRateLimiter(String videoId) {
RateLimiter rateLimiter;
......@@ -310,7 +321,6 @@ public void sendevent( Alarm trffClientMessage){
}
//车流量推送
@PostMapping("/traffflow")
public ResultObj traffflow(@RequestBody Vehicles vehicles) {
......@@ -322,26 +332,26 @@ public void sendevent( Alarm trffClientMessage){
String sbbh = sbAndTd[0];
int tdbh = Integer.valueOf(sbAndTd[1]) + 1;
//重置videoid
vehicles.setVideo_id(sbbh+"_"+tdbh);
vehicles.setVideo_id(sbbh + "_" + tdbh);
//直接放入表中
// traffFlowService.saveTraffFlow(vehicles);
List<Vehiclesdetail> vels=vehicles.getObjs() ;
int result=0;
for(Vehiclesdetail detail : vels){
Vehicle v=new Vehicle();
List<Vehiclesdetail> vels = vehicles.getObjs();
int result = 0;
for (Vehiclesdetail detail : vels) {
Vehicle v = new Vehicle();
v.setId(UUID.randomUUID().toString());
v.setCreate_time (new Date(Long.valueOf(vehicles.getTs())));
v.setCreate_time(new Date(Long.valueOf(vehicles.getTs())));
v.setType(detail.getType());
v.setDirection(detail.getDirection());
v.setRuleTag(detail.getRuleTag());
v.setClassification_confidence(detail.getClassification_confidence());
v.setVideo_id(vehicles.getVideo_id());
result=traffFlowService.saveTraffFlowDetail(v);
result = traffFlowService.saveTraffFlowDetail(v);
}
//查询近五分钟的车流量,当天车流量websocket 直接推送过去
log.info("fivevehivle");
//根据连接的name ,群发根据videoid 查询的结果
webSocket.GroupSendingByVideoid(vehicles.getVideo_id());
}
......@@ -355,21 +365,23 @@ public void sendevent( Alarm trffClientMessage){
Map map = new HashMap();
map.put("type", "rule");
map.put("data", rules);
webSocket.AppointSending(rules.getVideo_id(),JsonUtil.beanToString(map));
webSocket.AppointSending(rules.getVideo_id(), JsonUtil.beanToString(map));
return ResultObj.ok();
}
//获取flv地址
@GetMapping("/getflv/{videoid}")
public String getflv(@PathVariable("videoid") String videoid) {
//根据id查询对应的rtsp
String rtsp= traffFlowService.selectSbtddspsrRtspByVideoid(videoid);
String rtsp = traffFlowService.selectSbtddspsrRtspByVideoid(videoid);
//huode resid 中值、
if(null!=rtsp) {
if( null==stringRedisTemplate.opsForValue().get(videoid))
{
if (null != rtsp) {
if (null == stringRedisTemplate.opsForValue().get(videoid)) {
log.info("flv-----");
flvCacheService.getvalue(videoid,rtsp);
flvCacheService.getvalue(videoid, rtsp);
}
log.info(stringRedisTemplate.opsForValue().get(videoid));
JSONObject jsonObject = JSONObject.parseObject(stringRedisTemplate.opsForValue().get(videoid));
......@@ -387,19 +399,4 @@ public void sendevent( Alarm trffClientMessage){
//获取自动规则
@GetMapping("/test")
public void autoRule() {
Vehicle v=new Vehicle();
v.setId(UUID.randomUUID().toString());
v.setCreate_time (DateUtils.parseDate("2020-12-10 23:59:00"));
v.setType("SEDAN1");
v.setDirection(Long.valueOf("0"));
v.setRuleTag("1");
v.setClassification_confidence(Long.valueOf("0"));
v.setVideo_id("20200603135925971_1");
traffFlowService.saveTraffFlowDetail(v);
}
}
......@@ -9,43 +9,44 @@ import java.util.Date;
public class Traffalarmrecord implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@Id
private Long recordid ;// 记录编号 主键序列
private Integer algotype ;//--算法类型 默认是 0:公司 1:第三方公
private Long areaid ;//--辖区编号
private String fdid ;//设备编号
private Integer channelid ;//--通道编号
private Integer channeletype;//通道类型 可忽略
private String channelname ;//通道名称
private Date recordtime ;//事件记录时间
private String recordtype ;//事件记录类型
private String location ;//目标定位信
private String img1urlfrom ;//图片源
private String img1path ;//图片存储地
private String img2urlfrom ;//图片源
private String img2path ;//图片存储地
private String img3urlfrom ;//图片源
private String img3path ;//图片存储地
private String img4urlfrom ;//图片源
private String img4path ;//图片存储地
private String img5urlfrom;//图片源
private String img5path ;//图片存储地
private String videourlfrom ;//视频源地
private String videopath ;//视频存储地
private Date retrytime ;//video重试的最近一次的读取;时间
private Integer retrycount ;//ideo重试读取总次数
private Integer recordlevel;//事件级别 --默认为0 其他类型暂时未知
private Integer checkstatus ;//0:待审核 1:审核通过 2:审核不通过 9:免审
private String creator;//创建人
private Date createtime ;//创建时间
private String updator ;//更新人
private Date updatetime ;//更新时间
private Long recordid ;// ��¼��� ��������
private Integer algotype ;//--�㷨���� Ĭ���� 0:��˾ 1:��������˾
private Long areaid ;//--Ͻ�����
private String fdid ;//�豸���
private Integer channelid ;//--ͨ�����
private Integer channeletype;//ͨ������ �ɺ���
private String channelname ;//ͨ������
private Date recordtime ;//�¼���¼ʱ��
private String recordtype ;//�¼���¼����
private String location ;//Ŀ�궨λ��Ϣ
private String img1urlfrom ;//ͼƬԴ��ַ
private String img1path ;//ͼƬ�洢��ַ
private String img2urlfrom ;//ͼƬԴ��ַ
private String img2path ;//ͼƬ�洢��ַ
private String img3urlfrom ;//ͼƬԴ��ַ
private String img3path ;//ͼƬ�洢��ַ
private String img4urlfrom ;//ͼƬԴ��ַ
private String img4path ;//ͼƬ�洢��ַ
private String img5urlfrom;//ͼƬԴ��ַ
private String img5path ;//ͼƬ�洢��ַ
private String videourlfrom ;//��ƵԴ��ַ
private String videopath ;//��Ƶ�洢��ַ
private Date retrytime ;//video���Ե����һ�εĶ�ȡ��ʱ��
private Integer retrycount ;//ideo���Զ�ȡ�ܴ���
private Integer recordlevel;//�¼����� --Ĭ��Ϊ0 ����������ʱδ֪
private Integer checkstatus ;//0:����� 1:���ͨ�� 2:��˲�ͨ�� 9:����
private String creator;//������
private Date createtime ;//����ʱ��
private String updator ;//������
private Date updatetime ;//����ʱ��
private String remark ;
private Integer pushstatus;//推送状态
private String pushdesc;//推送描述
private String pushcount;//推送次数
private Date pushdate;//推送时间
private String processstatus ;//处理状态;
private Integer pushstatus;//����״̬
private String pushdesc;//��������
private String pushcount;//���ʹ���
private Date pushdate;//����ʱ��
private String processstatus ;//����״̬;
private String objlable;
private String rectificationtype;
@Override
public String toString() {
......
......@@ -106,18 +106,20 @@ public class WebSocket {
* 根据videoid 群发
*/
public void GroupSendingByVideoid(String name) {
log.info("name" + name);
if (null == traffFlowService) return;
try {
List<Map> map = new ArrayList<>();
if (null != webSocketSet.get(name) && null != webSocketSet.get(name).session && null != webSocketSet.get(name).session.getBasicRemote()) {
// log.info("name" + name);
log.info("name" + name);
List<Map> dDayFlowmap = traffFlowService.selectFiveAndDayFlow(name);
if (null != dDayFlowmap)
map.addAll(dDayFlowmap);
List<Map> TypeDayFlow = traffFlowService.selectFiveAndTypeDayFlow(name);
if (null != dDayFlowmap)
map.addAll(TypeDayFlow);
if (!map.isEmpty() && null!=webSocketSet.get(name)&&null!=webSocketSet.get(name).session) {
log.info("JSONUtil.toJsonStr(map)" + JSONUtil.toJsonStr(map));
if (!map.isEmpty() && null!=webSocketSet.get(name) && null!=webSocketSet.get(name).session) {
synchronized (webSocketSet.get(name).session) {
webSocketSet.get(name).session.getBasicRemote().sendText(JSONUtil.toJsonStr(map));
}
......
......@@ -29,6 +29,6 @@ public interface TraffAlarmRecordMapper extends BaseMapper<Traffalarmrecord>, Co
Integer selectInChecktimeTraffAlarm(Traffalarmrecord traffalarmrecord);
Integer selectInworkRectifytimeTraffAlarm(Traffalarmrecord traffalarmrecord);
Integer updateInworkRectifytimeTraffAlarm(Traffalarmrecord traffalarmrecord);
}
\ No newline at end of file
......@@ -20,7 +20,7 @@ public interface TraffFlowMapper {
Integer statisVehiclesByDay();
Integer deleteBeforeTwoMonthVehiclesDetails(String startime);
Integer deleteBeforeTwoMonthVehiclesDetails();
Integer deleteVehiclesByDay();
......
......@@ -191,12 +191,15 @@ public class EventWriteService {
condition.setRecordid(traffalarmrecord.getRecordid());
String message = writeResultObj.getMessage();
boolean successFlag = writeResultObj.getStatus() == ResponseEnum.SUCCESS.getCode();
condition.setPushdesc(message);
/* 失败但是因为数据已存在 */
if (!successFlag && StringUtils.isNotBlank(message) && message.contains(CONTAINS_EXIST)) {
condition.setPushstatus(1);
traffAlarmRecordMapper.updatePushEvent(condition);
return;
}
/* 成功 */
condition.setPushdesc(message);
if (successFlag) {
condition.setPushstatus(0);
traffAlarmRecordMapper.updatePushEvent(condition);
......
......@@ -39,8 +39,8 @@ public class TraffFlowService {
}
public void deleteBeforeTwoMonthVehicles(String starttime) {
traffFlowMapper.deleteBeforeTwoMonthVehiclesDetails(starttime);
public void deleteBeforeTwoMonthVehicles() {
traffFlowMapper.deleteBeforeTwoMonthVehiclesDetails();
}
......
......@@ -25,6 +25,10 @@ public class DateUtils {
return formatCurrDateByType(YMDHMS);
}
public static String formatCurrDateYMD(){
return formatCurrDateByType(Y_M_D);
}
public static String formatCurrDayNoSign(){
return formatCurrDateByType(YMD);
}
......
......@@ -13,7 +13,7 @@ mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.default-fetch-size=100
mybatis.configuration.default-statement-timeout=3000
#mybatis.mapperLocations = classpath:xxx.xml
#logging.level.com.hzjt=debug
logging.level.com.hzjt=debug
## �������ݿ�-����Դ����
#spring.datasource.url=jdbc:dm://127.0.0.1:12345/auditlocal_cq
......@@ -31,7 +31,7 @@ mybatis.configuration.default-statement-timeout=3000
# Mysql���ݿ�-����Դ����
#spring.datasource.username=test
#spring.datasource.password=test
#spring.datasource.url=jdbc:oracle:thin:@192.168.168.212:1522:helowin
#spring.datasource.url=jdbc:oracle:thin:@192.168.168.212:1523:helowin
spring.datasource.username=hzjt
spring.datasource.password=hzjt
spring.datasource.url=jdbc:oracle:thin:@33.50.1.22:1521:orcl
......
......@@ -102,7 +102,7 @@
b.video_id
</insert>
<delete id="deleteBeforeTwoMonthVehiclesDetails">
delete from vehicle WHERE create_time <![CDATA[ <= ]]>to_date( #{starttime}||' 23:59:59','yyyy-mm-dd hh24:mi:ss')
delete from vehicle WHERE create_time <![CDATA[ <= ]]>sysdate-33
</delete>
<delete id="deleteVehiclesByDay">
......
......@@ -63,6 +63,7 @@
<if test="pushdesc != null">pushdesc,</if>
<if test="processstatus != null">processstatus,</if>
<if test="objlable != null">objlable,</if>
<if test="rectificationtype != null">rectificationtype ,</if>
</trim>
<trim prefix="select" suffix="from dual" suffixOverrides=",">
......@@ -101,6 +102,7 @@
<if test="pushdesc != null">#{pushdesc},</if>
<if test="processstatus != null">#{processstatus},</if>
<if test="objlable != null">#{objlable},</if>
<if test="rectificationtype != null">#{rectificationtype},</if>
</trim>
......@@ -129,55 +131,48 @@
<update id="updateTraffAlarmRectificationType" parameterType="com.hzjt.domain.Traffalarmrecord">
UPDATE TRAFFALARMRECORD
<set>
<if test="item.processstatus != null">
<if test="processstatus != null">
rectificationtype=1,
</if>
</set>
from TRAFFALARMRECORD a,
(select * from TRAFFALARMRECORD a,(select * from TRAFFALARMRECORD b where
recordid=#{item.recordid,jdbcType=VARCHAR} )b
recordid=#{recordid,jdbcType=VARCHAR} )b
where a.fdid =b.fdid and a.channelid=b.channelid
AND ( a.recordtime<![CDATA[ <= ]]> b.recordtime-10/(24*60))
AND ( a.recordtime<![CDATA[ <= ]]> b.recordtime-10/1440)
AND recordtype in ('roadworks_out_of_line','roadworks'))b
where recordtype in('illegal_parking','no_motor_ban') and a.fdid =b.fdid and a.channelid=b.channelid
</update>
<select id="selectExitsTraffAlarm" parameterType="com.hzjt.domain.Traffalarmrecord" resultType="java.lang.Integer">
select count(1) from TRAFFALARMRECORD a,t_code b where a.recordtype=#{item.recordtype,jdbcType=VARCHAR}
and a.recordtype=LOWER (b.key)and recordtime>=sysdate-(b.REPEATTIME)/(24*60)
and a.fdid=#{item.fdid,jdbcType=VARCHAR}
and a.channelid=#{item.channelid,jdbcType=VARCHAR}
<!--<select id="selectExitsTraffAlarm" parameterType="com.hzjt.domain.Traffalarmrecord" resultType="java.lang.Integer">-->
<!--select count(1) from TRAFFALARMRECORD a,t_code b where a.recordtype=#{recordtype,jdbcType=VARCHAR}-->
<!--and a.recordtype=LOWER (b.key)and recordtime>=sysdate-(b.REPEATTIME)/(24*60)-->
<!--and a.fdid=#{fdid,jdbcType=VARCHAR}-->
<!--and a.channelid=#{channelid,jdbcType=VARCHAR}-->
</select>
<!--</select>-->
<select id="selectInChecktimeTraffAlarm" parameterType="com.hzjt.domain.Traffalarmrecord" resultType="java.lang.Integer">
select count(1) from TRAFFALARMRECORD a,t_code b
where a.recordtype=#{item.recordtype,jdbcType=VARCHAR}
and a.fdid=#{item.fdid,jdbcType=VARCHAR}
and a.channelid=#{item.channelid,jdbcType=VARCHAR}
and a.recordtype=LOWER (b.key)
and recordtime<![CDATA[ <= ]]>(select LASTCHECKTIME from videochecktime c where
a.fdid=#{item.fdid,jdbcType=VARCHAR}
and a.channelid=#{item.channelid,jdbcType=VARCHAR}
and recordtype=#{item.recordtype,jdbcType=VARCHAR})+(b.PUSHCHECKTIME)/(24*60)
and recordtime>(select LASTCHECKTIME from videochecktime c where
a.fdid=#{item.fdid,jdbcType=VARCHAR}
and a.channelid=#{item.channelid,jdbcType=VARCHAR}
and recordtype=#{item.recordtype,jdbcType=VARCHAR})
</select>
select count(1) from videochecktime a,t_code b where
a.FDID=#{fdid,jdbcType=VARCHAR}
and a.CHANNELID=#{channelid,jdbcType=VARCHAR}
and a.RECORDTYPE=#{recordtype,jdbcType=VARCHAR}
and a.RECORDTYPE=lower(b.key)
and LASTCHECKTIME+(b.PUSHCHECKTIME)/1440 <![CDATA[ >= ]]>#{recordtime,jdbcType=TIMESTAMP}
and LASTCHECKTIME <![CDATA[ < ]]>#{recordtime,jdbcType=TIMESTAMP}
<select id="selectInworkRectifytimeTraffAlarm" parameterType="com.hzjt.domain.Traffalarmrecord" resultType="java.lang.Integer">
select count(1) from TRAFFALARMRECORD a,t_code b
where a.recordtype=#{item.recordtype,jdbcType=VARCHAR}
and a.recordtype=LOWER (b.key)
and a.fdid=#{item.fdid,jdbcType=VARCHAR}
and a.channelid=#{item.channelid,jdbcType=VARCHAR}
and recordtime>=#{item.recordtime,jdbcType=TIMESTAMP}-(b.RECTIFYTIME)/(24*60)
and recordtime<![CDATA[ < ]]>#{item.recordtime,jdbcType=TIMESTAMP}
and recordtype in ('roadworks_out_of_line','roadworks')
</select>
<update id="updateInworkRectifytimeTraffAlarm" parameterType="com.hzjt.domain.Traffalarmrecord">
update TRAFFALARMRECORD set rectificationtype=1,recordtype='roadworks'
where fdid=#{fdid,jdbcType=VARCHAR}
and channelid=#{channelid,jdbcType=VARCHAR}
and recordtime>=#{recordtime,jdbcType=TIMESTAMP}-(select b.RECTIFYTIME from t_code b where recordtype=LOWER (b.key) )/1440
and recordtime<![CDATA[ < ]]>#{recordtime,jdbcType=TIMESTAMP}
and recordtype in ('illegal_parking','no_motor_ban')
</update>
</mapper>
\ No newline at end of file
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