Kaynağa Gözat

阀控修改

oppadmin 4 yıl önce
ebeveyn
işleme
0f1f1debc5

+ 7 - 7
gydatasync/log.log

@@ -1,7 +1,7 @@
-2020-07-28 09:18:15.703  INFO 59676 --- [main] c.h.g.GydatasyncApplicationTests         : Starting GydatasyncApplicationTests on pengdi with PID 59676 (started by pengdi in C:\Users\86159\git_repos\water-iot\gydatasync)
-2020-07-28 09:18:15.711  INFO 59676 --- [main] c.h.g.GydatasyncApplicationTests         : The following profiles are active: prd
-2020-07-28 09:18:18.513  INFO 59676 --- [main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 'taskScheduler'
-2020-07-28 09:18:18.647  INFO 59676 --- [main] c.h.g.GydatasyncApplicationTests         : Started GydatasyncApplicationTests in 3.552 seconds (JVM running for 5.549)
-2020-07-28 09:18:19.283  INFO 59676 --- [SpringContextShutdownHook] o.s.s.c.ThreadPoolTaskScheduler          : Shutting down ExecutorService 'taskScheduler'
-2020-07-28 09:18:19.286  INFO 59676 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-0} closing ...
-2020-07-28 09:18:19.288  INFO 59676 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-0} closing ...
+2021-01-18 10:54:37.364  INFO 8388 --- [main] c.h.g.GydatasyncApplicationTests         : Starting GydatasyncApplicationTests on ZJY-PC with PID 8388 (started by ZJY in E:\Work\WorkItems\smart-city\20200918\water-iot\gydatasync)
+2021-01-18 10:54:37.368  INFO 8388 --- [main] c.h.g.GydatasyncApplicationTests         : The following profiles are active: prd
+2021-01-18 10:54:38.765  INFO 8388 --- [main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 'taskScheduler'
+2021-01-18 10:54:38.841  INFO 8388 --- [main] c.h.g.GydatasyncApplicationTests         : Started GydatasyncApplicationTests in 1.793 seconds (JVM running for 3.23)
+2021-01-18 10:54:39.218  INFO 8388 --- [SpringContextShutdownHook] o.s.s.c.ThreadPoolTaskScheduler          : Shutting down ExecutorService 'taskScheduler'
+2021-01-18 10:54:39.219  INFO 8388 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-0} closing ...
+2021-01-18 10:54:39.220  INFO 8388 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-0} closing ...

+ 4 - 3
smart-city-platform/src/main/java/com/bz/smart_city/dao/pay/PayControlRecordMapper.java

@@ -18,14 +18,15 @@ public interface PayControlRecordMapper {
     Integer add(@Param("payControlRecord")PayControlRecord payControlRecord);
 
     //查询
-    List<PayControlRecordDto> findList(@Param("payControlRecordDto") PayControlRecordDto payControlRecordDto);
+    List<PayControlRecordDto> findList(@Param("payControlRecordDto") PayControlRecordDto payControlRecordDto,@Param("siteId") BigInteger siteId,@Param("customerId") BigInteger customerId);
 
-    List<PayControlRecordDto> findByYear(@Param("accountNumber") String accountNumber,@Param("year") Integer year);
+    List<PayControlRecordDto> findByYear(@Param("accountNumber") String accountNumber,@Param("year") Integer year,@Param("siteId") BigInteger siteId,@Param("customerId") BigInteger customerId);
 
     PayControlRecord findControlRecordByMetercode(@Param("meterCode") String meterCode);
 
     Integer updateDeviceValveState(@Param("valveStatus") String valveStatus,@Param("meterCode") String meterCode);
 
     Integer updateControlRecordResult(@Param("result") Integer result,@Param("valveStatus") Integer valveStatus,@Param("id") BigInteger id);
-
+    //最后一次记录
+    PayControlRecord getRecentRecord(@Param("payControlRecord") PayControlRecord payControlRecord);
 }

