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"); } }