wangli преди 4 години
родител
ревизия
cf34e8f08a

+ 1 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dto/pay/payfee/PayValveStateInfo.java

@@ -17,6 +17,7 @@ public class PayValveStateInfo {
     private String eleno;
     private Integer valveState;
     private BigDecimal debt;
+    private BigDecimal balance;
     private BigDecimal remaining;
     private BigInteger accountId;
     private BigInteger meterId;

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

@@ -67,7 +67,7 @@ public class PayControlRule {
 
 
     public Boolean checkCondition(BigDecimal data){
-        if(this.operator != null && StringUtils.isNotBlank(this.value)){
+        if(this.operator != null && StringUtils.isNotBlank(this.value) && data != null){
             switch (this.operator) {
                 case 1: {
                     condition = "=";

+ 40 - 3
smart-city-platform/src/main/java/com/bz/smart_city/service/impl/pay/AmountWaterUsedAmountServiceImpl.java

@@ -227,18 +227,38 @@ public class AmountWaterUsedAmountServiceImpl implements AmountWaterUsedAmountSe
         if(idList.size()>0){
             List<Integer> types =new ArrayList<>();
             types.add(2);
-            List<PayControlRule> payControlRules = payFeeMapper.getValveRulesByType(null,types,loginUser.getSiteId(),loginUser.getCustomerId());
+            types.add(3);
+            types.add(7);
+            List<PayControlRule> payControlRules = payFeeMapper.getValveRulesByType(0,types,loginUser.getSiteId(),loginUser.getCustomerId());
             for(int i=0;2000*i<idList.size();i++){
                 if(2000*i+2000<idList.size()){
                     List<PayValveStateInfo> PayValveStateInfos = payFeeMapper.getDeviceValveStateByAmount(idList.subList(2000*i,2000*i+2000));
                     for(PayValveStateInfo payValveStateInfo :PayValveStateInfos){
+
                         for(PayControlRule payControlRule :payControlRules){
-                            if(payValveStateInfo.getDebt() != null && payControlRule.checkCondition(payValveStateInfo.getDebt())){
+                            if(payControlRule.getConditionId() == 2 && payValveStateInfo.getDebt() != null && payControlRule.checkCondition(payValveStateInfo.getDebt())){
+                                payValveStateInfo.setControlRuleId(payControlRule.getId().intValue());
+                                payValveStateInfo.setOperation(payControlRule.getAction());
+                                payValveStateInfo.setCustomerId(BigInteger.valueOf(loginUser.getCustomerId()));
+                                payValveStateInfo.setSiteId(BigInteger.valueOf(loginUser.getSiteId()));
+                                payFeeService.sendValveCommond(payValveStateInfo);
+                                break;
+                            }
+                            if(payControlRule.getConditionId() == 3 && payValveStateInfo.getDebt() != null && payControlRule.checkCondition(payValveStateInfo.getRemaining())){
                                 payValveStateInfo.setControlRuleId(payControlRule.getId().intValue());
                                 payValveStateInfo.setOperation(payControlRule.getAction());
                                 payValveStateInfo.setCustomerId(BigInteger.valueOf(loginUser.getCustomerId()));
                                 payValveStateInfo.setSiteId(BigInteger.valueOf(loginUser.getSiteId()));
                                 payFeeService.sendValveCommond(payValveStateInfo);
+                                break;
+                            }
+                            if(payControlRule.getConditionId() == 7 && payValveStateInfo.getDebt() != null &&  payControlRule.checkCondition(payValveStateInfo.getRemaining().subtract(payValveStateInfo.getDebt()))){
+                                payValveStateInfo.setControlRuleId(payControlRule.getId().intValue());
+                                payValveStateInfo.setOperation(payControlRule.getAction());
+                                payValveStateInfo.setCustomerId(BigInteger.valueOf(loginUser.getCustomerId()));
+                                payValveStateInfo.setSiteId(BigInteger.valueOf(loginUser.getSiteId()));
+                                payFeeService.sendValveCommond(payValveStateInfo);
+                                break;
                             }
                         }
                     }
@@ -246,12 +266,29 @@ public class AmountWaterUsedAmountServiceImpl implements AmountWaterUsedAmountSe
                     List<PayValveStateInfo> PayValveStateInfos = payFeeMapper.getDeviceValveStateByAmount(idList.subList(2000*i,idList.size()));
                     for(PayValveStateInfo payValveStateInfo :PayValveStateInfos){
                         for(PayControlRule payControlRule :payControlRules){
-                            if(payValveStateInfo.getDebt() != null && payControlRule.checkCondition(payValveStateInfo.getDebt())){
+                            if(payControlRule.getConditionId() == 2 && payValveStateInfo.getDebt() != null && payControlRule.checkCondition(payValveStateInfo.getDebt())){
                                 payValveStateInfo.setControlRuleId(payControlRule.getId().intValue());
                                 payValveStateInfo.setOperation(payControlRule.getAction());
                                 payValveStateInfo.setCustomerId(BigInteger.valueOf(loginUser.getCustomerId()));
                                 payValveStateInfo.setSiteId(BigInteger.valueOf(loginUser.getSiteId()));
                                 payFeeService.sendValveCommond(payValveStateInfo);
+                                break;
+                            }
+                            if(payControlRule.getConditionId() == 3 && payValveStateInfo.getDebt() != null && payControlRule.checkCondition(payValveStateInfo.getRemaining())){
+                                payValveStateInfo.setControlRuleId(payControlRule.getId().intValue());
+                                payValveStateInfo.setOperation(payControlRule.getAction());
+                                payValveStateInfo.setCustomerId(BigInteger.valueOf(loginUser.getCustomerId()));
+                                payValveStateInfo.setSiteId(BigInteger.valueOf(loginUser.getSiteId()));
+                                payFeeService.sendValveCommond(payValveStateInfo);
+                                break;
+                            }
+                            if(payControlRule.getConditionId() == 7 && payValveStateInfo.getDebt() != null &&  payControlRule.checkCondition(payValveStateInfo.getRemaining().subtract(payValveStateInfo.getDebt()))){
+                                payValveStateInfo.setControlRuleId(payControlRule.getId().intValue());
+                                payValveStateInfo.setOperation(payControlRule.getAction());
+                                payValveStateInfo.setCustomerId(BigInteger.valueOf(loginUser.getCustomerId()));
+                                payValveStateInfo.setSiteId(BigInteger.valueOf(loginUser.getSiteId()));
+                                payFeeService.sendValveCommond(payValveStateInfo);
+                                break;
                             }
                         }
                     }

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

@@ -330,6 +330,7 @@ public class PayFeeServiceImp implements PayFeeService {
         List<Integer> types =new ArrayList<>();
         types.add(2);   //欠费金额
         types.add(3);   //预存金额
+        types.add(4);   //用水余额
         types.add(7);   //预存与欠费差额
         List<PayControlRule> payControlRules = payFeeMapper.getValveRulesByType(1,types,siteId,customerId);
 
@@ -355,6 +356,14 @@ public class PayFeeServiceImp implements PayFeeService {
                         Boolean sendValveCommondResult = this.sendValveCommond(payValveStateInfo);
                         break;
                     }
+                    if(payControlRule.getConditionId() == 4 && payControlRule.checkCondition(payValveStateInfo.getBalance())){
+                        payValveStateInfo.setControlRuleId(payControlRule.getId().intValue());
+                        payValveStateInfo.setOperation(1);
+                        payValveStateInfo.setSiteId(BigInteger.valueOf(siteId));
+                        payValveStateInfo.setCustomerId(BigInteger.valueOf(customerId));
+                        Boolean sendValveCommondResult = this.sendValveCommond(payValveStateInfo);
+                        break;
+                    }
                     if(payControlRule.getConditionId() == 7 && payControlRule.checkCondition(payValveStateInfo.getRemaining().subtract(payValveStateInfo.getDebt()))){
                         payValveStateInfo.setControlRuleId(payControlRule.getId().intValue());
                         payValveStateInfo.setOperation(1);

+ 12 - 10
smart-city-platform/src/main/resources/mapper/pay/payFeeMapper.xml

@@ -411,6 +411,7 @@
             ,(select sum(debt) from pay_pay_receivable where debt>0 and account_id=#{accountId}) as "debt"
             ,cs.customer_no as "customerNo"
             ,r.remaining
+            ,r.balance
         from sc_device d
         left join pay_base_customerandmeterrela c on c.watermeter_id=d.id
         left join pay_pay_rechargeaccount r on r.account_id = c.account_id
@@ -443,18 +444,19 @@
         ,ifnull(d.water_meter_no,d.metercode )as "metercode"
         ,d.control_status as "valveState"
         ,cs.customer_no as "customerNo"
-        ,sum(debt) debt
-        from pay_pay_receivable r
+        ,sum(re.debt) debt
+        ,r.remaining
+        from pay_pay_rechargeaccount r
+        left join  pay_pay_receivable re on r.account_id = re.account_id and debt > 0
         left join sc_device d on d.id=r.meter_id
         left join sc_customer cs on cs.id=d.customer_id
-        where debt > 0
-        and r.account_id in (
-        select account_id
-        from pay_amount_waterusedamount
-        where   id in
-        <foreach collection="list" item="item" open="(" separator="," close=")">
-            #{item}
-        </foreach>
+        where  r.account_id in (
+            select account_id
+            from pay_amount_waterusedamount
+            where   id in
+            <foreach collection="list" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
         )
         group by cs.customer_no, r.account_id	,d.id	,d.water_meter_no	,d.water_meter_no,d.metercode ,d.control_status