From 4ee00850f197d769481f73acb8ed79ab1c75b84d Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期五, 14 十一月 2025 11:41:24 +0800
Subject: [PATCH] 问题修复

---
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java |  488 +++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 375 insertions(+), 113 deletions(-)

diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java
index b1115ac..9140786 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java
@@ -9,6 +9,7 @@
 import com.doumee.core.haikang.model.HKConstants;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.HttpsUtil;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.dao.MemberMapper;
 import com.doumee.dao.business.dto.*;
@@ -26,6 +27,7 @@
 import com.doumee.service.business.third.model.PageWrap;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.hikvision.artemis.sdk.config.ArtemisConfig;
+import io.swagger.models.auth.In;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -59,6 +61,8 @@
     @Autowired
     private JkCabinetLogMapper jkCabinetLogMapper;
 
+    @Autowired
+    private WarningEventMapper warningEventMapper;
 
     @Autowired
     private MemberMapper memberMapper;
@@ -69,6 +73,9 @@
     private WarningRuleMapper warningRuleMapper;
 
     @Autowired
+    private WarningRuleDetailMapper warningRuleDetailMapper;
+
+    @Autowired
     private WarningPushMapper warningPushMapper;
     
     @Autowired
@@ -76,6 +83,9 @@
 
     @Autowired
     private DingTalk dingTalk;
+
+    @Autowired
+    private CarUseBookMapper carUseBookMapper;
 
     @Override
     public Integer create(JkCabinetGrid jkCabinetGrid) {
@@ -471,12 +481,40 @@
                                 .set(JkKeys::getStatus,dto.getKeyStatus())
                                 .eq(JkKeys::getId,jkKeys.getId())
                         );
+                        //褰掕繕閽ュ寵/鍊熷嚭閽ュ寵 閮借鍘绘煡璇㈡渶鍚庝竴娆″紑闂ㄨ褰� 鑾峰彇鍏蜂綋鐨勫紑闂ㄧ殑鏂瑰紡 鏄殢杞�/娲捐溅/淇濇磥 璧嬩簣褰撳墠鍏抽棬璁板綍鍐� 濡傛灉鏄淳杞﹀崟鏁版嵁 闇�瑕佽皟璧风畝閬撲簯鎺ㄩ��
+                        JkCabinetLog lastOutLog = jkCabinetLogMapper.selectOne(new QueryWrapper<JkCabinetLog>().lambda()
+                                .eq(JkCabinetLog::getKeyId,jkCabinetLog.getKeyId())
+                                .eq(JkCabinetLog::getType,Constants.ZERO)
+                                .last( "limit 1 "));
+                        if(Objects.nonNull(lastOutLog)){
+                            if(Objects.nonNull(lastOutLog.getCarUseBookId())) {
+                                CarUseBook carUseBook = carUseBookMapper.selectById(lastOutLog.getCarUseBookId());
+                                if (Objects.nonNull(carUseBook) && Constants.equalsInteger(carUseBook.getKeyStatus(), Constants.ZERO)) {
+                                    carUseBookMapper.update(new UpdateWrapper<CarUseBook>().lambda()
+                                            .set(CarUseBook::getKeyStatus, Constants.ONE)
+                                            .eq(CarUseBook::getId, carUseBook.getId())
+                                    );
+                                    //鎺ㄩ�佺畝閬撲簯 鏍囪涓氬姟鏁版嵁宸茶棰嗗彇閽ュ寵
+                                    if (StringUtils.isNotBlank(carUseBook.getJdyId())) {
+                                        JDYKeyUseByBookDTO jdyKeyUseByBookDTO = new JDYKeyUseByBookDTO();
+                                        jdyKeyUseByBookDTO.setCreate_date(System.currentTimeMillis());
+                                        jdyKeyUseByBookDTO.setStart_date(Constants.equalsInteger(dto.getKeyStatus(),Constants.TWO)?System.currentTimeMillis():null);
+                                        jdyKeyUseByBookDTO.setEnd_date(Constants.equalsInteger(dto.getKeyStatus(),Constants.ONE)?System.currentTimeMillis():null);
+                                        jdyKeyUseByBookDTO.setType(Constants.equalsInteger(dto.getKeyStatus(),Constants.TWO)?Constants.ZERO:Constants.ONE);
+                                        jdyKeyUseByBookDTO.setId(carUseBook.getJdyId());
+                                        this.pushJDYKeyInfo(jdyKeyUseByBookDTO);
+                                    }
+                                }
+                            }
+                        }
+
                     }
                 }
             }
             jkCabinetLog.setIsNotice(Constants.ZERO);
             jkCabinetLog.setType(Constants.ONE);
             jkCabinetLogMapper.insert(jkCabinetLog);
+
             //鏌ヨ閽ュ寵鐨勫紑闂ㄨ褰� 杩涜娣诲姞鍏抽棬璁板綍涓婚敭
             if(Constants.equalsInteger(dto.getKeyStatus(),Constants.ONE)){
                 jkCabinetLogMapper.update(null,new UpdateWrapper<JkCabinetLog>().lambda()
@@ -552,23 +590,80 @@
                     return jkCabinetGridList;
                 }
             }
