Просмотр исходного кода

优化 手机缴费不通知的问题

java110 лет назад: 5
Родитель
Сommit
76be88de96

+ 9 - 0
java110-bean/src/main/java/com/java110/dto/fee/FeeDetailDto.java

@@ -23,6 +23,7 @@ public class FeeDetailDto extends PageDto implements Serializable {
     private String receivedAmount;
     private String communityId;
     private String feeId;
+    private String bId;
 
 
     private Date createTime;
@@ -146,4 +147,12 @@ public class FeeDetailDto extends PageDto implements Serializable {
     public void setStateName(String stateName) {
         this.stateName = stateName;
     }
+
+    public String getbId() {
+        return bId;
+    }
+
+    public void setbId(String bId) {
+        this.bId = bId;
+    }
 }

+ 10 - 0
java110-core/src/main/java/com/java110/core/event/center/DataFlowEventPublishing.java

@@ -261,6 +261,14 @@ public class DataFlowEventPublishing extends LoggerEngine {
         multicastEvent(new InvokeFinishBusinessSystemEvent("",dataFlow));
     }
 
+    /**
+     * 调用 确认订单完成
+     * @param dataFlow
+     */
+    public static void invokeConfirmFinishBusinessSystem(IOrderDataFlowContext dataFlow) {
+        multicastEvent(new InvokeConfirmFinishBusinessSystemEvent("",dataFlow));
+    }
+
 
     /**
      * 调用业务系统成功后事件
@@ -298,5 +306,7 @@ public class DataFlowEventPublishing extends LoggerEngine {
         multicastEvent(new DataResponseEvent("",dataFlow,responseData,headers));
     }
 
+
+
     /***********************************************发布侦听 结束***************************************************************/
 }

+ 21 - 0
java110-core/src/main/java/com/java110/core/event/center/event/InvokeConfirmFinishBusinessSystemEvent.java

@@ -0,0 +1,21 @@
+package com.java110.core.event.center.event;
+
+import com.java110.core.context.IOrderDataFlowContext;
+
+/**
+ * 确认订单调用完成
+ * Created by wuxw on 2018/7/2.
+ */
+public class InvokeConfirmFinishBusinessSystemEvent extends DataFlowEvent {
+
+    /**
+     * Constructs a prototypical Event.
+     *
+     * @param source   The object on which the Event initially occurred.
+     * @param dataFlow
+     * @throws IllegalArgumentException if source is null.
+     */
+    public InvokeConfirmFinishBusinessSystemEvent(Object source, IOrderDataFlowContext dataFlow) {
+        super(source, dataFlow);
+    }
+}

+ 1 - 1
java110-core/src/main/java/com/java110/core/event/center/event/InvokeFinishBusinessSystemEvent.java

