java110-bean/src/main/java/com/java110/dto/fee/FeeDetailDto.java
@@ -23,6 +23,7 @@ private String receivedAmount; private String communityId; private String feeId; private String bId; private Date createTime; @@ -146,4 +147,12 @@ public void setStateName(String stateName) { this.stateName = stateName; } public String getbId() { return bId; } public void setbId(String bId) { this.bId = bId; } } java110-core/src/main/java/com/java110/core/event/center/DataFlowEventPublishing.java
@@ -261,6 +261,14 @@ multicastEvent(new InvokeFinishBusinessSystemEvent("",dataFlow)); } /** * 调用 确认订单完成 * @param dataFlow */ public static void invokeConfirmFinishBusinessSystem(IOrderDataFlowContext dataFlow) { multicastEvent(new InvokeConfirmFinishBusinessSystemEvent("",dataFlow)); } /** * 调用业务系统成功后事件 @@ -298,5 +306,7 @@ multicastEvent(new DataResponseEvent("",dataFlow,responseData,headers)); } /***********************************************发布侦听 结束***************************************************************/ } java110-core/src/main/java/com/java110/core/event/center/event/InvokeConfirmFinishBusinessSystemEvent.java
New file @@ -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); } } java110-core/src/main/java/com/java110/core/event/center/event/InvokeFinishBusinessSystemEvent.java
@@ -10,7 +10,7 @@ /** * Constructs a prototypical Event. * *Confirm * @param source The object on which the Event initially occurred. * @param dataFlow * @throws IllegalArgumentException if source is null. java110-interface/src/main/resources/config/center_event.properties
@@ -1,3 +1,4 @@ java110.event.properties.centerServiceListener=\ dealUserIdListener,\ transactionOrderInfoToDataBusListener transactionOrderInfoToDataBusListener,\ confirmTransactionOrderInfoToDataBusListener service-job/src/main/java/com/java110/job/adapt/payment/notice/MachinePaymentNoticeAdapt.java
@@ -4,8 +4,10 @@ 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.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 @@ @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; businessPayFeeDetails = (JSONArray) bObj; } //JSONObject businessMachine = data.getJSONObject("businessMachine"); for (int bMachineIndex = 0; bMachineIndex < businessMachines.size(); bMachineIndex++) { JSONObject businessMachine = businessMachines.getJSONObject(bMachineIndex); doSendPayFeeDetail(business, businessMachine); } } 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(); //获取用户缴费到期时间 service-order/src/main/java/com/java110/order/listener/ConfirmTransactionOrderInfoToDataBusListener.java
New file @@ -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; } } service-order/src/main/java/com/java110/order/smo/impl/OrderProcessServiceSMOImpl.java
@@ -280,7 +280,7 @@ notifyInstanceOrder(dataFlow, headers); // 业务调用完成 DataFlowEventPublishing.invokeFinishBusinessSystem(dataFlow); DataFlowEventPublishing.invokeConfirmFinishBusinessSystem(dataFlow); } catch (Exception e) { LoggerEngine.error("确认提交订单失败", e); //10.0 成功的情况下通知下游系统失败将状态改为NE,人工处理。