-            jkCabinetGridList = jkCabinetGridMapper.selectJoinList(JkCabinetGrid.class,
-                    new MPJLambdaWrapper<JkCabinetGrid>().selectAll(JkCabinetGrid.class)
-                            .selectAs(JkKeys::getRfidLable,JkCabinetGrid::getKeyCode)
-                            .selectAs(JkKeys::getCarCode,JkCabinetGrid::getCarCode)
-                            .selectAs(JkKeys::getCarId,JkCabinetGrid::getCarId)
-                            .selectAs(JkKeys::getStatus,JkCabinetGrid::getKeyStatus)
-                            .leftJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
-                            .eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
-                            .eq(JkCabinetGrid::getWorkingStatus,Constants.ZERO)
-                            .eq(JkCabinetGrid::getStatus,Constants.ZERO)
-                            .eq(JkCabinetGrid::getCabinetId,dto.getCabinetId())
-                            .in(Constants.equalsInteger(dto.getType(),Constants.ONE),JkKeys::getStatus,Constants.TWO,Constants.THREE)
-                            .in(Constants.equalsInteger(dto.getType(),Constants.ZERO),JkKeys::getStatus,Constants.ONE)
-                            .isNotNull(JkCabinetGrid::getKeyId)
-                            .apply(" t1.car_id in ( select c.id from  cars c  where c.ISDELETED = 0 and  c.MEMBER_ID = "+dto.getMemberId()+" ) ")
-                            .orderByAsc(JkCabinetGrid::getCode)
-            );
+
+            //濡傛灉鏄繕閽ュ寵 鍒欑洿鎺ユ煡璇㈠凡鍊熷嚭鐨勯挜鍖欑殑鏁版嵁
+            if(Constants.equalsInteger(dto.getType(),Constants.ONE)){
+                jkCabinetGridList = jkCabinetGridMapper.selectJoinList(JkCabinetGrid.class,
+                        new MPJLambdaWrapper<JkCabinetGrid>().selectAll(JkCabinetGrid.class)
+                                .selectAs(JkKeys::getRfidLable,JkCabinetGrid::getKeyCode)
+                                .selectAs(JkKeys::getCarCode,JkCabinetGrid::getCarCode)
+                                .selectAs(JkKeys::getCarId,JkCabinetGrid::getCarId)
+                                .selectAs(JkKeys::getStatus,JkCabinetGrid::getKeyStatus)
+                                .innerJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
+                                .eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
+                                .eq(JkCabinetGrid::getWorkingStatus,Constants.ZERO)
+                                .eq(JkCabinetGrid::getStatus,Constants.ZERO)
+                                .eq(JkCabinetGrid::getCabinetId,dto.getCabinetId())
+                                .in(JkKeys::getStatus,Constants.TWO,Constants.THREE)
+                                .isNotNull(JkCabinetGrid::getKeyId)
+                                .apply("t1.car_id in ( select c.id from  cars c  where c.ISDELETED = 0 and  c.MEMBER_ID = "+dto.getMemberId()+" )")
+
+                                .orderByAsc(JkCabinetGrid::getCode)
+                );
+            }else{
+                //鍒ゆ柇褰撳墠鏃堕棿鏄惁澶勪簬淇濇磥鏃舵鍐�
+                String cleanConfig =  systemDictDataBiz.queryByCode(Constants.CABINET_CONFIG,Constants.CLEAN_TIME).getCode();
+                String earlyConfig =  systemDictDataBiz.queryByCode(Constants.CABINET_CONFIG,Constants.EARLY_CONFIG).getCode();
+                Boolean isCleanTime = Constants.betweenTimeConfig(cleanConfig);
+                List<Integer> girdIdList = new ArrayList<>();
+                //鏌ヨ鏍规嵁浠诲姟鍙互棰嗗彇鐨勬暟鎹�
+                jkCabinetGridList = jkCabinetGridMapper.selectJoinList(JkCabinetGrid.class,
+                        new MPJLambdaWrapper<JkCabinetGrid>().selectAll(JkCabinetGrid.class)
+                                .selectAs(JkKeys::getRfidLable,JkCabinetGrid::getKeyCode)
+                                .selectAs(JkKeys::getCarCode,JkCabinetGrid::getCarCode)
+                                .selectAs(JkKeys::getCarId,JkCabinetGrid::getCarId)
+                                .selectAs(JkKeys::getStatus,JkCabinetGrid::getKeyStatus)
+                                .selectAs(CarUseBook::getId,JkCabinetGrid::getCarUseBookId)
+                                .select("1",JkCabinetGrid::getGetKeyWay)
+                                .innerJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
+                                .innerJoin(CarUseBook.class,CarUseBook::getCarCode,JkKeys::getCarCode)
+                                .innerJoin(Cars.class,Cars::getCode,CarUseBook::getCarCode)
+                                .eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
+                                .eq(CarUseBook::getIsdeleted,Constants.ZERO)
+                                .eq(Cars::getIsdeleted,Constants.ZERO)
+                                .eq(JkCabinetGrid::getWorkingStatus,Constants.ZERO)
+                                .eq(JkCabinetGrid::getStatus,Constants.ZERO)
+                                .eq(JkCabinetGrid::getCabinetId,dto.getCabinetId())
+                                .in(JkKeys::getStatus,Constants.ONE)
+                                .eq(JkKeys::getRoleType,Constants.ONE)
+                                .isNotNull(JkCabinetGrid::getKeyId)
+                                .apply("and NOW() > DATE_SUB(t2.START_TIME, INTERVAL "+earlyConfig+" MINUTE) and now() < t2.end_time and t3.MEMBER_ID = "+dto.getMemberId()+" )")
+
+                );
+                if(CollectionUtils.isNotEmpty(jkCabinetGridList)){
+                    girdIdList = jkCabinetGridList.stream().map(i->i.getId()).collect(Collectors.toList());
+                }
+                jkCabinetGridList.addAll(jkCabinetGridMapper.selectJoinList(JkCabinetGrid.class,
+                            new MPJLambdaWrapper<JkCabinetGrid>().selectAll(JkCabinetGrid.class)
+                                    .selectAs(JkKeys::getRfidLable,JkCabinetGrid::getKeyCode)
+                                    .selectAs(JkKeys::getCarCode,JkCabinetGrid::getCarCode)
+                                    .selectAs(JkKeys::getCarId,JkCabinetGrid::getCarId)
+                                    .selectAs(JkKeys::getStatus,JkCabinetGrid::getKeyStatus)
+                                    .select(!isCleanTime?"0":"2",JkCabinetGrid::getGetKeyWay)
+                                    .innerJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
+                                    .eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
+                                    .eq(JkCabinetGrid::getWorkingStatus,Constants.ZERO)
+                                    .eq(JkCabinetGrid::getStatus,Constants.ZERO)
+                                    .eq(JkCabinetGrid::getCabinetId,dto.getCabinetId())
+                                    .eq(!isCleanTime,JkKeys::getRoleType,Constants.ZERO)
+                                    .in(JkKeys::getStatus,Constants.ONE)
+                                    .isNotNull(JkCabinetGrid::getKeyId)
+                                    .notIn(CollectionUtils.isNotEmpty(girdIdList),JkCabinetGrid::getId,jkCabinetGridList)
+                                    .apply("t1.car_id in ( select c.id from  cars c  where c.ISDELETED = 0 and  c.MEMBER_ID = "+dto.getMemberId()+" ) ")
+                    )
+                );
+            }
+
             for (JkCabinetGrid jkCabinetGrid:jkCabinetGridList) {
                 jkCabinetGrid.setBindStatus(Objects.isNull(jkCabinetGrid.getKeyId())?Constants.ZERO:Constants.ONE);
                 jkCabinetGrid.setKeyStatus(Objects.isNull(jkCabinetGrid.getKeyStatus())?Constants.ZERO:jkCabinetGrid.getKeyStatus());
@@ -601,7 +696,9 @@
         jkCabinetLog.setAuthType(openGridDriverDTO.getAuthType());
         jkCabinetLog.setMemberId(openGridDriverDTO.getMemberId());
         jkCabinetLog.setType(Constants.ZERO);
-        jkCabinetLog.setStatus(Constants.ZERO);
+        jkCabinetLog.setOpenWay(openGridDriverDTO.getOpenWay());
+        jkCabinetLog.setCarUseBookId(openGridDriverDTO.getCarUseBookId());
+
         jkCabinetLog.setInfo(Objects.isNull(openGridDriverDTO.getOpenType())||Constants.equalsInteger(openGridDriverDTO.getOpenType(),Constants.ZERO)?"绯荤粺寮�鍚�":"鎵嬪姩寮�鍚�");
         if(Objects.nonNull(jkCabinetGrid.getKeyId())){
             jkCabinetLog.setKeyId(jkCabinetGrid.getKeyId());
@@ -616,8 +713,25 @@
         }
         jkCabinetLog.setIsNotice(Constants.ZERO);
         jkCabinetLogMapper.insert(jkCabinetLog);
+
     }
 
