java110
2021-09-01 bdc870fab7c09b420079257fb05e3e08a5436ff9
Merge branch 'master' of http://git.homecommunity.cn/supervip/MicroCommunity
2个文件已添加
5个文件已修改
262 ■■■■■ 已修改文件
java110-bean/src/main/java/com/java110/po/activities/ActivitiesPo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-core/src/main/java/com/java110/core/kafka/KafkaConsumerConfig.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-common/src/main/java/com/java110/common/bmo/workflow/impl/QueryWorkFlowFirstStaffBMOImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/adapt/hcGov/HcGovConstant.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/adapt/hcGov/floor/AddFloorToHcGovAdapt.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/kafka/JobServiceKafka.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/po/activities/ActivitiesPo.java
@@ -5,6 +5,7 @@
import java.io.Serializable;
import java.util.Date;
/**
 * @ClassName FloorDto
 * @Description 活动数据层封装
java110-core/src/main/java/com/java110/core/kafka/KafkaConsumerConfig.java
@@ -34,6 +34,8 @@
    private String autoOffsetReset;
    @Value("${kafka.consumer.concurrency}")
    private int concurrency;
    @Value("${kafka.consumer.topic}")
    public String topic;
    @Bean
    public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory() {
        ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<String, String>();
@@ -61,4 +63,11 @@
        return propsMap;
    }
    public String getTopic() {
        return topic;
    }
    public void setTopic(String topic) {
        this.topic = topic;
    }
}
service-common/src/main/java/com/java110/common/bmo/workflow/impl/QueryWorkFlowFirstStaffBMOImpl.java
@@ -359,7 +359,9 @@
            model.setName(oaWorkflowDtos.get(0).getFlowName());
            model.setKey("java110_" + oaWorkflowDtos.get(0).getFlowId());
            repositoryService.saveModel(model);
            repositoryService.addModelEditorSource(model.getId(), workflowModelDto.getJson_xml().getBytes("utf-8"));
            String jsonXml = workflowModelDto.getJson_xml();
            jsonXml = jsonXml.replaceAll("camunda:assignee", "activiti:assignee");
            repositoryService.addModelEditorSource(model.getId(), jsonXml.getBytes("utf-8"));
            InputStream svgStream = new ByteArrayInputStream(workflowModelDto.getSvg_xml().getBytes("utf-8"));
            TranscoderInput input = new TranscoderInput(svgStream);
@@ -410,7 +412,7 @@
        for (Element userTask : userTasks) {
            Attribute assignee = userTask.attribute("assignee");
            if (assignee == null) {
                userTask.addAttribute("activiti:assignee", "${nextUserId}");
                userTask.addAttribute("camunda:assignee", "${nextUserId}");
            }
        }
@@ -427,6 +429,8 @@
        String processIdValue = processId.getValue();
        String newXml = rootElement.asXML();
        newXml = newXml.replaceAll(processIdValue, "java110_" + workflowModelDto.getFlowId());
        workflowModelDto.setJson_xml(newXml);
    }
service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java
@@ -18,8 +18,17 @@
import com.java110.utils.util.Assert;
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.StringUtil;
import org.activiti.bpmn.model.*;
import org.activiti.engine.*;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.EndEvent;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.bpmn.model.FlowNode;
import org.activiti.bpmn.model.SequenceFlow;
import org.activiti.bpmn.model.UserTask;
import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricTaskInstanceQuery;
@@ -306,7 +315,7 @@
            oaWorkflowDataPo = new OaWorkflowDataPo();
            oaWorkflowDataPo.setBusinessKey(reqJson.getString("id"));
            oaWorkflowDataPo.setFlowId(reqJson.getString("flowId"));
            oaWorkflowDataPo.setContext(reqJson.getString("auditMessage"));
            oaWorkflowDataPo.setContext("");
            oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId));
            oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_COMMIT);
            oaWorkflowDataPo.setPreDataId(preDataId);
@@ -321,6 +330,7 @@
        oaWorkflowDataPo = new OaWorkflowDataPo();
        oaWorkflowDataPo.setDataId(oaWorkflowDataDtos.get(0).getDataId());
        oaWorkflowDataPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
        oaWorkflowDataPo.setContext(reqJson.getString("auditMessage"));
        oaWorkflowDataInnerServiceSMOImpl.updateOaWorkflowData(oaWorkflowDataPo);
        //如果为-1 不插入任务
@@ -331,7 +341,7 @@
        oaWorkflowDataPo = new OaWorkflowDataPo();
        oaWorkflowDataPo.setBusinessKey(reqJson.getString("id"));
        oaWorkflowDataPo.setFlowId(reqJson.getString("flowId"));
        oaWorkflowDataPo.setContext(reqJson.getString("auditMessage"));
        oaWorkflowDataPo.setContext("");
        oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId));
        oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_COMMIT);
        oaWorkflowDataPo.setPreDataId(oaWorkflowDataDtos.get(0).getDataId());
@@ -378,12 +388,13 @@
        oaWorkflowDataPo = new OaWorkflowDataPo();
        oaWorkflowDataPo.setDataId(oaWorkflowDataDtos.get(0).getDataId());
        oaWorkflowDataPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
        oaWorkflowDataPo.setContext(reqJson.getString("auditMessage"));
        oaWorkflowDataInnerServiceSMOImpl.updateOaWorkflowData(oaWorkflowDataPo);
        oaWorkflowDataPo = new OaWorkflowDataPo();
        oaWorkflowDataPo.setBusinessKey(reqJson.getString("id"));
        oaWorkflowDataPo.setFlowId(reqJson.getString("flowId"));
        oaWorkflowDataPo.setContext(reqJson.getString("auditMessage"));
        oaWorkflowDataPo.setContext("");
        oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId));
        oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_TRANSFER);
        oaWorkflowDataPo.setPreDataId(oaWorkflowDataDtos.get(0).getDataId());
@@ -448,6 +459,7 @@
        OaWorkflowDataPo oaWorkflowDataPo = new OaWorkflowDataPo();
        oaWorkflowDataPo.setDataId(oaWorkflowDataDtos.get(0).getDataId());
        oaWorkflowDataPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
        oaWorkflowDataPo.setContext(reqJson.getString("auditMessage"));
        oaWorkflowDataInnerServiceSMOImpl.updateOaWorkflowData(oaWorkflowDataPo);
        reqJson.put("nextUserId", preOaWorkflowDataDtos.get(0).getStaffId());
@@ -457,7 +469,7 @@
        oaWorkflowDataPo = new OaWorkflowDataPo();
        oaWorkflowDataPo.setBusinessKey(preOaWorkflowDataDtos.get(0).getBusinessKey());
        oaWorkflowDataPo.setFlowId(preOaWorkflowDataDtos.get(0).getFlowId());
        oaWorkflowDataPo.setContext(reqJson.getString("auditMessage"));
        oaWorkflowDataPo.setContext("");
        oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId));
        oaWorkflowDataPo.setEvent(preOaWorkflowDataDtos.get(0).getEvent());
        oaWorkflowDataPo.setPreDataId(oaWorkflowDataDtos.get(0).getPreDataId());
@@ -550,10 +562,12 @@
        List<SequenceFlow> outgoingFlows = flowNode.getOutgoingFlows();
        JSONObject taskObj = null;
        taskObj = new JSONObject();
        boolean isReturn = false;
        //遍历输出连线
        for (SequenceFlow outgoingFlow : outgoingFlows) {
            //获取输出节点元素
            FlowElement targetFlowElement = outgoingFlow.getTargetFlowElement();
            isReturn = false;
            //排除非用户任务接点
            if (targetFlowElement instanceof UserTask) {
                //判断输出节点的el表达式
@@ -562,16 +576,17 @@
                if (isCondition(outgoingFlow.getConditionExpression(), vars)) {
                    //true 获取输出节点名称
                    taskObj.put("back", outgoingFlow.getTargetFlowElement().getName());
                    isReturn = true;
                }
                vars.put("auditCode", "1400");
                if (isCondition(outgoingFlow.getConditionExpression(), vars)) {
                    //true 获取输出节点名称
                    taskObj.put("backIndex", outgoingFlow.getTargetFlowElement().getName());
                    isReturn = true;
                }
                vars.put("auditCode", "1100");
                if (isCondition(outgoingFlow.getConditionExpression(), vars)) {
                if (!isReturn) {
                    String assignee = ((UserTask) targetFlowElement).getAssignee();
                    if (!StringUtil.isEmpty(assignee) && assignee.indexOf("${") < -1) {
                    if (!StringUtil.isEmpty(assignee) && assignee.indexOf("${") < 0) {
                        taskObj.put("assignee", assignee); // 下一节点处理人
                    }
                }
service-job/src/main/java/com/java110/job/adapt/hcGov/HcGovConstant.java
New file
@@ -0,0 +1,55 @@
/*
 * 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.job.adapt.hcGov;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.factory.AuthenticationFactory;
/**
 * HCGOV 政务常量类
 * 接口协议地址: https://gitee.com/java110/microCommunityInformation/tree/master/info-doc#1%E6%A5%BC%E6%A0%8B%E4%B8%8A%E4%BC%A0
 *
 * @desc add by 吴学文 9:49
 */