@@ -10,7 +10,7 @@ public class InvokeFinishBusinessSystemEvent extends DataFlowEvent {
 
     /**
      * Constructs a prototypical Event.
-     *
+     *Confirm
      * @param source   The object on which the Event initially occurred.
      * @param dataFlow
      * @throws IllegalArgumentException if source is null.

+ 2 - 1
java110-interface/src/main/resources/config/center_event.properties

@@ -1,3 +1,4 @@
 java110.event.properties.centerServiceListener=\
   dealUserIdListener,\
-  transactionOrderInfoToDataBusListener
+  transactionOrderInfoToDataBusListener,\
+  confirmTransactionOrderInfoToDataBusListener

+ 44 - 19
service-job/src/main/java/com/java110/job/adapt/payment/notice/MachinePaymentNoticeAdapt.java

@@ -4,8 +4,10 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.core.factory.WechatFactory;
+import com.java110.core.smo.IComputeFeeSMO;
 import com.java110.dto.basePrivilege.BasePrivilegeDto;
 import com.java110.dto.community.CommunityDto;
+import com.java110.dto.fee.FeeDetailDto;
 import com.java110.dto.fee.FeeDto;
 import com.java110.dto.smallWeChat.SmallWeChatDto;
 import com.java110.dto.smallWechatAttr.SmallWechatAttrDto;
@@ -16,6 +18,7 @@ import com.java110.entity.wechat.Content;
 import com.java110.entity.wechat.Data;
 import com.java110.entity.wechat.PropertyFeeTemplateMessage;
 import com.java110.intf.community.ICommunityInnerServiceSMO;
+import com.java110.intf.fee.IFeeDetailInnerServiceSMO;
 import com.java110.intf.fee.IFeeInnerServiceSMO;
 import com.java110.intf.order.IPrivilegeInnerServiceSMO;
 import com.java110.intf.store.ISmallWeChatInnerServiceSMO;
@@ -72,48 +75,70 @@ public class MachinePaymentNoticeAdapt extends DatabusAdaptImpl {
     @Autowired
     private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
 
+    @Autowired
+    private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl;
+
+    @Autowired
+    private IComputeFeeSMO computeFeeSMOImpl;
     //模板信息推送地址
     private static String sendMsgUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";
 
     @Override
     public void execute(Business business, List<Business> businesses) {
         JSONObject data = business.getData();
-        if (data.containsKey(PayFeeDetailPo.class.getSimpleName())) {
+        JSONArray businessPayFeeDetails = null;
+        if (data == null) {
+            FeeDetailDto feeDetailDto = new FeeDetailDto();
+            feeDetailDto.setbId(business.getbId());
+            List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
+            Assert.listOnlyOne(feeDetailDtos, "未查询到缴费记录");
+            businessPayFeeDetails = JSONArray.parseArray(JSONArray.toJSONString(feeDetailDtos));
+        } else if (data.containsKey(PayFeeDetailPo.class.getSimpleName())) {
             Object bObj = data.get(PayFeeDetailPo.class.getSimpleName());
-            JSONArray businessMachines = null;
+
             if (bObj instanceof JSONObject) {
-                businessMachines = new JSONArray();
-                businessMachines.add(bObj);
+                businessPayFeeDetails = new JSONArray();
+                businessPayFeeDetails.add(bObj);
             } else if (bObj instanceof Map) {
-                businessMachines = new JSONArray();
-                businessMachines.add(JSONObject.parseObject(JSONObject.toJSONString(bObj)));
+                businessPayFeeDetails = new JSONArray();
+                businessPayFeeDetails.add(JSONObject.parseObject(JSONObject.toJSONString(bObj)));
             } else if (bObj instanceof List) {
-                businessMachines = JSONArray.parseArray(JSONObject.toJSONString(bObj));
+                businessPayFeeDetails = JSONArray.parseArray(JSONObject.toJSONString(bObj));
             } else {
-                businessMachines = (JSONArray) bObj;
-            }
-            //JSONObject businessMachine = data.getJSONObject("businessMachine");
-            for (int bMachineIndex = 0; bMachineIndex < businessMachines.size(); bMachineIndex++) {
-                JSONObject businessMachine = businessMachines.getJSONObject(bMachineIndex);
-                doSendPayFeeDetail(business, businessMachine);
+                businessPayFeeDetails = (JSONArray) bObj;
             }
+        } else {
+            return;
+        }
+
+        //JSONObject businessPayFeeDetail = data.getJSONObject("businessPayFeeDetail");
+        for (int bPayFeeDetailIndex = 0; bPayFeeDetailIndex < businessPayFeeDetails.size(); bPayFeeDetailIndex++) {
+            JSONObject businessPayFeeDetail = businessPayFeeDetails.getJSONObject(bPayFeeDetailIndex);
+            doSendPayFeeDetail(business, businessPayFeeDetail);
         }
     }
 
-    private void doSendPayFeeDetail(Business business, JSONObject businessMachine) {
+    private void doSendPayFeeDetail(Business business, JSONObject businessPayFeeDetail) {
         //查询缴费明细
-        PayFeeDetailPo payFeeDetailPo = BeanConvertUtil.covertBean(businessMachine, PayFeeDetailPo.class);
+        PayFeeDetailPo payFeeDetailPo = BeanConvertUtil.covertBean(businessPayFeeDetail, PayFeeDetailPo.class);
         //拿到员工信息
-        UserDto userDto = new UserDto();
-        List<UserDto> users = userInnerServiceSMO.getUsers(userDto);
+//        UserDto userDto = new UserDto();
+//        List<UserDto> users = userInnerServiceSMO.getUsers(userDto);
         //查询小区信息
         CommunityDto communityDto = new CommunityDto();
         communityDto.setCommunityId(payFeeDetailPo.getCommunityId());
         List<CommunityDto> communityDtos = communityInnerServiceSMO.queryCommunitys(communityDto);
+
+        FeeDto feeDto = new FeeDto();
+        feeDto.setFeeId(payFeeDetailPo.getFeeId());
+        feeDto.setCommunityId(payFeeDetailPo.getCommunityId());
+        List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
+
+        Assert.listOnlyOne(feeDtos, "未查询到费用信息");
         //获取费用类型
-        String feeTypeCdName = businessMachine.get("feeTypeCdName").toString();
+        String feeTypeCdName = feeDtos.get(0).getFeeTypeCdName();
         //获取缴费用户楼栋单元房间号
-        String payerObjName = businessMachine.get("payerObjName").toString();
+        String payerObjName = computeFeeSMOImpl.getFeeObjName(feeDtos.get(0));
         //获得用户缴费开始时间
         String startTime = payFeeDetailPo.getStartTime();
         //获取用户缴费到期时间

+ 118 - 0
service-order/src/main/java/com/java110/order/listener/ConfirmTransactionOrderInfoToDataBusListener.java

@@ -0,0 +1,118 @@
+/*
+ * Copyright 2017-2020 吴学文 and java110 team.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.java110.order.listener;
+
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.IOrderDataFlowContext;
+import com.java110.core.event.app.order.Ordered;
+import com.java110.core.event.center.event.InvokeConfirmFinishBusinessSystemEvent;
+import com.java110.core.event.center.listener.DataFlowListener;
+import com.java110.dto.businessDatabus.BusinessDatabusDto;
+import com.java110.dto.order.BusinessDto;
+import com.java110.entity.order.Business;
+import com.java110.intf.job.IDataBusInnerServiceSMO;
+import com.java110.intf.order.IOrderInnerServiceSMO;
+import com.java110.utils.cache.DatabusCache;
+import com.java110.utils.cache.MappingCache;
+import com.java110.utils.constant.DomainContant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 确认 订单完成事件
+ * Created by wuxw on 2018/7/2.
+ */
+
+@Java110Listener(name = "confirmTransactionOrderInfoToDataBusListener")
+public class ConfirmTransactionOrderInfoToDataBusListener implements DataFlowListener<InvokeConfirmFinishBusinessSystemEvent>, Ordered {
+
+    //databus 业务类型
+    private static final String DATABUS_SWITCH = "DATABUS_SWITCH";
+    private static final String DATABUS_SWITCH_ON = "ON"; // 开关打开
+
+    private final static Logger logger = LoggerFactory.getLogger(ConfirmTransactionOrderInfoToDataBusListener.class);
+
+    @Autowired
+    private IDataBusInnerServiceSMO dataBusInnerServiceSMOImpl;
+    @Autowired
+    private IOrderInnerServiceSMO orderInnerServiceSMOImpl;
+
+    @Override
+    public void soService(InvokeConfirmFinishBusinessSystemEvent event) {
+        IOrderDataFlowContext dataFlow = event.getDataFlow();
+        if (dataFlow == null || dataFlow.getBusinessList() == null || dataFlow.getBusinessList().size() == 0) {
+            return;
+        }
+
+        String databusSwitch = MappingCache.getValue(DomainContant.COMMON_DOMAIN, DATABUS_SWITCH);
+
+        if (!DATABUS_SWITCH_ON.equals(databusSwitch)) {
+            return;
+        }
+
+        String oId = dataFlow.getOrders().getoId();
+        BusinessDto businessDto = new BusinessDto();
+        businessDto.setoId(oId);
+        List<BusinessDto> businessDtos = orderInnerServiceSMOImpl.querySameOrderBusiness(businessDto);
+        List<BusinessDatabusDto> databusDtos = DatabusCache.getDatabuss();
+
+        if (!hasTypeCd(databusDtos, businessDtos)) {
+            return;
+        }
+
+        List<Business> businesses = new ArrayList<>();
+        Business business = null;
+        for (BusinessDto tBusinessDto : businessDtos) {
+            business = new Business();
+            business.setbId(tBusinessDto.getbId());
+            business.setBusinessTypeCd(tBusinessDto.getBusinessTypeCd());
+            business.setoId(oId);
+            businesses.add(business);
+        }
+
+
+        try {
+            //同步databus
+            dataBusInnerServiceSMOImpl.exchange(businesses);
+        } catch (Exception e) {
+            logger.error("传输databus 失败", e);
+        }
+    }
+
+    private boolean hasTypeCd(List<BusinessDatabusDto> databusDtos, List<BusinessDto> businessDtos) {
+
+        for (BusinessDatabusDto databusDto : databusDtos) {
+            for (BusinessDto business : businessDtos) {
+                if (databusDto.getBusinessTypeCd().equals(business.getBusinessTypeCd())) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
+    @Override
+    public int getOrder() {
+        return 1;
+    }
+
+
+}

+ 1 - 1
service-order/src/main/java/com/java110/order/smo/impl/OrderProcessServiceSMOImpl.java

@@ -280,7 +280,7 @@ public class OrderProcessServiceSMOImpl extends AbstractOrderServiceSMOImpl impl
 
             notifyInstanceOrder(dataFlow, headers);
             // 业务调用完成
-            DataFlowEventPublishing.invokeFinishBusinessSystem(dataFlow);
+            DataFlowEventPublishing.invokeConfirmFinishBusinessSystem(dataFlow);
         } catch (Exception e) {
             LoggerEngine.error("确认提交订单失败", e);
             //10.0 成功的情况下通知下游系统失败将状态改为NE,人工处理。