+
+    public void pushJDYKeyInfo(JDYKeyUseByBookDTO dto){
+        String url = systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.PUSH_URL_KEYS).getCode();
+//        JSONObject object = new JSONObject();
+//        object.put("create_date","20251104160000");
+//        object.put("start_date",System.currentTimeMillis() );
+//        object.put("end_date", System.currentTimeMillis() + 24*3600*1000);
+//        object.put("id","10000020251105");//
+//        object.put("type",1);//0=棰嗙敤锛�1=褰掕繕
+        log.error("銆愮畝閬撲簯銆戞帹閫佹淳杞﹀崟鏁版嵁棰嗙敤涓庡綊杩樹俊鎭�-璇锋眰鍏ュ弬锛�"+JSONObject.toJSONString(dto));
+        String result = HttpsUtil.postJson(url,JSONObject.toJSONString(dto));
+        log.error("銆愮畝閬撲簯銆戞帹閫佹淳杞﹀崟鏁版嵁棰嗙敤涓庡綊杩樹俊鎭�-璇锋眰缁撴灉锛�"+JSONObject.toJSONString(result));
+
+
+
+    }
 
 
     @Override
@@ -632,80 +746,195 @@
                             .eq(JkCabinetGrid::getId,dto.getGridId())
                             .last(" limit 1 ")
             );