public class HcGovConstant {
    public static final int CODE_OK = 200; // 成功
    public static final String GOV_DOMAIN = "DOMAIN_GOV"; // 政务域
    public static final String COMMUNITY_SECURE = "978984641654"; // 小区密钥
    public static final String FLOOR_TYPE = "FLOOR_TYPE"; // 楼栋类型
    public static final String GOV_TOPIC = "hcGov"; // 楼栋类型
    //政务小区编码
    public static final String EXT_COMMUNITY_ID = "9329000004";
    //添加楼栋
    public static final String ADD_FLOOR_ACTION = "ADD_FLOOR";
    //修改楼栋
    public static final String EDIT_FLOOR_ACTION = "EDIT_FLOOR";
    //删除楼栋
    public static final String DEL_FLOOR_ACTION = "DEL_FLOOR";
    public static void generatorProducerSign(JSONObject header, JSONObject body, String code) {
        String newSign = AuthenticationFactory.md5(header.getString("tranId") + header.getString("reqTime") + body.toJSONString() + code).toLowerCase();
        header.put("sign",newSign);
    }
}
service-job/src/main/java/com/java110/job/adapt/hcGov/floor/AddFloorToHcGovAdapt.java
New file
@@ -0,0 +1,140 @@
/*
 * 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.job.adapt.hcGov.floor;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.kafka.KafkaConsumerConfig;
import com.java110.dto.UnitDto;
import com.java110.dto.community.CommunityAttrDto;
import com.java110.dto.community.CommunityDto;
import com.java110.entity.order.Business;
import com.java110.intf.community.ICommunityInnerServiceSMO;
import com.java110.intf.community.IUnitInnerServiceSMO;
import com.java110.job.adapt.DatabusAdaptImpl;
import com.java110.job.adapt.hcGov.HcGovConstant;
import com.java110.po.floor.FloorPo;
import com.java110.utils.cache.MappingCache;
import com.java110.utils.kafka.KafkaFactory;
import com.java110.utils.util.Assert;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.PayUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * 新增楼栋同步HC政务接口
 * <p>
 * 接口协议地址: https://gitee.com/java110/microCommunityInformation/tree/master/info-doc#1%E6%A5%BC%E6%A0%8B%E4%B8%8A%E4%BC%A0
 *
 * @desc add by 吴学文 16:20
 */
