소스 검색

缴费阀控修改

wangli 4 년 전
부모
커밋
ddf5988d4c

+ 1 - 1
smart-city-platform/build.gradle

@@ -110,7 +110,7 @@ tasks.withType(JavaCompile) {
     options.encoding = 'UTF-8'
 }
 def releaseTime() {
-    return new Date().format("yyyyMMdd", TimeZone.getTimeZone("GMT+08:00"))
+    return new Date().format("yyyyMMddHHmmss", TimeZone.getTimeZone("GMT+08:00"))
 }
 allprojects {
 

+ 2 - 2
smart-city-platform/src/main/java/com/bz/smart_city/dao/pay/PayFeeMapper.java

@@ -72,7 +72,7 @@ public interface PayFeeMapper {
 
     List<PayValveStateInfo> getDeviceValveStateByRecord();
 
-   Integer deleteControlValveInfoByDevice(@Param("list")List<BigInteger> list);
+    Integer deleteControlValveInfoByDevice(@Param("list")List<BigInteger> list);
 
-    List<PayControlRule> getValveRulesByType(@Param("type")Integer type);
+    List<PayControlRule> getValveRulesByType(@Param("action")Integer action ,@Param("types")List<Integer> types,@Param("siteId")Integer siteId, @Param("customer")Integer customer);
 }

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

@@ -17,9 +17,11 @@ public class PayValveStateInfo {
     private String eleno;
     private String valveState;
     private BigDecimal debt;
+    private BigDecimal remaining;
     private BigInteger accountId;
     private BigInteger meterId;
     private BigInteger customerNo;
+    private Integer controlRuleId;
     private Integer operation;  //0关阀1开阀
     private BigInteger siteId;
     private BigInteger customerId;

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

@@ -225,13 +225,16 @@ public class AmountWaterUsedAmountServiceImpl implements AmountWaterUsedAmountSe
             }
         }
         if(idList.size()>0){
-            List<PayControlRule> payControlRules = payFeeMapper.getValveRulesByType(2);
+            List<Integer> types =new ArrayList<>();
+            types.add(2);
+            List<PayControlRule> payControlRules = payFeeMapper.getValveRulesByType(null,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())){
+                                payValveStateInfo.setControlRuleId(payControlRule.getId().intValue());
                                 payValveStateInfo.setOperation(payControlRule.getAction());
                                 payValveStateInfo.setCustomerId(BigInteger.valueOf(loginUser.getCustomerId()));
                                 payValveStateInfo.setSiteId(BigInteger.valueOf(loginUser.getSiteId()));
@@ -244,6 +247,7 @@ public class AmountWaterUsedAmountServiceImpl implements AmountWaterUsedAmountSe
                     for(PayValveStateInfo payValveStateInfo :PayValveStateInfos){
                         for(PayControlRule payControlRule :payControlRules){
                             if(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()));

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

@@ -311,21 +311,7 @@ public class PayFeeServiceImp implements PayFeeService {
         if(transactiondetailsDtoList.size()>0){
             payTransactiondetailsMapper.batchInsert(transactiondetailsDtoList);
         }
-        //查询阀门状态,判断是否需要开阀
-        List<PayValveStateInfo> payValveStateInfos = payFeeMapper.getDeviceValveState(new BigInteger(id));
-        for(PayValveStateInfo payValveStateInfo : payValveStateInfos){
-            if(payValveStateInfo != null
-                    && payValveStateInfo.getDebt()!= null && payValveStateInfo.getDebt().compareTo(BigDecimal.ZERO) ==1
-                    && payValveStateInfo.getValveState()!= null && payValveStateInfo.getValveState().equals("0")){
-                payValveStateInfo.setOperation(1);
-                payValveStateInfo.setSiteId(BigInteger.valueOf(loginUser.getSiteId()));
-                payValveStateInfo.setCustomerId(BigInteger.valueOf(loginUser.getCustomerId()));
-                Boolean sendValveCommondResult = this.sendValveCommond(payValveStateInfo);
-                if(!sendValveCommondResult){
-//                    result+="; 开阀异常:"+String.format("%.2f", transAmount)+"元";
-                }
-            }
-        }
+        openValveByPayFee(new BigInteger(id), loginUser.getSiteId(),loginUser.getCustomerId());
         //返回批次号
         PayfeeResult payfeeResult=new PayfeeResult();
         payfeeResult.setMsg(result);
@@ -337,7 +323,52 @@ public class PayFeeServiceImp implements PayFeeService {
 
     }
 
-   /*
+    private void openValveByPayFee(BigInteger id, Integer siteId, Integer customerId) {
+        //查询阀门状态,判断是否需要开阀
+        List<PayValveStateInfo> payValveStateInfos = payFeeMapper.getDeviceValveState(id);
+
+        List<Integer> types =new ArrayList<>();
+        types.add(2);   //欠费金额
+        types.add(3);   //预存金额
+        types.add(7);   //预存与欠费差额
+        List<PayControlRule> payControlRules = payFeeMapper.getValveRulesByType(1,types,siteId,customerId);
+
+        for(PayValveStateInfo payValveStateInfo : payValveStateInfos){
+            if(payValveStateInfo != null && payValveStateInfo.getDebt()!= null
+                    && ((payValveStateInfo.getValveState()!= null && payValveStateInfo.getValveState().equals("0"))
+                            || payValveStateInfo.getValveState() == null)){
+
+                for(PayControlRule payControlRule : payControlRules){
+                    if(payControlRule.getConditionId() == 2 && payControlRule.checkCondition(payValveStateInfo.getDebt())){
+                        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() == 3 && payControlRule.checkCondition(payValveStateInfo.getRemaining())){
+                        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);
+                        payValveStateInfo.setSiteId(BigInteger.valueOf(siteId));
+                        payValveStateInfo.setCustomerId(BigInteger.valueOf(customerId));
+                        Boolean sendValveCommondResult = this.sendValveCommond(payValveStateInfo);
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
+    /*
     * @Description: 缴纳欠费
     * @auther: wangli
     * @date: 2020-04-22 16:35
@@ -577,21 +608,7 @@ public class PayFeeServiceImp implements PayFeeService {
          payTransactiondetailsMapper.batchInsert(transactiondetailsDtoList);
        }
 
-       //查询阀门状态,判断是否需要开阀
-       List<PayValveStateInfo> payValveStateInfos = payFeeMapper.getDeviceValveState(payCustomRechargeDto.getAccountId());
-       for(PayValveStateInfo payValveStateInfo : payValveStateInfos){
-           if(payValveStateInfo != null
-                   && payValveStateInfo.getDebt()!= null && payValveStateInfo.getDebt().compareTo(BigDecimal.ZERO) ==1
-                   && payValveStateInfo.getValveState()!= null && payValveStateInfo.getValveState().equals("0")){
-               payValveStateInfo.setOperation(1);
-               payValveStateInfo.setSiteId(BigInteger.valueOf(loginUser.getSiteId()));
-               payValveStateInfo.setCustomerId(BigInteger.valueOf(loginUser.getCustomerId()));
-               Boolean sendValveCommondResult = this.sendValveCommond(payValveStateInfo);
-               if(!sendValveCommondResult){
-//                    result+="; 开阀异常:"+String.format("%.2f", transAmount)+"元";
-               }
-           }
-       }
+       openValveByPayFee(payCustomRechargeDto.getAccountId(), loginUser.getSiteId(),loginUser.getCustomerId());
 
         //返回批次号
        return  payseriesno;
@@ -1248,21 +1265,7 @@ public class PayFeeServiceImp implements PayFeeService {
         payAgenttransaction.setDelFlag("0");
         payAgenttransactionMapper.insertAgenttransaction(payAgenttransaction);
 
-        //查询阀门状态,判断是否需要开阀
-        List<PayValveStateInfo> payValveStateInfos = payFeeMapper.getDeviceValveState(payCustomRechargeDto.getAccountId());
-        for(PayValveStateInfo payValveStateInfo : payValveStateInfos){
-            if(payValveStateInfo != null
-                    && payValveStateInfo.getDebt()!= null && payValveStateInfo.getDebt().compareTo(BigDecimal.ZERO) ==1
-                    && payValveStateInfo.getValveState()!= null && payValveStateInfo.getValveState().equals("0")){
-                payValveStateInfo.setOperation(1);
-                payValveStateInfo.setSiteId(BigInteger.valueOf(siteId));
-                payValveStateInfo.setCustomerId(BigInteger.valueOf(customerId));
-                Boolean sendValveCommondResult = this.sendValveCommond(payValveStateInfo);
-                if(!sendValveCommondResult){    //关阀失败
-//                    result+="; 开阀异常:"+String.format("%.2f", transAmount)+"元";
-                }
-            }
-        }
+        openValveByPayFee(payCustomRechargeDto.getAccountId(), siteId,customerId);
         return new BankPayfeeMsg("9999","交易成功");
     }
 
@@ -1378,7 +1381,7 @@ public class PayFeeServiceImp implements PayFeeService {
             log.info("开关阀请求结果"+result);
             JSONObject jsonObject= JSON.parseObject(result);
             Integer status= jsonObject.getInteger("status");
-            if(status .equals("0")){   //返回正常
+            if(status == 0){   //返回正常
                 //添加阀控记录
                 PayControlRecord payControlRecord = new PayControlRecord();
                 payControlRecord.setAccountId(payValveStateInfo.getAccountId());
@@ -1388,6 +1391,8 @@ public class PayFeeServiceImp implements PayFeeService {
                 payControlRecord.setState(0);//状态为关阀
                 payControlRecord.setType(1);//开阀操作
 
+                payControlRecord.setControlRuleId(payValveStateInfo.getControlRuleId());
+
                 payControlRecord.setCreateBy(userId);
                 payControlRecord.setCreateDate(LocalDateTime.now());
                 payControlRecord.setUpdateBy(userId);

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

@@ -147,7 +147,7 @@
         limit 1
     </select>
     <update id="updateDeviceValveState">
-        udpate sc_device  set control_status = #{valveStatus}  where metercode = #{meterCode}
+        update sc_device  set control_status = #{valveStatus}  where metercode = #{meterCode}
     </update>
     <update id="updateControlRecordResult">
         update pay_control_record set result =#{result} ,state =#{valveStatus} where id = #{id}

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

@@ -410,8 +410,10 @@
             ,d.control_status as "valveState"
             ,(select sum(debt) from pay_pay_receivable where debt>0 and account_id=#{accountId}) as "debt"
             ,cs.customer_no as "customerNo"
+            ,r.remaining
         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
         left join sc_customer cs on cs.id=d.customer_id
         where c.account_id=#{accountId}
 
@@ -460,7 +462,8 @@
 
     <select id="getDeviceValveStateByRecord" resultType="com.bz.smart_city.dto.pay.payfee.PayValveStateInfo">
         select
-            c.account_id as "accountId"
+            v.control_rule_id as "controlRuleId"
+            ,c.account_id as "accountId"
             ,d.id as "meterId"
             ,d.water_meter_no as "eleno"
             ,ifnull(d.water_meter_no,d.metercode )as "metercode"
@@ -491,7 +494,14 @@
             ,value as "value"
             ,action as "action"
         from pay_control_rule
-        where `disable` = 0 and  condition_id =#{type}
+        where `disable` = 0  and site_id = #{siteId} and customer_id = #{customer}
+        <if test="action != null">and action = #{action} </if>
+        <if test="types != null and  types.size() > 0">
+            and condition_id in
+            <foreach collection="types" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
     </select>
 
 </mapper>