-
             if(Objects.nonNull(jkCabinetGrid)){
                 log.error("鏌滄牸寮�闂ㄨ秴鏃舵湭鍏抽棴鍛婅淇℃伅锛歿}"+JSONObject.toJSONString(jkCabinetGrid));
+                //瑙勫垯绫诲瀷
                 Constants.WarningConfig warningConfig = Constants.WarningConfig.GRID_TIME_OUT_INFO;
                 Warning warning = warningMapper.selectOne(new QueryWrapper<Warning>().lambda()
-                        .eq(Warning::getType,Constants.THREE).eq(Warning::getCode,warningConfig.getKey()).eq(Warning::getIsdeleted,Constants.ZERO).last("limt 1"));
+                        .eq(Warning::getIsdeleted,Constants.ZERO)
+                        .eq(Warning::getStatus,Constants.ONE)
+                        .eq(Warning::getCode,warningConfig.getKey())
+                        .last("limit 1")
+                );
                 if(Objects.isNull(warning)){
                     return;
                 }
-                List<Member> memberList = this.getWarningList(warning);
-                if(CollectionUtils.isEmpty(memberList)){
+                List<Integer> ruleIdList =  this.processWarnFront(warningConfig);
+                if(CollectionUtils.isEmpty(ruleIdList)){
                     return;
                 }
-                JkCabinet jkCabinet = jkCabinetMapper.selectById(dto.getCabinetId());
-                // 瀛樺偍寮傚父鏃ュ織
-                WarningPush warningPush = new WarningPush();
-                warningPush.setCreateDate(new Date());
-                warningPush.setIsdeleted(Constants.ZERO);
-                warningPush.setWarningId(warning.getId());
-                warningPush.setTitle(warningConfig.getInfo());
-                String content = "銆愰挜鍖欐煖-"+jkCabinetGrid.getCabinetName()+"銆戜笅銆愭煖鏍�-"+jkCabinetGrid.getCode()+"銆戣秴鏃舵湭鍏抽棴";
-                warningPush.setContent(content);
-                warningPush.setStatus(Constants.ZERO);
-                warningPush.setPushType(Constants.ZERO);
-                warningPush.setRegion(Objects.nonNull(jkCabinet)&&StringUtils.isNotBlank(jkCabinet.getLocation())?jkCabinet.getLocation():"鏈煡浣嶇疆");
-                warningPush.setMemberIds(
-                        StringUtils.join(memberList.stream().map(i->i.getId()).collect(Collectors.toList()),",")
-                );
-                warningPush.setMemberIds(
-                        StringUtils.join(memberList.stream().map(i->i.getId()).collect(Collectors.toList()),",")
-                );
-                warningPush.setMemberNames(StringUtils.join(memberList.stream().map(i->i.getName()).collect(Collectors.toList()),",")
-                );
-                //todo 鏆傛椂鍏抽棴 閽夐拤閫氱煡
+                for (Integer ruleId:ruleIdList) {
+                    WarningRule warningRule = warningRuleMapper.selectById(ruleId);
+                    if(Objects.isNull(warningRule)){
+                        continue;
+                    }
+                    List<Member> memberList = this.getWarningRuleMemberList(warningRule);
+                    if(CollectionUtils.isEmpty(memberList)){
+                        return;
+                    }
 
-//            Boolean noticeFlag = dingTalk.workInfoOANotice(Long.valueOf(systemDictDataBiz.queryByCode(Constants.DD_TALK,Constants.AGENT_ID).getCode()),
-//                    StringUtils.join(memberList.stream().filter(i->StringUtils.isNotBlank(i.getDdId())).map(i->i.getDdId()).collect(Collectors.toList()),","),
-//                dingTalk.getAlarmNoticeMsg(warningPush.getRegion(),DateUtil.getCurrDateTime(),content));
-//            warningPush.setStatus(noticeFlag?Constants.ONE:Constants.TWO);
-                warningPushMapper.insert(warningPush);
+                    String content = "銆愰挜鍖欐煖-"+jkCabinetGrid.getCabinetName()+"銆戜笅銆愭煖鏍�-"+jkCabinetGrid.getCode()+"銆戣秴鏃舵湭鍏抽棴";
+
+                    JkCabinet jkCabinet = jkCabinetMapper.selectById(dto.getCabinetId());
+                    //瀛樺偍鎶ヨ寮傚父璁板綍
+                    WarningEvent warningEvent = new WarningEvent();
+                    warningEvent.setCreateDate(new Date());
+                    warningEvent.setWarningId(warning.getId());
+                    warningEvent.setTitle(warningConfig.getInfo());
+                    warningEvent.setContent(content );
+                    warningEvent.setStatus(Constants.ZERO);
+                    warningEvent.setRegion(Objects.nonNull(jkCabinet)&&StringUtils.isNotBlank(jkCabinet.getLocation())?jkCabinet.getLocation():"鏈煡浣嶇疆");
+                    warningEventMapper.insert(warningEvent);
+
+                    try {
+                        // 瀛樺偍寮傚父閫氱煡鏃ュ織
+                        WarningPush warningPush = new WarningPush();
+                        warningPush.setCreateDate(new Date());
+                        warningPush.setIsdeleted(Constants.ZERO);
+                        warningPush.setWarningId(warning.getId());
+                        warningPush.setTitle(warningConfig.getInfo());
+                        warningPush.setContent(content);
+                        warningPush.setStatus(Constants.ZERO);
+                        warningPush.setPushType(Constants.ZERO);
+                        warningPush.setRegion(Objects.nonNull(jkCabinet)&&StringUtils.isNotBlank(jkCabinet.getLocation())?jkCabinet.getLocation():"鏈煡浣嶇疆");
+                        warningPush.setMemberIds(
+                                StringUtils.join(memberList.stream().map(i->i.getId()).collect(Collectors.toList()),",")
+                        );
+                        warningPush.setMemberIds(
+                                StringUtils.join(memberList.stream().map(i->i.getId()).collect(Collectors.toList()),",")
+                        );
+                        warningPush.setMemberNames(StringUtils.join(memberList.stream().map(i->i.getName()).collect(Collectors.toList()),",")
+                        );
+                        //todo 鏆傛椂鍏抽棴 閽夐拤閫氱煡
+
+                        //            Boolean noticeFlag = dingTalk.workInfoOANotice(Long.valueOf(systemDictDataBiz.queryByCode(Constants.DD_TALK,Constants.AGENT_ID).getCode()),
+                        //                    StringUtils.join(memberList.stream().filter(i->StringUtils.isNotBlank(i.getDdId())).map(i->i.getDdId()).collect(Collectors.toList()),","),
+                        //                dingTalk.getAlarmNoticeMsg(warningPush.getRegion(),DateUtil.getCurrDateTime(),content));
+                        //            warningPush.setStatus(noticeFlag?Constants.ONE:Constants.TWO);
+                        warningPushMapper.insert(warningPush);
+                        warningEvent.setStatus(Constants.ONE);
+                        warningEventMapper.updateById(warningEvent);
+                    }catch (Exception e){
+                        warningEvent.setStatus(Constants.TWO);
+                        warningEventMapper.updateById(warningEvent);
+                    }
+
+                }
 
             }
         }
     }
 
 