@Component(value = "addFloorToHcGovAdapt")
public class AddFloorToHcGovAdapt extends DatabusAdaptImpl {
    @Autowired
    private ICommunityInnerServiceSMO communityInnerServiceSMOImpl;
    @Autowired
    private IUnitInnerServiceSMO unitInnerServiceSMOImpl;
    /**
     *
     * @param business   当前处理业务
     * @param businesses 所有业务信息
     */
    @Override
    public void execute(Business business, List<Business> businesses) {
        JSONObject data = business.getData();
        if (data.containsKey(FloorPo.class.getSimpleName())) {
            Object bObj = data.get(FloorPo.class.getSimpleName());
            JSONArray businessOwnerCars = null;
            if (bObj instanceof JSONObject) {
                businessOwnerCars = new JSONArray();
                businessOwnerCars.add(bObj);
            } else if (bObj instanceof List) {
                businessOwnerCars = JSONArray.parseArray(JSONObject.toJSONString(bObj));
            } else {
                businessOwnerCars = (JSONArray) bObj;
            }
            //JSONObject businessOwnerCar = data.getJSONObject("businessOwnerCar");
            for (int bOwnerCarIndex = 0; bOwnerCarIndex < businessOwnerCars.size(); bOwnerCarIndex++) {
                JSONObject businessOwnerCar = businessOwnerCars.getJSONObject(bOwnerCarIndex);
                doAddFloor(business, businessOwnerCar);
            }
        }
    }
    private void doAddFloor(Business business, JSONObject businessFloor) {
        FloorPo floorPo = BeanConvertUtil.covertBean(businessFloor, FloorPo.class);
        CommunityDto communityDto = new CommunityDto();
        communityDto.setCommunityId(floorPo.getCommunityId());
        List<CommunityDto> communityDtos = communityInnerServiceSMOImpl.queryCommunitys(communityDto);
        Assert.listOnlyOne(communityDtos, "未包含小区信息");
        CommunityDto tmpCommunityDto = communityDtos.get(0);
        String extCommunityId = "";
        for (CommunityAttrDto communityAttrDto : tmpCommunityDto.getCommunityAttrDtos()) {
            if (HcGovConstant.EXT_COMMUNITY_ID.equals(communityAttrDto.getSpecCd())) {
                extCommunityId = communityAttrDto.getValue();
            }
        }
        UnitDto unitDto = new UnitDto();
        unitDto.setFloorId(floorPo.getFloorId());
        unitDto.setCommunityId(floorPo.getCommunityId());
        List<UnitDto> unitDtos = unitInnerServiceSMOImpl.queryUnits(unitDto);
        String layerCount = "0";
        String floorUse = "0";
        if(unitDtos != null && unitDtos.size() > 0){
            layerCount = unitDtos.get(0).getLayerCount();
            floorUse = unitDtos.size()+"";
        }
        JSONObject body = new JSONObject();
        body.put("floorNum", floorPo.getFloorNum());
        body.put("floorName", floorPo.getName());
        body.put("floorType", MappingCache.getValue(HcGovConstant.GOV_DOMAIN,HcGovConstant.FLOOR_TYPE));
        body.put("floorArea", floorPo.getFloorArea());
        body.put("layerCount", layerCount);
        body.put("unitCount", floorUse);
        body.put("floorUse", tmpCommunityDto.getName()+"_住宅");
        body.put("personName", "HC小区管理系统");
        body.put("personLink", "18909711234");
        JSONObject heard = new JSONObject();
        heard.put("serviceCode",HcGovConstant.ADD_FLOOR_ACTION);
        heard.put("extCommunityId",extCommunityId);
        heard.put("tranId", PayUtil.makeUUID(15));
        heard.put("reqTime",DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
        HcGovConstant.generatorProducerSign(heard,body,HcGovConstant.COMMUNITY_SECURE);
        JSONObject kafkaData = new JSONObject();
        kafkaData.put("header",heard);
        kafkaData.put("body",body);
        try {
            KafkaFactory.sendKafkaMessage(HcGovConstant.GOV_TOPIC,kafkaData.toJSONString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
service-job/src/main/java/com/java110/job/kafka/JobServiceKafka.java
@@ -11,6 +11,7 @@
import com.java110.utils.exception.InitConfigDataException;
import com.java110.utils.exception.InitDataFlowContextException;
import com.java110.utils.kafka.KafkaFactory;
import com.java110.utils.util.Assert;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -43,7 +44,7 @@
            //预校验
            preValiateOrderInfo(orderInfo);
            businessServiceDataFlow = this.writeDataToDataFlowContext(orderInfo, headers);
            responseJson = jobServiceSMOImpl.service(businessServiceDataFlow);
            //responseJson = jobServiceSMOImpl.service(businessServiceDataFlow);
        } catch (InitDataFlowContextException e) {
            logger.error("请求报文错误,初始化 BusinessServiceDataFlow失败" + orderInfo, e);
            responseJson = DataTransactionFactory.createNoBusinessTypeBusinessResponseJson(orderInfo, ResponseConstant.RESULT_PARAM_ERROR, e.getMessage(), null);
@@ -77,9 +78,14 @@
     * @param orderInfo
     */
    private void preValiateOrderInfo(String orderInfo) {
       /* if(JSONObject.parseObject(orderInfo).getJSONObject("orders").containsKey("dataFlowId")){
            throw new BusinessException(ResponseConstant.RESULT_CODE_ERROR,"报文中不能存在dataFlowId节点");
        }*/
        JSONObject reqJson = JSONObject.parseObject(orderInfo);
        Assert.hasKeyAndValue(reqJson, "header", "请求报文中未包含header");
        Assert.hasKeyAndValue(reqJson, "body", "请求报文中未包含body");
        JSONObject header = reqJson.getJSONObject("header");
        Assert.hasKeyAndValue(header, "serviceCode", "请求报文中未包含serviceCode");
        Assert.hasKeyAndValue(header, "sign", "请求报文中未包含sign");
        Assert.hasKeyAndValue(header, "resTime", "请求报文中未包含reqTime");
        Assert.hasKeyAndValue(header, "code", "请求报文中未包含reqTime");
        Assert.hasKeyAndValue(header, "msg", "请求报文中未包含reqTime");
    }
}