+ 1 - 1
smart-city-platform/src/main/java/com/bz/smart_city/entity/pay/PayControlRule.java

@@ -23,7 +23,7 @@ public class PayControlRule {
     @ApiModelProperty(example="欠费天数",notes = "判断条件",position = 10)
     private String condition;
 
-    @ApiModelProperty(example="1",notes = "判断条件ID",position = 11)
+    @ApiModelProperty(example="1",notes = "判断条件ID,取数据字典中的阀控规则",position = 11)
     private Integer conditionId;
 
     @ApiModelProperty(example="0",notes = "运算符,[=,≠,>,<,≥,≤]对应1,2,3,4,5,6",position = 15)

+ 8 - 4
smart-city-platform/src/main/java/com/bz/smart_city/quartz/job/ControlByDayJob.java

@@ -2,13 +2,12 @@ package com.bz.smart_city.quartz.job;
 
 import com.bz.smart_city.quartz.service.ControlDayService;
 import lombok.extern.slf4j.Slf4j;
-import org.quartz.Job;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
+import org.quartz.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.io.Serializable;
+import java.math.BigInteger;
 
 /**
  * Created by ZJY on 2021-01-19 8:06
@@ -23,10 +22,15 @@ public class ControlByDayJob implements Job, Serializable {
 
     @Override
     public void execute(JobExecutionContext context) throws JobExecutionException {
+        // 1,获取推送配置信息
+        JobDetail jobDetail = context.getJobDetail();
+        JobDataMap jobDataMap = jobDetail.getJobDataMap();
+        Integer siteId = jobDataMap.getInt("siteId");
+        Integer customerId = jobDataMap.getInt("customerId");
 
         // 2,调用推送方法
         log.info("invoke ControlByDayJob");
-        controlDayService.start();
+        controlDayService.start(2,new BigInteger(siteId.toString()),new BigInteger(customerId.toString()));
         log.info("invoked ControlByDayJob");
     }
 }

+ 7 - 1
smart-city-platform/src/main/java/com/bz/smart_city/quartz/service/ControlDayService.java

@@ -1,9 +1,15 @@
 package com.bz.smart_city.quartz.service;
 
+import java.math.BigInteger;
+
 /**
  * Created by ZJY on 2021-01-18 19:11
  */
 public interface ControlDayService {
 
-    void start();
+    //flag 1开阀 0关阀 2全部
+    void start(int flag, BigInteger siteId, BigInteger customerId);
+    void saveQrtzTask(BigInteger siteId,BigInteger customerId);
+
+
 }

+ 143 - 64
smart-city-platform/src/main/java/com/bz/smart_city/quartz/service/impl/ControlDayServiceImpl.java

@@ -5,7 +5,9 @@ import com.bz.smart_city.commom.util.JacksonUtil;
 import com.bz.smart_city.dao.CustomerMapper;
 import com.bz.smart_city.dao.pay.AmountWaterUsedAmountMapper;
 import com.bz.smart_city.dao.pay.PayControlRecordMapper;
+import com.bz.smart_city.dao.pay.PayMessagetemplateMapper;
 import com.bz.smart_city.dao.pay.archives.PayBaseCustomerandmeterrelaMapper;
+import com.bz.smart_city.dto.pay.PayMessageTemplateDto;
 import com.bz.smart_city.entity.Customer;
 import com.bz.smart_city.entity.SyncValveResult;
 import com.bz.smart_city.entity.SyncValveSend;
@@ -15,9 +17,11 @@ import com.bz.smart_city.quartz.entity.QuartzEntity;
 import com.bz.smart_city.quartz.job.ControlByDayJob;
 import com.bz.smart_city.quartz.service.ControlDayService;
 import com.bz.smart_city.quartz.service.JobAndTriggerService;
+import com.bz.smart_city.service.pay.PayControlRecordService;
 import com.bz.smart_city.service.pay.PayControlRuleService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -31,7 +35,11 @@ import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
+import java.math.BigInteger;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -50,6 +58,10 @@ public class ControlDayServiceImpl implements ControlDayService, InitializingBea
     private JobAndTriggerService jobAndTriggerService;
     @Resource
     CustomerMapper  customerMapper;
+    @Autowired
+    PayControlRecordService payControlRecordService;
+    @Resource
+    private PayMessagetemplateMapper payMessagetemplateMapper;
 
     @Autowired
     PayControlRuleService payControlRuleService;
@@ -59,84 +71,151 @@ public class ControlDayServiceImpl implements ControlDayService, InitializingBea
 
     @Override
     public void afterPropertiesSet(){
-        saveQrtzTask();
+        List<PayBaseCustomerandmeterrela> payBaseCustomerandmeterrelas = amountWaterUsedAmountMapper.getCustIdAndSiteId();
+        for (PayBaseCustomerandmeterrela payBaseCustomerandmeterrela: payBaseCustomerandmeterrelas){
+            saveQrtzTask(payBaseCustomerandmeterrela.getSiteId(),payBaseCustomerandmeterrela.getCustomerId());
+        }
+    }
+    public void saveQrtzTask(BigInteger siteId,BigInteger customerId){
+        try {
+            // 1,查询需要批量推送的配置项目并构建定时任务
+            // 2,若对应定时任务不存在则创建
+            String cron = getCron(siteId,customerId);
+            if (StringUtils.isNotBlank(cron)){
+                QuartzEntity entity = new QuartzEntity();
+                entity.setJobGroup("根据阀控规则定时处理开关阀");
+                entity.setJobName("ControlByDayJob" +customerId);
+                entity.setDescription("ControlByDayJob" +customerId);
+                boolean exists = jobAndTriggerService.isExists(entity);
+
+                if(exists)
+                    jobAndTriggerService.deleteJob(entity);
+
+                if(1==1) {
+                    log.info(String.format("定时阀控处理:%s,客户ID%s",cron,customerId));
+                    entity.setCronExpression(cron);
+                    entity.setJobClassName(ControlByDayJob.class.getName());
+
+                    HashMap<String, Object> jobData = new HashMap<String, Object>();
+                    jobData.put("siteId", siteId.intValue());
+                    jobData.put("customerId", customerId.intValue());
+                    entity.setJobData(jobData);
+                    jobAndTriggerService.save(entity);
+                }
+            }
+        }
+        catch (Exception ex){
+            log.error(ex.getMessage());
+        }
     }
 
-    public void saveQrtzTask(){
-        // 1,查询需要批量推送的配置项目并构建定时任务
-        // 2,若对应定时任务不存在则创建
-        QuartzEntity entity = new QuartzEntity();
-        entity.setJobGroup("根据阀控规则定时处理开关阀");
-        entity.setJobName("ControlByDayJob" );
-        entity.setDescription("ControlByDayJob" );
-
-        boolean exists = jobAndTriggerService.isExists(entity);
-        if(!exists) {
-            String cron = "0 0 1 * * ?";
-            log.info("每天处理开关阀:" + cron);
-            entity.setCronExpression(cron);
-            entity.setJobClassName(ControlByDayJob.class.getName());
-            jobAndTriggerService.save(entity);
+    public String getCron(BigInteger siteId,BigInteger customerId){
+        //查询催缴设置
+        //(1)手动催缴:实时执行;
+        //(2)自动催缴:半小时后执行。
+        //3. 若设定欠费关阀规则,但未进行催缴设置则不执行“欠费关阀”指令。
+        PayMessageTemplateDto payMessageTemplateDto = payMessagetemplateMapper.get(siteId,customerId,null,null);
+
+        if(payMessageTemplateDto != null){
+            String sendTime = payMessageTemplateDto.getSendTime();
+            if(StringUtils.isNotBlank(sendTime)){
+                if(sendTime.length() == 5)
+                    sendTime += ":00";
+                //催缴方式 0手动 1自动
+                if(payMessageTemplateDto.getOperationType() == 0){
+                    String[] sp = sendTime.split(":");
+                    if(sp != null && sp.length == 3){
+                        String cron = String.format("%s %s %s * * ?",Integer.parseInt(sp[2]),Integer.parseInt(sp[1]),Integer.parseInt(sp[0]));
+                        return  cron;
+                    }
+                }
+                else if (payMessageTemplateDto.getOperationType() == 1){
+                    DateTimeFormatter dfYmd = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                    String currTime = LocalDateTime.now().format(dfYmd) + " " + sendTime;;
+                    DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+                    LocalDateTime localDateTime = LocalDateTime.parse(currTime,df);
+                    localDateTime.plusMinutes(30);
+                    String cron = String.format("%s %s %s * * ?",localDateTime.getSecond(),localDateTime.getMinute(),localDateTime.getHour());
+                    return  cron;
+                }
+            }
         }
+       return "";
     }
 
-    @Override
-    public void start(){
-        List<PayBaseCustomerandmeterrela> payBaseCustomerandmeterrelas = amountWaterUsedAmountMapper.getCustIdAndSiteId();
-        for (PayBaseCustomerandmeterrela payBaseCustomerandmeterrela: payBaseCustomerandmeterrelas){
 
-            PayBaseCustomerandmeterrela customer = new PayBaseCustomerandmeterrela();
-            customer.setCustomerId(payBaseCustomerandmeterrela.getCustomerId());
-            List<PayBaseCustomerandmeterrela> payBaseCustomerandmeterrelaList = payBaseCustomerandmeterrelaMapper.findList(customer);
-            if(payBaseCustomerandmeterrelaList.size() > 0){
-
-                Customer customerNo = customerMapper.findById(customer.getCustomerId().intValue());
-                for (PayBaseCustomerandmeterrela one: payBaseCustomerandmeterrelaList){
-                    String[] deviceType  = StringUtils.split(one.getValveRuleId(),",");
-                    String[] deviceTypeName  = StringUtils.split(one.getValveRuleName(),",");
-
-                    if(deviceType != null ){
-                        for (int i=0;i<deviceType.length;i++){
-                            //result执行动作,0关阀 1开阀
-                            Integer result = payControlRuleService.GetConditionReusl(new Integer(deviceType[i]),one.getAccountId().toString());
-                            if(result != null){
-                                //插入数据库
-                                PayControlRecord payControlRecord = new PayControlRecord();
-                                payControlRecord.setAccountId(one.getAccountId());
-                                payControlRecord.setMeterId(one.getWatermeterId());
-                                payControlRecord.setType(result);
-                                payControlRecord.setControlRuleId(new Integer(deviceType[i]));
-                                payControlRecord.setControlRuleIdName(deviceTypeName[i]);
-                                payControlRecord.setDelFlag("0");
-                                payControlRecord.setCustomerId(customer.getCustomerId());
-                                payControlRecord.setCreateDate(LocalDateTime.now());
-                                payControlRecordMapper.add(payControlRecord);
+    public void start(int flag,BigInteger siteId,BigInteger customerId){
+        PayBaseCustomerandmeterrela customer = new PayBaseCustomerandmeterrela();
+        customer.setCustomerId(customerId);
+        customer.setSiteId(siteId);
+        List<PayBaseCustomerandmeterrela> payBaseCustomerandmeterrelaList = payBaseCustomerandmeterrelaMapper.findList(customer);
+        if(payBaseCustomerandmeterrelaList.size() > 0){
+
+            Customer customerNo = customerMapper.findById(customer.getCustomerId().intValue());
+            for (PayBaseCustomerandmeterrela one: payBaseCustomerandmeterrelaList){
+                String[] deviceType  = StringUtils.split(one.getValveRuleId(),",");
+                String[] deviceTypeName  = StringUtils.split(one.getValveRuleName(),",");
+                //循环用户关联的所有阀控规则
+                Integer ControlResult = null;
+                if(deviceType != null ){
+                    for (int i=0;i<deviceType.length;i++){
+                        //result执行动作,0关阀 1开阀
+                        List<Integer> filterId = new ArrayList<>();
+                        filterId.add(2);
+                        filterId.add(4);
+                        filterId.add(5);
+                        Integer result = payControlRuleService.GetConditionReusl(new Integer(deviceType[i]),one.getAccountId().toString(),flag,filterId);
+                        if(result != null){
+                            try {
+                                //后面规则执行动作与前面一样不操作
+                                if(ControlResult == result.intValue())
+                                    continue;
+                                ControlResult = result;
+
+                                //最近一次阀控动作如果与当前一致则不操作
+                                PayControlRecord payControlRecordTemp = new PayControlRecord();
+                                payControlRecordTemp.setAccountId(one.getAccountId());
+                                PayControlRecord payControlRecordLast = payControlRecordService.getRecord(payControlRecordTemp);
+                                if(payControlRecordLast != null){
+                                    if(payControlRecordLast.getType().intValue() == result){
+                                        continue;
+                                    }
+                                }
+
+                                //执行动作与阀门当前状态一致不操作
+
+
 
                                 //调用阀门接口
-                                try {
-                                    String url=SyncUrl + "/api/platform/sendCommond";
-
-                                    String params = String.format("?customerNo=%s&meterNo=%s&type=%s",customerNo.getCustomerNo(),payControlRecord.getMeterId().toString(),payControlRecord.getType().toString());
-                                    url += params;
-                                    /*SyncValveSend syncValveSend = new SyncValveSend();
-                                    syncValveSend.setMeterNo(payControlRecord.getMeterId().toString());
-                                    syncValveSend.setType(payControlRecord.getType().toString());
-                                    syncValveSend.setCustomerNo(customerNo.getCustomerNo());
-                                    String json = JacksonUtil.obj2String(syncValveSend);*/
-                                    String postResult = HttpRequest.doPost(url ,"");
-                                    SyncValveResult syncValveResult = JacksonUtil.string2Obj(postResult, SyncValveResult.class);
-                                    Integer getResult = Integer.parseInt(syncValveResult.getStatus());
-                                }
-                                catch (Exception e){
-                                    e.printStackTrace();
+                                String url=SyncUrl + "/api/platform/sendCommond";
+                                String params = String.format("?customerNo=%s&meterNo=%s&type=%s",customerNo.getCustomerNo(),one.getMetercode(),result.toString());
+                                url += params;
+                                String postResult = HttpRequest.doPost(url ,"");
+                                SyncValveResult syncValveResult = JacksonUtil.string2Obj(postResult, SyncValveResult.class);
+                                Integer getResult = Integer.parseInt(syncValveResult.getStatus());
+                                if(getResult != null && getResult == 0){
+                                    //插入数据库
+                                    PayControlRecord payControlRecord = new PayControlRecord();
+                                    payControlRecord.setAccountId(one.getAccountId());
+                                    payControlRecord.setMeterId(one.getWatermeterId());
+                                    payControlRecord.setType(result);
+                                    payControlRecord.setControlRuleId(new Integer(deviceType[i]));
+                                    payControlRecord.setControlRuleIdName(deviceTypeName[i]);
+                                    payControlRecord.setDelFlag("0");
+                                    payControlRecord.setCustomerId(customer.getCustomerId());
+                                    payControlRecord.setSiteId(customer.getSiteId());
+                                    payControlRecord.setCreateDate(LocalDateTime.now());
+                                    payControlRecordMapper.add(payControlRecord);
                                 }
                             }
+                            catch (Exception e){
+                                e.printStackTrace();
+                            }
                         }
                     }
-
                 }
-            }
 
+            }
         }
     }
 }

+ 21 - 7
smart-city-platform/src/main/java/com/bz/smart_city/service/impl/pay/PayControlRecordServiceImpl.java

@@ -34,28 +34,35 @@ public class PayControlRecordServiceImpl implements PayControlRecordService {
     @Override
     public List<PayControlRecordDto> findList(PayControlRecordDto payControlRecordDto)
     {
-        return payControlRecordMapper.findList(payControlRecordDto);
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        return payControlRecordMapper.findList(payControlRecordDto,
+                new BigInteger(loginUser.getSiteId().toString()),new BigInteger(loginUser.getCustomerId().toString()));
     }
 
     @Override
     public List<PayControlRecordDto> findByYear(String accountNumber, Integer year)
     {
-        return payControlRecordMapper.findByYear(accountNumber,year);
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        return payControlRecordMapper.findByYear(accountNumber,year,
+                new BigInteger(loginUser.getSiteId().toString()),new BigInteger(loginUser.getCustomerId().toString()));
     }
 
     @Override
     public Pagination<PayControlRecordDto> findPage(PayControlRecordDto payControlRecordDto, int pageNum, int pageSize)
     {
-        //LoginUser loginUser = UserUtil.getCurrentUser();
+        LoginUser loginUser = UserUtil.getCurrentUser();
         PageHelper.startPage(pageNum,pageSize);
-        List<PayControlRecordDto> payControlRecordList = payControlRecordMapper.findList(payControlRecordDto);
+        List<PayControlRecordDto> payControlRecordList = payControlRecordMapper.findList(payControlRecordDto,
+                new BigInteger(loginUser.getSiteId().toString()),new BigInteger(loginUser.getCustomerId().toString()));
         return new  Pagination<>(payControlRecordList);
     }
 
     @Override
     public void exportExcel(PayControlRecordDto payControlRecordDto, HttpServletResponse httpServletResponse){
 
-        List<PayControlRecordDto> payControlRecordList = payControlRecordMapper.findList(payControlRecordDto);
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        List<PayControlRecordDto> payControlRecordList = payControlRecordMapper.findList(payControlRecordDto,
+                new BigInteger(loginUser.getSiteId().toString()),new BigInteger(loginUser.getCustomerId().toString()));
 
         String title = "阀控记录列表";
         DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@@ -152,8 +159,9 @@ public class PayControlRecordServiceImpl implements PayControlRecordService {
 
     @Override
     public void exportExcel2(PayControlRecordDto payControlRecordDto, HttpServletResponse httpServletResponse){
-
-        List<PayControlRecordDto> payControlRecordList = payControlRecordMapper.findList(payControlRecordDto);
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        List<PayControlRecordDto> payControlRecordList = payControlRecordMapper.findList(payControlRecordDto,
+                new BigInteger(loginUser.getSiteId().toString()),new BigInteger(loginUser.getCustomerId().toString()));
 
         String title = "阀控记录列表";
         DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@@ -242,4 +250,10 @@ public class PayControlRecordServiceImpl implements PayControlRecordService {
             throw new ServiceException(-900, "导出异常");
         }
     }
+
+    @Override
+    public PayControlRecord getRecord(PayControlRecord payControlRecord){
+
+        return   payControlRecordMapper.getRecentRecord(payControlRecord);
+    }
 }

+ 24 - 9
smart-city-platform/src/main/java/com/bz/smart_city/service/impl/pay/PayControlRuleServiceImpl.java

@@ -12,12 +12,15 @@ import com.bz.smart_city.dto.pay.PayRechargeaccountDto;
 import com.bz.smart_city.entity.pay.PayControlRecord;
 import com.bz.smart_city.entity.pay.PayControlRule;
 import com.bz.smart_city.entity.pay.archives.PayBaseCustomerandmeterrela;
+import com.bz.smart_city.service.pay.PayControlRecordService;
 import com.bz.smart_city.service.pay.PayControlRuleService;
 import com.github.pagehelper.PageHelper;
 import com.sun.org.apache.bcel.internal.generic.ISUB;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import sun.security.smartcardio.SunPCSC;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -35,7 +38,8 @@ public class PayControlRuleServiceImpl implements PayControlRuleService {
     PayControlRuleMapper payControlRuleMapper;
     @Resource
     PayRechargeaccountMapper payRechargeaccountMapper;
-
+    @Autowired
+    PayControlRecordService payControlRecordService;
 
 
     @Override
@@ -377,7 +381,10 @@ public class PayControlRuleServiceImpl implements PayControlRuleService {
      */
     @Override
     public boolean ConditionOpenUsed(String accountId,String condition,String value){
-        Integer state = payControlRuleMapper.findDebtDay(accountId);
+        Integer state = payControlRuleMapper.findOpenUse(accountId);
+        //0、1未开户 2已开户
+        if(state == 2)
+            state =1;
         int paramValue = Integer.valueOf(value).intValue();
         if(state != null){
             switch (condition){
@@ -470,13 +477,26 @@ public class PayControlRuleServiceImpl implements PayControlRuleService {
      *
      * @param id    阀控规则ID
      * @param accountId
+     * @param flag 过滤执行动作 1只执行开阀,0只执行关阀
      * @return
      */
     @Override
-    public Integer GetConditionReusl(Integer id,String accountId){
+    public Integer GetConditionReusl(Integer id,String accountId,int flag,List<Integer> filterId){
         //["=", "≠", ">", "<", "≥", "≤"]
         List<PayControlRule> payControlRules = payControlRuleMapper.findList(id,null,null);
-        if(payControlRules.size() ==1){
+
+        if(payControlRules != null && payControlRules.size() ==1){
+
+            //过滤阀门动作
+            if(1 == flag || 0 ==flag){
+                if(payControlRules.get(0).getAction() != flag)
+                    return null;
+            }
+
+            //过滤规则ID
+            if(filterId.contains(payControlRules.get(0).getConditionId()))
+                return null;
+
             String condition= payControlRules.get(0).getOperator().toString();
             int conditionValue= Integer.valueOf(condition);
             switch (conditionValue){
@@ -506,7 +526,6 @@ public class PayControlRuleServiceImpl implements PayControlRuleService {
                 }
             }
 
-
             String value = payControlRules.get(0).getValue();
             boolean bl = false;
             switch (payControlRules.get(0).getConditionId()){
@@ -537,15 +556,11 @@ public class PayControlRuleServiceImpl implements PayControlRuleService {
                     bl= ConditionRechargeAndDebt(accountId,condition,value);
                     break;
                 }
-
             }
-
             if(bl){
                 return new Integer(payControlRules.get(0).getAction());
             }
         }
         return null;
-
     }
-
 }

+ 6 - 0
smart-city-platform/src/main/java/com/bz/smart_city/service/impl/pay/PayMessagetemplateServiceImp.java

@@ -4,9 +4,11 @@ import com.bz.smart_city.commom.util.UserUtil;
 import com.bz.smart_city.dao.pay.PayMessagetemplateMapper;
 import com.bz.smart_city.dto.LoginUser;
 import com.bz.smart_city.dto.pay.PayMessageTemplateDto;
+import com.bz.smart_city.quartz.service.ControlDayService;
 import com.bz.smart_city.service.pay.PayMessagesendrecordService;
 import com.bz.smart_city.service.pay.PayMessagetemplateService;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -27,6 +29,8 @@ public class PayMessagetemplateServiceImp implements PayMessagetemplateService {
     PayMessagetemplateMapper payMessagetemplateMapper;
     @Resource
     PayMessagesendrecordService payMessagesendrecordService;
+    @Autowired
+    ControlDayService controlDayService;
 
     public List<PayMessageTemplateDto> getAllMessageTemplate(PayMessageTemplateDto payMessageTemplateDto){
         return payMessagetemplateMapper.getAllMessageTemplate(payMessageTemplateDto);
@@ -69,6 +73,8 @@ public class PayMessagetemplateServiceImp implements PayMessagetemplateService {
             //删除定时任务
             payMessagesendrecordService.deleteQrtzTask(payMessageTemplateDto.getId());
         }
+        //更新催缴任务
+        controlDayService.saveQrtzTask(payMessageTemplateDto.getSiteId(),payMessageTemplateDto.getCustomerId());
     }
 
     public PayMessageTemplateDto get(Integer sendType) {

+ 3 - 0
smart-city-platform/src/main/java/com/bz/smart_city/service/pay/PayControlRecordService.java

@@ -23,4 +23,7 @@ public interface PayControlRecordService {
 
     void exportExcel2(PayControlRecordDto payControlRecordDto, HttpServletResponse httpServletResponse);
 
+    //取最后一条记录
+    PayControlRecord getRecord(PayControlRecord payControlRecord);
+
 }

+ 1 - 1
smart-city-platform/src/main/java/com/bz/smart_city/service/pay/PayControlRuleService.java

@@ -48,5 +48,5 @@ public interface PayControlRuleService {
     //预存与欠费差额
     boolean ConditionRechargeAndDebt(String accountId,String condition,String value);
 
-    Integer GetConditionReusl(Integer id,String accountId);
+    Integer GetConditionReusl(Integer id,String accountId,int flag,List<Integer> filterId);
 }

+ 27 - 1
smart-city-platform/src/main/resources/mapper/pay/PayControlRecordMapper.xml

@@ -28,6 +28,8 @@
         left join sc_device sc on pcr.meter_id = sc.id
         <where>
             pcr.del_flag = 0
+            <if test="payControlRecordDto.siteId != null"> and pcr.site_id = #{payControlRecordDto.siteId}</if>
+            <if test="payControlRecordDto.customerId != null"> and pcr.customer_id = #{payControlRecordDto.customerId}</if>
             <if test="payControlRecordDto.id != null"> and pcr.id = #{payControlRecordDto.id}</if>
             <if test="payControlRecordDto.accountId != null"> and pcr.account_id = #{payControlRecordDto.accountId}</if>
             <if test="payControlRecordDto.meterId != null"> and pcr.meter_id = #{payControlRecordDto.meterId}</if>
@@ -46,6 +48,28 @@
         order by pcr.update_date desc
     </select>
 
+    <select id="getRecentRecord" resultType="com.bz.smart_city.entity.pay.PayControlRecord">
+        select
+        pcr.id,
+        pcr.account_id,
+        pcr.meter_id,
+        pcr.type,
+        pcr.result,
+        pcr.state,
+        pcr.control_rule_id,
+        pcr.create_by,
+        pcr.create_date,
+        pcr.update_by,
+        pcr.update_date,
+        pcr.remarks,
+        pcr.site_id,
+        pcr.customer_id
+        from pay_control_record pcr
+        where
+        pcr.del_flag = 0
+        and pcr.account_id = #{payControlRecord.accountId}
+        order by pcr.create_date desc limit 1
+    </select>
     <select id="findByYear" resultType="com.bz.smart_city.dto.pay.PayControlRecordDto">
         select
         pcr.id,
@@ -68,8 +92,10 @@
         left join pay_control_rule pcrule on pcr.control_rule_id = pcrule.id
         where
         pba.accountnumber = #{accountNumber}
+        <if test="payControlRecordDto.siteId != null"> and pcr.site_id = #{payControlRecordDto.siteId}</if>
+        <if test="payControlRecordDto.customerId != null"> and pcr.customer_id = #{payControlRecordDto.customerId}</if>
         and DATE_FORMAT(pcr.create_date,'%Y')=#{year}
-
+        order by pcr.update_date desc
     </select>
 
     <insert id="add" useGeneratedKeys="true" keyColumn="id">