-    public List<Member> getWarningList(Warning warning){
-        if(Constants.equalsInteger(warning.getStatus(),Constants.ZERO)){
-            return null;
-        }
-        //鏌ヨ閫氱煡浜哄憳
-        List<WarningRule> warningRuleList = warningRuleMapper.selectList(new QueryWrapper<WarningRule>().lambda()
-                .eq(WarningRule::getIsdeleted,Constants.ZERO)
-                .apply(" id in ( select w.RULE_ID from warning_rule_detail w where w.WARNING_ID = '"+warning.getId()+"' and w.ISDELETED = 0  ) ")
+    public List<Integer> processWarnFront(Constants.WarningConfig warningConfig){
+        List<WarningRuleDetail> warningRuleDetailList = warningRuleDetailMapper.selectJoinList(WarningRuleDetail.class,new MPJLambdaWrapper<WarningRuleDetail>()
+                .selectAll(WarningRuleDetail.class)
+                .leftJoin(Warning.class,Warning::getId,WarningRuleDetail::getWarningId)
+                .eq(WarningRuleDetail::getIsdeleted,Constants.ZERO)
+                .eq(Warning::getIsdeleted,Constants.ZERO)
+                .eq(Warning::getStatus,Constants.ONE)
+                .eq(Warning::getCode,warningConfig.getKey())
         );
-        List<Member> memberList = new ArrayList<>();
-        if(org.apache.commons.collections.CollectionUtils.isNotEmpty(warningRuleList)){
-            List<String> memberIdStr =  warningRuleList.stream().map(i->i.getMemberIds()).collect(Collectors.toList());
-            if(org.apache.commons.collections.CollectionUtils.isNotEmpty(memberIdStr)){
-                List<String> memberIdList = new ArrayList<>();
-                for (String s:memberIdStr) {
-                    memberIdList.addAll(
-                            Arrays.asList(s.split(","))
-                    );
-                }
-                memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO)
-                        .notIn(Member::getErpId)
-                        .in(Member::getId,memberIdList)
+        if(CollectionUtils.isEmpty(warningRuleDetailList)){ 
+            return new ArrayList<>();
+        }
+        //鎵�鏈夋姤璀﹁鍒欓厤缃俊鎭�
+        List<Integer> ruleIdList = warningRuleDetailList.stream().map(i->i.getRuleId()).collect(Collectors.toList());;
+        Set<Integer> ruleIdSet = new HashSet<>(ruleIdList);
+        if(CollectionUtils.isNotEmpty(ruleIdSet)){
+            List<Integer> resultList = new ArrayList<>();
+            for (Integer ruleId:ruleIdSet) {
+                WarningRule warningRule = warningRuleMapper.selectById(ruleId);
+                //鏌ヨ鍏朵粬瑙勫垯淇℃伅
+                List<WarningRuleDetail> warningRuleDetails = warningRuleDetailMapper.selectJoinList(WarningRuleDetail.class,new MPJLambdaWrapper<WarningRuleDetail>()
+                        .selectAll(WarningRuleDetail.class)
+                        .selectAs(Warning::getCode,WarningRuleDetail::getCode)
+                        .leftJoin(Warning.class,Warning::getId,WarningRuleDetail::getWarningId)
+                        .eq(WarningRuleDetail::getIsdeleted,Constants.ZERO)
+                        .eq(Warning::getIsdeleted,Constants.ZERO)
+                        .eq(Warning::getStatus,Constants.ONE)
+                        .eq(WarningRuleDetail::getRuleId,ruleId)
+                        .in(Warning::getCode,Constants.WarningConfig.ALARM_TEST.getKey(),
+                                Constants.WarningConfig.GRID_TIME_OUT_INFO.getKey(),
+                                Constants.WarningConfig.KEY_TIME_OUT_BACK.getKey()
+                        )
                 );
+                //鏃犱换浣曡鍒� 鐩存帴璺宠繃
+                if(CollectionUtils.isEmpty(warningRuleDetails)){
+                    return resultList;
+                }else if(!Constants.equalsInteger(warningRuleDetails.stream().filter(i->!i.getCode().equals(warningConfig.getKey())).collect(Collectors.toList()).size(),Constants.ZERO)){
+                    List<WarningRuleDetail> wList = warningRuleDetails.stream().filter(i->!i.getCode().equals(warningConfig.getKey())).collect(Collectors.toList());
+                    //鑾峰彇鎵�鏈夊叾浠栨墍鏈変簨浠朵富閿俊鎭�
+                    List<Integer> warningIdList = wList.stream().map(i->i.getWarningId()).collect(Collectors.toList());
+                    Set<Integer> setWarningIdList = new HashSet<>(warningIdList);
+                    //鑾峰彇鏃堕棿鍐呮墍鏈変簨浠朵俊鎭�
+                    List<WarningEvent> warningEventList = warningEventMapper.selectList(new QueryWrapper<WarningEvent>().lambda()
+                            .eq(WarningEvent::getIsdeleted,Constants.ZERO)
+                            .in(WarningEvent::getWarningId,setWarningIdList)
+                            .apply(" DATE_ADD(CREATE_DATE , INTERVAL "+warningRule.getIntervalSec()+" SECOND) > now() ")
+                    );
+                    if(this.processWarnFlag(wList,warningEventList)){
+                        resultList.add(ruleId);
+                    };
+                }else{
+                    List<WarningRuleDetail> wList = warningRuleDetails.stream().filter(i->i.getCode().equals(warningConfig.getKey())).collect(Collectors.toList());
+                    //鑾峰彇鏈浜嬩欢涓婚敭淇℃伅
+                    List<Integer> warningIdList = wList.stream().map(i->i.getWarningId()).collect(Collectors.toList());
+                    Set<Integer> setWarningIdList = new HashSet<>(warningIdList);
+                    //鑾峰彇鏃堕棿鍐呮墍鏈変簨浠朵俊鎭�
+                    List<WarningEvent> warningEventList = warningEventMapper.selectList(new QueryWrapper<WarningEvent>().lambda()
+                            .eq(WarningEvent::getIsdeleted,Constants.ZERO)
+                            .in(WarningEvent::getWarningId,setWarningIdList)
+                            .apply(" DATE_ADD(CREATE_DATE , INTERVAL "+warningRule.getIntervalSec()+" SECOND) > now() ")
+                    );
+                    if(this.processWarnFlag(wList,warningEventList)){
+                        resultList.add(ruleId);
+                    }
+                } 
+            }
+            return resultList;
+        }
+        return new ArrayList<>();
+
+
+    }
+
+
+
+    /**
+     * 鍒ゆ柇澶勭悊鏄惁鍙互鍙戦�侀�氱煡 褰撳墠鍛婅閰嶇疆鐨勬暟鎹垪琛ㄦ槸鍚︽弧瓒� 
+     * @param warningRuleDetails
+     * @return
+     */
+    public boolean processWarnFlag(List<WarningRuleDetail> warningRuleDetails,List<WarningEvent> warningEventList){
+        if(CollectionUtils.isEmpty(warningEventList)){
+            return false;
+        }
+        for (WarningRuleDetail warningRuleDetail:warningRuleDetails) {
+            if(Objects.nonNull(warningRuleDetail.getRegionId())){
+                if(warningEventList.stream().filter(i->Constants.equalsInteger(i.getWarningId(),warningRuleDetail.getWarningId())
+                        && StringUtils.isNotBlank(i.getRegionId()) && i.getRegionId().equals(warningRuleDetail.getRegionId())
+                ).collect(Collectors.toList()).size()<=Constants.ZERO){
+                    return false;
+                }
+            }else{
+                if(warningEventList.stream().filter(i->Constants.equalsInteger(i.getWarningId(),warningRuleDetail.getWarningId())
+                ).collect(Collectors.toList()).size()<=Constants.ZERO){
+                    return false;
+                }
             }
         }
+        return true;
+    }
+
+
+    public List<Member> getWarningRuleMemberList(WarningRule warningRule){
+        List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO)
+                .isNotNull(Member::getErpId)
+                .in(Member::getId,Arrays.asList(warningRule.getMemberIds().split(",")))
+        );
         return memberList;
     }
-
 
 
     @Override
@@ -722,55 +951,88 @@
             JkCabinet jkCabinet = jkCabinetMapper.selectById(dto.getCabinetId());
             Constants.WarningConfig warningConfig = Constants.WarningConfig.ALARM_TEST;
             Warning warning = warningMapper.selectOne(new QueryWrapper<Warning>().lambda()
-                    .eq(Warning::getType,Constants.THREE).eq(Warning::getCode,warningConfig.getKey()).eq(Warning::getIsdeleted,Constants.ZERO).last("limt 1"));
+                    .eq(Warning::getIsdeleted,Constants.ZERO)
+                    .eq(Warning::getStatus,Constants.ONE)
+                    .eq(Warning::getCode,warningConfig.getKey())
+                    .last("limit 1")
+            );
             if(Objects.isNull(warning)){
                 return;
             }
