Преглед на файлове

Merge branch 'master' of http://git.homecommunity.cn/supervip/MicroCommunity

java110 преди 4 години
родител
ревизия
bdc870fab7

+ 1 - 0
java110-bean/src/main/java/com/java110/po/activities/ActivitiesPo.java

@@ -5,6 +5,7 @@ import com.java110.dto.PageDto;
 import java.io.Serializable;
 import java.util.Date;
 
+
 /**
  * @ClassName FloorDto
  * @Description 活动数据层封装

+ 9 - 0
java110-core/src/main/java/com/java110/core/kafka/KafkaConsumerConfig.java

@@ -34,6 +34,8 @@ public class KafkaConsumerConfig {
     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 @@ public class KafkaConsumerConfig {
         return propsMap;
     }
 
+    public String getTopic() {
+        return topic;
+    }
+
+    public void setTopic(String topic) {
+        this.topic = topic;
+    }
 }

+ 6 - 2
service-common/src/main/java/com/java110/common/bmo/workflow/impl/QueryWorkFlowFirstStaffBMOImpl.java

@@ -359,7 +359,9 @@ public class QueryWorkFlowFirstStaffBMOImpl implements IQueryWorkFlowFirstStaffB
             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 @@ public class QueryWorkFlowFirstStaffBMOImpl implements IQueryWorkFlowFirstStaffB
         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 @@ public class QueryWorkFlowFirstStaffBMOImpl implements IQueryWorkFlowFirstStaffB
         String processIdValue = processId.getValue();
         String newXml = rootElement.asXML();
         newXml = newXml.replaceAll(processIdValue, "java110_" + workflowModelDto.getFlowId());
+
+
         workflowModelDto.setJson_xml(newXml);
     }
 

+ 24 - 9
service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java

@@ -18,8 +18,17 @@ import com.java110.po.oaWorkflowData.OaWorkflowDataPo;
 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 @@ public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements
             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 @@ public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements
         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 @@ public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements
         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 @@ public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements
         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 @@ public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements
         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 @@ public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements
         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 @@ public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements
         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 @@ public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements
                 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); // 下一节点处理人
                     }
                 }

+ 55 - 0
service-job/src/main/java/com/java110/job/adapt/hcGov/HcGovConstant.java

@@ -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);
+    }
+
+}

+ 140 - 0
service-job/src/main/java/com/java110/job/adapt/hcGov/floor/AddFloorToHcGovAdapt.java

@@ -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();
+        }
+    }
+
+}

+ 11 - 5
service-job/src/main/java/com/java110/job/kafka/JobServiceKafka.java

@@ -11,6 +11,7 @@ import com.java110.utils.constant.StatusConstant;
 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 @@ public class JobServiceKafka extends BaseController {
             //预校验
             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 @@ public class JobServiceKafka extends BaseController {
      * @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");
     }
-
 }