-            List<Member> memberList = this.getWarningList(warning);
-            if(CollectionUtils.isEmpty(memberList)){
+            List<Integer> ruleIdList =  this.processWarnFront(warningConfig);
+            if(CollectionUtils.isEmpty(ruleIdList)){
                 return;
             }
-            // 瀛樺偍寮傚父鏃ュ織
-            WarningPush warningPush = new WarningPush();
-            warningPush.setCreateDate(new Date());
-            warningPush.setIsdeleted(Constants.ZERO);
-            warningPush.setWarningId(warning.getId());
-            warningPush.setTitle(warningConfig.getInfo());
-            String content = "";
-            if(Objects.nonNull(systemUser.getRealname())){
-                content = content + systemUser.getRealname();
+            if(CollectionUtils.isEmpty(ruleIdList)){
+                return;
             }
-            if(Objects.nonNull(jkCabinet)){
-                content = content + "浜�"+jkCabinet.getName()+"閽ュ寵鏌�";
-            }
-            content = content + "閰掔簿妫�娴嬪紓甯�";
-            warningPush.setContent(content + "閰掔簿妫�娴嬪紓甯革紝閰掔簿搴︽暟銆�"+dto.getAlcoholNum()+"掳銆�");
-            if(Objects.nonNull(dto.getAlcoholNum())){
-                content = content + "锛岄厭绮惧害鏁般��"+dto.getAlcoholNum()+"掳銆�";
-            }
-            warningPush.setContent(content);
-            warningPush.setStatus(Constants.ZERO);
-            warningPush.setPushType(Constants.ZERO);
-            warningPush.setRegion(Objects.nonNull(jkCabinet)&&StringUtils.isNotBlank(jkCabinet.getLocation())?jkCabinet.getLocation():"鏈煡浣嶇疆");
-            warningPush.setMemberId(dto.getMemberId());
-            warningPush.setMemberIds(
-                    StringUtils.join(memberList.stream().map(i->i.getId()).collect(Collectors.toList()),",")
-            );
-            warningPush.setMemberIds(
-                    StringUtils.join(memberList.stream().map(i->i.getId()).collect(Collectors.toList()),",")
-            );
-            warningPush.setMemberNames(StringUtils.join(memberList.stream().map(i->i.getName()).collect(Collectors.toList()),",")
-            );
-            //todo 鏆傛椂鍏抽棴 閽夐拤閫氱煡
-            
-//            Boolean noticeFlag = dingTalk.workInfoOANotice(Long.valueOf(systemDictDataBiz.queryByCode(Constants.DD_TALK,Constants.AGENT_ID).getCode()),
-//                    StringUtils.join(memberList.stream().filter(i->StringUtils.isNotBlank(i.getDdId())).map(i->i.getDdId()).collect(Collectors.toList()),","),
-//                dingTalk.getAlarmNoticeMsg(warningPush.getRegion(),DateUtil.getCurrDateTime(),warningConfig.getInfo()));
-//            warningPush.setStatus(noticeFlag?Constants.ONE:Constants.TWO);
-            warningPushMapper.insert(warningPush);
-            //瀛樺偍寮傚父鏃ュ織
-            if(Objects.nonNull(systemUser)){
-                log.error("鍙告満閰掔簿妫�娴嬶紝瓒呭嚭閰掔簿鍊煎憡璀︿俊鎭細{}"+JSONObject.toJSONString(systemUser));
+            for (Integer ruleId:ruleIdList) {
+                WarningRule warningRule = warningRuleMapper.selectById(ruleId);
+                if (Objects.isNull(warningRule)) {
+                    continue;
+                }
+                List<Member> memberList = this.getWarningRuleMemberList(warningRule);
+
+                String content = "";
+                if(Objects.nonNull(systemUser.getRealname())){
+                    content = content + systemUser.getRealname();
+                }
+                if(Objects.nonNull(jkCabinet)){
+                    content = content + "浜�"+jkCabinet.getName()+"閽ュ寵鏌�";
+                }
+                content = content + "閰掔簿妫�娴嬪紓甯�";
+                if(Objects.nonNull(dto.getAlcoholNum())){
+                    content = content + "锛岄厭绮惧害鏁般��"+dto.getAlcoholNum()+"掳銆�";
+                }
+
+                //瀛樺偍鎶ヨ寮傚父璁板綍
+                WarningEvent warningEvent = new WarningEvent();
+                warningEvent.setCreateDate(new Date());
+                warningEvent.setWarningId(warning.getId());
+                warningEvent.setTitle(warningConfig.getInfo());
+                warningEvent.setContent(content );
+                warningEvent.setStatus(Constants.ZERO);
+                warningEvent.setRegion(Objects.nonNull(jkCabinet)&&StringUtils.isNotBlank(jkCabinet.getLocation())?jkCabinet.getLocation():"鏈煡浣嶇疆");
+                warningEventMapper.insert(warningEvent);
+
+                try{
+                    WarningPush warningPush = new WarningPush();
+                    warningPush.setCreateDate(new Date());
+                    warningPush.setIsdeleted(Constants.ZERO);
+                    warningPush.setWarningId(warning.getId());
+                    warningPush.setTitle(warningConfig.getInfo()); 
+                    warningPush.setContent(content);
+                    warningPush.setStatus(Constants.ZERO);
+                    warningPush.setPushType(Constants.ZERO);
+                    warningPush.setRegion(Objects.nonNull(jkCabinet)&&StringUtils.isNotBlank(jkCabinet.getLocation())?jkCabinet.getLocation():"鏈煡浣嶇疆");
+                    warningPush.setMemberId(dto.getMemberId());
+                    warningPush.setMemberIds(
+                            StringUtils.join(memberList.stream().map(i->i.getId()).collect(Collectors.toList()),",")
+                    );
+                    warningPush.setMemberIds(
+                            StringUtils.join(memberList.stream().map(i->i.getId()).collect(Collectors.toList()),",")
+                    );
+                    warningPush.setMemberNames(StringUtils.join(memberList.stream().map(i->i.getName()).collect(Collectors.toList()),",")
+                    );
+                    //todo 鏆傛椂鍏抽棴 閽夐拤閫氱煡
+        //            Boolean noticeFlag = dingTalk.workInfoOANotice(Long.valueOf(systemDictDataBiz.queryByCode(Constants.DD_TALK,Constants.AGENT_ID).getCode()),
+        //                    StringUtils.join(memberList.stream().filter(i->StringUtils.isNotBlank(i.getDdId())).map(i->i.getDdId()).collect(Collectors.toList()),","),
+        //                dingTalk.getAlarmNoticeMsg(warningPush.getRegion(),DateUtil.getCurrDateTime(),warningConfig.getInfo()));
+        //            warningPush.setStatus(noticeFlag?Constants.ONE:Constants.TWO);
+                    warningPushMapper.insert(warningPush);
+                    warningEvent.setStatus(Constants.ONE);
+                    warningEventMapper.updateById(warningEvent);
+                }catch (Exception e){
+                    warningEvent.setStatus(Constants.TWO);
+                    warningEventMapper.updateById(warningEvent);
+                }
+
+
+                //瀛樺偍寮傚父鏃ュ織
+                if(Objects.nonNull(systemUser)){
+                    log.error("鍙告満閰掔簿妫�娴嬶紝瓒呭嚭閰掔簿鍊煎憡璀︿俊鎭細{}"+JSONObject.toJSONString(systemUser));
+                }
+
             }
         }
     }

--
Gitblit v1.9.3