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

和厦门 公安天创系统门禁记录上报 代码对接完成

java110 лет назад: 4
Родитель
Сommit
177052a454

+ 36 - 39
java110-core/src/main/java/com/java110/core/factory/AuthenticationFactory.java

@@ -22,7 +22,6 @@ import com.java110.utils.exception.NoAuthorityException;
 import com.java110.utils.util.Base64Convert;
 import com.java110.utils.util.StringUtil;
 import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.logging.log4j.util.Base64Util;
 
 import javax.crypto.Cipher;
 import javax.crypto.SecretKeyFactory;
@@ -32,15 +31,7 @@ import javax.crypto.spec.SecretKeySpec;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.security.InvalidParameterException;
-import java.security.Key;
-import java.security.KeyFactory;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.MessageDigest;
-import java.security.PrivateKey;
-import java.security.PublicKey;
+import java.security.*;
 import java.security.spec.PKCS8EncodedKeySpec;
 import java.security.spec.X509EncodedKeySpec;
 import java.util.Base64;
@@ -73,8 +64,9 @@ public class AuthenticationFactory {
     private static final String CHARSET = "utf-8";
 
 
-        // 加密
-        public static String AesEncrypt(String sSrc, String sKey) throws Exception {
+    // 加密
+    public static String AesEncrypt(String sSrc, String sKey) {
+        try {
             if (sKey == null) {
                 System.out.print("Key为空null");
                 return null;
@@ -91,39 +83,43 @@ public class AuthenticationFactory {
             byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
 
             return Base64Convert.byteToBase64(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
+        } catch (Exception e) {
+            e.printStackTrace();
         }
+        return "";
+    }
 
-        // 解密
-        public static String AesDecrypt(String sSrc, String sKey) throws Exception {
+    // 解密
+    public static String AesDecrypt(String sSrc, String sKey) {
+        try {
+            // 判断Key是否正确
+            if (sKey == null) {
+                System.out.print("Key为空null");
+                return null;
+            }
+            // 判断Key是否为16位
+            if (sKey.length() != 16) {
+                System.out.print("Key长度不是16位");
+                return null;
+            }
+            byte[] raw = sKey.getBytes("utf-8");
+            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
+            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
+            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
+            byte[] encrypted1 = Base64Convert.base64ToByte(sSrc);//先用base64解密
             try {
-                // 判断Key是否正确
-                if (sKey == null) {
-                    System.out.print("Key为空null");
-                    return null;
-                }
-                // 判断Key是否为16位
-                if (sKey.length() != 16) {
-                    System.out.print("Key长度不是16位");
-                    return null;
-                }
-                byte[] raw = sKey.getBytes("utf-8");
-                SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
-                Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
-                cipher.init(Cipher.DECRYPT_MODE, skeySpec);
-                byte[] encrypted1 = Base64Convert.base64ToByte(sSrc);//先用base64解密
-                try {
-                    byte[] original = cipher.doFinal(encrypted1);
-                    String originalString = new String(original,"utf-8");
-                    return originalString;
-                } catch (Exception e) {
-                    System.out.println(e.toString());
-                    return null;
-                }
-            } catch (Exception ex) {
-                System.out.println(ex.toString());
+                byte[] original = cipher.doFinal(encrypted1);
+                String originalString = new String(original, "utf-8");
+                return originalString;
+            } catch (Exception e) {
+                System.out.println(e.toString());
                 return null;
             }
+        } catch (Exception ex) {
+            System.out.println(ex.toString());
+            return null;
         }
+    }
 
 
     /**
@@ -463,6 +459,7 @@ public class AuthenticationFactory {
         String newSign = md5(reportDataHeaderDto.getTranId() + reportDataHeaderDto.getReqTime() + reportDataDto.getReportDataBodyDto().toJSONString() + code).toLowerCase();
         reportDataHeaderDto.setSign(newSign);
     }
+
     /**
      * 加载公钥
      *

+ 5 - 0
java110-db/src/main/resources/mapper/community/CommunityServiceDaoImplMapper.xml

@@ -12,6 +12,11 @@
         #{nearbyLandmarks},#{mapX},#{mapY},#{month},#{state},#{operate},#{communityArea},#{tel})
     </insert>
 
+    <!-- 保存小区属性信息  add by wuxw 2018-07-03 -->
+    <insert id="saveCommunityAttr" parameterType="Map">
+        insert into s_community_attr(b_id,attr_id,community_id,spec_cd,value,month,status_cd)
+        values(#{bId},#{attrId},#{communityId},#{specCd},#{value},#{month},#{statusCd})
+    </insert>
 
 
     <!-- 保存小区属性信息  add by wuxw 2018-07-03 -->

+ 11 - 0
java110-interface/src/main/java/com/java110/intf/community/ICommunityInnerServiceSMO.java

@@ -4,6 +4,7 @@ import com.java110.config.feign.FeignConfiguration;
 import com.java110.dto.CommunityMemberDto;
 import com.java110.dto.community.CommunityAttrDto;
 import com.java110.dto.community.CommunityDto;
+import com.java110.po.community.CommunityAttrPo;
 import com.java110.po.community.CommunityPo;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -88,4 +89,14 @@ public interface ICommunityInnerServiceSMO {
      */
     @RequestMapping(value = "/getCommunityAttrsCount", method = RequestMethod.POST)
     int getCommunityAttrsCount(@RequestBody CommunityAttrDto communityAttrDto);
+
+
+    /**
+     * 查询<p>小区楼</p>总记录数
+     *
+     * @param communityAttrPo 数据对象分享
+     * @return 小区下的小区楼记录数
+     */
+    @RequestMapping(value = "/saveCommunityAttr", method = RequestMethod.POST)
+    int saveCommunityAttr(@RequestBody CommunityAttrPo communityAttrPo);
 }

+ 7 - 0
service-community/src/main/java/com/java110/community/dao/ICommunityServiceDao.java

@@ -267,4 +267,11 @@ public interface ICommunityServiceDao {
     List<Map> getStoreCommunitys(Map beanCovertMap);
 
 
+    /**
+     * 添加属性
+     *
+     * @param info
+     * @return
+     */
+    int saveCommunityAttr(Map info);
 }

+ 9 - 0
service-community/src/main/java/com/java110/community/dao/impl/CommunityServiceDaoImpl.java

@@ -489,5 +489,14 @@ public class CommunityServiceDaoImpl extends BaseServiceDao implements ICommunit
         return businessCommunityInfos;
     }
 
+    @Override
+    public int saveCommunityAttr(Map info) {
+        logger.debug("小区成员加入Instance 入参 info : {}", info);
+
+        int saveFlag = sqlSessionTemplate.insert("communityServiceDaoImpl.saveCommunityAttr", info);
+
+        return saveFlag;
+    }
+
 
 }

+ 11 - 0
service-community/src/main/java/com/java110/community/smo/impl/CommunityInnerServiceSMOImpl.java

@@ -8,6 +8,7 @@ import com.java110.dto.PageDto;
 import com.java110.dto.community.CommunityAttrDto;
 import com.java110.dto.community.CommunityDto;
 import com.java110.intf.community.ICommunityInnerServiceSMO;
+import com.java110.po.community.CommunityAttrPo;
 import com.java110.po.community.CommunityPo;
 import com.java110.utils.util.BeanConvertUtil;
 import org.slf4j.Logger;
@@ -101,6 +102,16 @@ public class CommunityInnerServiceSMOImpl extends BaseServiceSMO implements ICom
         return communityServiceDaoImpl.getCommunityAttrsCount(BeanConvertUtil.beanCovertMap(communityAttrDto));
     }
 
+    /**
+     * 保存小区属性
+     * @param communityAttrPo 数据对象分享
+     * @return
+     */
+    @Override
+    public int saveCommunityAttr(CommunityAttrPo communityAttrPo) {
+        return communityServiceDaoImpl.saveCommunityAttr(BeanConvertUtil.beanCovertMap(communityAttrPo));
+    }
+
     @Override
     public List<CommunityDto> queryCommunitys(@RequestBody CommunityDto communityDto) {
 

+ 1 - 1
service-job/src/main/java/com/java110/job/adapt/hcToTianchuang/GetTianChuangToken.java

@@ -50,7 +50,7 @@ public class GetTianChuangToken {
      *
      * @return
      */
-    private HttpHeaders getHeaders(String serviceId,String data) {
+    public static HttpHeaders getHeaders(String serviceId,String data) {
         HttpHeaders httpHeaders = new HttpHeaders();
         httpHeaders.add("appId", TianChuangConstant.getAppId());
         httpHeaders.add("token", get(data));

+ 329 - 35
service-job/src/main/java/com/java110/job/adapt/hcToTianchuang/PersonToTianchuangAdapt.java

@@ -17,34 +17,50 @@ package com.java110.job.adapt.hcToTianchuang;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.java110.dto.UnitDto;
+import com.java110.core.client.RestTemplate;
+import com.java110.core.factory.AuthenticationFactory;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.RoomAttrDto;
+import com.java110.dto.RoomDto;
 import com.java110.dto.businessDatabus.CustomBusinessDatabusDto;
 import com.java110.dto.community.CommunityAttrDto;
 import com.java110.dto.community.CommunityDto;
-import com.java110.dto.communityLocationAttr.CommunityLocationAttrDto;
 import com.java110.dto.file.FileRelDto;
+import com.java110.dto.machine.MachineAttrDto;
 import com.java110.dto.machine.MachineDto;
+import com.java110.dto.owner.OwnerAttrDto;
+import com.java110.dto.owner.OwnerDto;
+import com.java110.dto.owner.OwnerRoomRelDto;
 import com.java110.entity.order.Business;
 import com.java110.intf.common.IFileRelInnerServiceSMO;
+import com.java110.intf.common.IMachineAttrInnerServiceSMO;
 import com.java110.intf.common.IMachineInnerServiceSMO;
 import com.java110.intf.community.ICommunityInnerServiceSMO;
 import com.java110.intf.community.ICommunityLocationAttrInnerServiceSMO;
-import com.java110.intf.community.IUnitInnerServiceSMO;
+import com.java110.intf.community.IRoomInnerServiceSMO;
+import com.java110.intf.user.IOwnerAttrInnerServiceSMO;
+import com.java110.intf.user.IOwnerInnerServiceSMO;
+import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO;
 import com.java110.job.adapt.DatabusAdaptImpl;
-import com.java110.job.adapt.hcGov.HcGovConstant;
 import com.java110.job.adapt.hcGov.asyn.BaseHcGovSendAsyn;
-import com.java110.po.floor.FloorPo;
+import com.java110.po.community.CommunityAttrPo;
+import com.java110.po.machine.MachineAttrPo;
 import com.java110.po.machine.MachineRecordPo;
+import com.java110.po.owner.OwnerAttrPo;
 import com.java110.utils.cache.MappingCache;
-import com.java110.utils.util.Assert;
-import com.java110.utils.util.BeanConvertUtil;
-import com.java110.utils.util.StringUtil;
+import com.java110.utils.util.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
 
 /**
+ * databus 监听业务类型 990000060001
  * 开门记录信息 同步天窗接口
  * <p>
  * 接口协议地址: https://gitee.com/java110/microCommunityInformation/tree/master/info-doc#1%E6%A5%BC%E6%A0%8B%E4%B8%8A%E4%BC%A0
@@ -54,20 +70,41 @@ import java.util.List;
 @Component(value = "personToTianchuangAdapt")
 public class PersonToTianchuangAdapt extends DatabusAdaptImpl {
 
+    private static Logger logger = LoggerFactory.getLogger(PersonToTianchuangAdapt.class);
     @Autowired
     private ICommunityInnerServiceSMO communityInnerServiceSMOImpl;
 
+
     @Autowired
     private BaseHcGovSendAsyn baseHcGovSendAsynImpl;
 
     @Autowired
     private IMachineInnerServiceSMO machineInnerServiceSMOImpl;
 
+    @Autowired
+    private IMachineAttrInnerServiceSMO machineAttrInnerServiceSMOImpl;
+
     @Autowired
     private ICommunityLocationAttrInnerServiceSMO communityLocationAttrInnerServiceSMOImpl;
 
     @Autowired
     private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerInnerServiceSMO ownerInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerAttrInnerServiceSMO ownerAttrInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerRoomRelInnerServiceSMO ownerRoomRelInnerServiceSMOImpl;
+
+    @Autowired
+    private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
+
+    @Autowired
+    private RestTemplate outRestTemplate;
+
     /**
      * @param customBusinessDatabusDto 当前处理业务
      */
@@ -91,29 +128,78 @@ public class PersonToTianchuangAdapt extends DatabusAdaptImpl {
         String machineRecordId = machineRecordPo.getMachineRecordId();
 
         for (CommunityAttrDto communityAttrDto : tmpCommunityDto.getCommunityAttrDtos()) {
-            if (HcGovConstant.EXT_COMMUNITY_ID.equals(communityAttrDto.getSpecCd())) {
+            if (TianChuangConstant.EXT_TC_COMMUNITY_ID.equals(communityAttrDto.getSpecCd())) {
                 extCommunityId = communityAttrDto.getValue();
             }
         }
+        if (StringUtil.isEmpty(extCommunityId)) {
+            //传送小区信息
+            extCommunityId = sendCommunity(communityDtos.get(0));
+        }
 
-        //查询设备对应的位置
+        //判断设备是否 传天创
         MachineDto machineDto = new MachineDto();
         machineDto.setCommunityId(communityId);
         machineDto.setMachineId(machineRecordPo.getMachineId());
         List<MachineDto> machineDtos = machineInnerServiceSMOImpl.queryMachines(machineDto);
-
         Assert.listOnlyOne(machineDtos, "不包含 设备信息");
+        String extMachineId = "";
+        for (MachineAttrDto machineAttrDto : machineDtos.get(0).getMachineAttrs()) {
+            if (TianChuangConstant.EXT_TC_MACHINE_ID.equals(machineAttrDto.getSpecCd())) {
+                extMachineId = machineAttrDto.getValue();
+            }
+        }
+
+        if (StringUtil.isEmpty(extMachineId)) {
+            //传送门禁信息
+            extMachineId = sendMachine(machineDtos.get(0), extCommunityId, tmpCommunityDto);
+        }
+
+        //判断住户是否传天创
+        String idCard = machineRecordPo.getIdCard();
 
-        String locationId = machineDtos.get(0).getLocationTypeCd();
+        //身份证为空时 ,门禁记录没法传 所以就不传了
+        if (StringUtil.isEmpty(idCard)) {
+            return;
+        }
+        OwnerDto ownerDto = new OwnerDto();
+        ownerDto.setIdCard(idCard);
+        List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwnerMembers(ownerDto);
+
+        if (ownerDtos == null || ownerDtos.size() < 1) {
+            throw new IllegalArgumentException("业主不存在");
+        }
 
-        CommunityLocationAttrDto communityLocationAttrDto = new CommunityLocationAttrDto();
-        communityLocationAttrDto.setCommunityId(machineDtos.get(0).getCommunityId());
-        communityLocationAttrDto.setLocationId(locationId);
-        communityLocationAttrDto.setSpecCd(HcGovConstant.EXT_COMMUNITY_ID);
-        List<CommunityLocationAttrDto> communityLocationAttrDtos
-                = communityLocationAttrInnerServiceSMOImpl.queryCommunityLocationAttrs(communityLocationAttrDto);
+        String extMemberId = "";
+        for (OwnerAttrDto ownerAttrDto : ownerDtos.get(0).getOwnerAttrDtos()) {
+            if (TianChuangConstant.EXT_TC_OWNER_ID.equals(ownerAttrDto.getSpecCd())) {
+                extMemberId = ownerAttrDto.getValue();
+            }
+        }
 
-        Assert.listOnlyOne(communityLocationAttrDtos, "未找到 位置外部ID");
+        if (StringUtil.isEmpty(extMemberId)) {
+            //传送门禁信息
+            extMemberId = sendOwner(ownerDtos.get(0), extCommunityId, tmpCommunityDto);
+        }
+
+        // 送人员进出记录
+        sendPersonInout(machineRecordPo, extCommunityId, machineDtos.get(0), ownerDtos.get(0));
+    }
+
+    private void sendPersonInout(MachineRecordPo machineRecordPo, String extCommunityId, MachineDto machineDto, OwnerDto ownerDto) {
+        JSONObject data = new JSONObject();
+        JSONArray datas = new JSONArray();
+        JSONObject dataObj = new JSONObject();
+        dataObj.put("lv_ssxqbm", extCommunityId);
+        dataObj.put("lv_gmsfhm", machineRecordPo.getIdCard());
+        dataObj.put("lv_crlb", "3306".equals(machineDto.getDirection()) ? "1" : "2");
+        dataObj.put("lv_zpsj", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_DEFAULT));
+        dataObj.put("lv_sbxt", "小区管理系统");
+        dataObj.put("lv_mjxtwybm", machineDto.getMachineId());
+        dataObj.put("lv_ry_id", ownerDto.getMemberId());
+        dataObj.put("lv_ffms", "1");
+        dataObj.put("lv_kmfs", "1");
+        dataObj.put("lv_procmode", "PMINSERT");
 
         FileRelDto fileRelDto = new FileRelDto();
         fileRelDto.setRelTypeCd("60000");
@@ -126,25 +212,233 @@ public class PersonToTianchuangAdapt extends DatabusAdaptImpl {
             url = imgUrl + fileRelDtos.get(0).getFileRealName();
         }
 
-        JSONObject body = new JSONObject();
-        body.put("extLocationId", communityLocationAttrDtos.get(0).getValue());
-        body.put("name", machineRecordPo.getName());
-        body.put("openTypeCd", machineRecordPo.getOpenTypeCd());
-        body.put("tel", machineRecordPo.getTel());
-        body.put("idCard", machineRecordPo.getIdCard());
-        body.put("recordTypeCd", machineRecordPo.getRecordTypeCd());
-        body.put("faceUrl", url);
-        String state = "F";
-        if (StringUtil.isNumber(machineRecordPo.getSimilar())) {
-            double similar = Double.parseDouble(machineRecordPo.getSimilar());
-            if (similar > 0.5) {
-                state = "C";
+        dataObj.put("lv_zpzpa", ImageUtils.getBase64ByImgUrl(url));
+
+        datas.add(dataObj);
+
+        data.put("datas", datas);
+
+        JSONArray pages = new JSONArray();
+        JSONObject page = new JSONObject();
+        page.put("psize", "100");
+        page.put("tcount", "1");
+        page.put("pno", "1");
+        page.put("tsize", "");
+        pages.add(page);
+
+        data.put("pages", pages);
+
+        String dataStr = AuthenticationFactory.AesDecrypt(data.toJSONString(), TianChuangConstant.getAppSecret());
+
+        HttpEntity httpEntity = new HttpEntity(dataStr, GetTianChuangToken.getHeaders(TianChuangConstant.SERVICE_ID_PERSON_INOUT, dataStr));
+        ResponseEntity<String> responseEntity = outRestTemplate.exchange(TianChuangConstant.getUrl(), HttpMethod.POST, httpEntity, String.class);
+        logger.debug("调用HC IOT信息:" + responseEntity);
+        JSONObject paramOut = JSONObject.parseObject(AuthenticationFactory.AesEncrypt(responseEntity.getBody(), TianChuangConstant.getAppSecret()));
+
+        String code = paramOut.getJSONObject("sta").getString("cod");
+        if (!"0000".equals(code)) {
+            throw new IllegalArgumentException("同步小区失败," + paramOut.toJSONString());
+        }
+    }
+
+    /**
+     * 住户信息上报
+     *
+     * @param ownerDto
+     * @param tmpCommunityDto
+     * @return
+     */
+    private String sendOwner(OwnerDto ownerDto, String extCommunityId, CommunityDto tmpCommunityDto) {
+        //查询业主房屋
+        OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
+        ownerRoomRelDto.setOwnerId(ownerDto.getOwnerId());
+        List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto);
+        //
+        if (ownerRoomRelDtos == null || ownerRoomRelDtos.size() < 1) {
+            throw new IllegalArgumentException("业主不存在房屋无法同步,因为没有地址二维码编码");
+        }
+        RoomDto roomDto = new RoomDto();
+        roomDto.setCommunityId(ownerDto.getCommunityId());
+        roomDto.setRoomId(ownerRoomRelDtos.get(0).getRoomId());
+        List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
+
+        Assert.listOnlyOne(roomDtos, "房屋不存在");
+
+        JSONObject data = new JSONObject();
+        JSONArray datas = new JSONArray();
+        JSONObject dataObj = new JSONObject();
+        dataObj.put("lvgmsfhm", ownerDto.getIdCard());
+        dataObj.put("lvxm", ownerDto.getName());
+        dataObj.put("lvlxdh", ownerDto.getLink());
+        dataObj.put("lvdjsj", ownerDto.getCreateTime());
+        dataObj.put("lvrybm", ownerDto.getMemberId());
+        String qrCodeAddress = "";
+        for (RoomAttrDto roomAttrDto : roomDtos.get(0).getRoomAttrDto()) {
+            if (TianChuangConstant.EXT_TC_ROOM_QRCODE.equals(roomAttrDto.getSpecCd())) {
+                qrCodeAddress = roomAttrDto.getValue();
+            }
+        }
+        dataObj.put("lvdzbm", qrCodeAddress);
+        dataObj.put("lvzhlx", OwnerDto.OWNER_TYPE_CD_OWNER.equals(ownerDto.getOwnerTypeCd()) ? "10" : "11");
+        dataObj.put("lvssxqbm", extCommunityId);
+        dataObj.put("lv_procmode", "PMINSERT");
+
+        datas.add(dataObj);
+
+        data.put("datas", datas);
+
+        JSONArray pages = new JSONArray();
+        JSONObject page = new JSONObject();
+        page.put("psize", "100");
+        page.put("tcount", "1");
+        page.put("pno", "1");
+        page.put("tsize", "");
+        pages.add(page);
+
+        data.put("pages", pages);
+
+        String dataStr = AuthenticationFactory.AesDecrypt(data.toJSONString(), TianChuangConstant.getAppSecret());
+
+        HttpEntity httpEntity = new HttpEntity(dataStr, GetTianChuangToken.getHeaders(TianChuangConstant.SERVICE_ID_OWNER, dataStr));
+        ResponseEntity<String> responseEntity = outRestTemplate.exchange(TianChuangConstant.getUrl(), HttpMethod.POST, httpEntity, String.class);
+        logger.debug("调用HC IOT信息:" + responseEntity);
+        JSONObject paramOut = JSONObject.parseObject(AuthenticationFactory.AesEncrypt(responseEntity.getBody(), TianChuangConstant.getAppSecret()));
+
+        String code = paramOut.getJSONObject("sta").getString("cod");
+        if (!"0000".equals(code)) {
+            throw new IllegalArgumentException("同步小区失败," + paramOut.toJSONString());
+        }
+        String extTcOwnerId = paramOut.getJSONArray("data").getJSONObject(0).getString("result");
+        OwnerAttrPo ownerAttrPo = new OwnerAttrPo();
+        ownerAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
+        ownerAttrPo.setCommunityId(ownerDto.getCommunityId());
+        ownerAttrPo.setMemberId(ownerDto.getMemberId());
+        ownerAttrPo.setSpecCd(TianChuangConstant.EXT_TC_OWNER_ID);
+        ownerAttrPo.setValue(extTcOwnerId);
+        ownerAttrInnerServiceSMOImpl.saveOwnerAttr(ownerAttrPo);
+
+        return extTcOwnerId;
+    }
+
+    /**
+     * 门禁信息上报
+     *
+     * @param machineDto
+     * @return
+     */
+    private String sendMachine(MachineDto machineDto, String extCommunityId, CommunityDto communityDto) {
+        JSONObject data = new JSONObject();
+        JSONArray datas = new JSONArray();
+        JSONObject dataObj = new JSONObject();
+        dataObj.put("lv_mjmc", machineDto.getMachineName());
+        dataObj.put("lv_wzms", machineDto.getLocationObjName());
+        dataObj.put("lv_sfysxt", "1");
+        dataObj.put("lv_ssxqbm", extCommunityId);
+        dataObj.put("lv_mjxtwybm", machineDto.getMachineId());
+        String qrCodeAddress = "";
+        for (CommunityAttrDto communityAttrDto : communityDto.getCommunityAttrDtos()) {
+            if (TianChuangConstant.EXT_TC_COMMUNITY_QRCODE.equals(communityAttrDto.getSpecCd())) {
+                qrCodeAddress = communityAttrDto.getValue();
+            }
+        }
+        dataObj.put("lv_dzewmbm", qrCodeAddress);
+        dataObj.put("lv_sbxt", "小区管理系统");
+        dataObj.put("lv_procmode", "PMINSERT");
+
+        datas.add(dataObj);
+
+        data.put("datas", datas);
+
+        JSONArray pages = new JSONArray();
+        JSONObject page = new JSONObject();
+        page.put("psize", "100");
+        page.put("tcount", "1");
+        page.put("pno", "1");
+        page.put("tsize", "");
+        pages.add(page);
+
+        data.put("pages", pages);
+
+        String dataStr = AuthenticationFactory.AesDecrypt(data.toJSONString(), TianChuangConstant.getAppSecret());
+
+        HttpEntity httpEntity = new HttpEntity(dataStr, GetTianChuangToken.getHeaders(TianChuangConstant.SERVICE_ID_MACHINE, dataStr));
+        ResponseEntity<String> responseEntity = outRestTemplate.exchange(TianChuangConstant.getUrl(), HttpMethod.POST, httpEntity, String.class);
+        logger.debug("调用HC IOT信息:" + responseEntity);
+        JSONObject paramOut = JSONObject.parseObject(AuthenticationFactory.AesEncrypt(responseEntity.getBody(), TianChuangConstant.getAppSecret()));
+
+        String code = paramOut.getJSONObject("sta").getString("cod");
+        if (!"0000".equals(code)) {
+            throw new IllegalArgumentException("同步小区失败," + paramOut.toJSONString());
+        }
+        String extTcMachineId = paramOut.getJSONArray("data").getJSONObject(0).getString("result");
+        MachineAttrPo machineAttrPo = new MachineAttrPo();
+        machineAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
+        machineAttrPo.setCommunityId(communityDto.getCommunityId());
+        machineAttrPo.setMachineId(machineDto.getMachineId());
+        machineAttrPo.setSpecCd(TianChuangConstant.EXT_TC_MACHINE_ID);
+        machineAttrPo.setValue(extTcMachineId);
+        machineAttrInnerServiceSMOImpl.saveMachineAttrs(machineAttrPo);
+
+        return extTcMachineId;
+    }
+
+    /**
+     * 发送小区代码
+     *
+     * @param communityDto
+     */
+    private String sendCommunity(CommunityDto communityDto) {
+        JSONObject data = new JSONObject();
+        JSONArray datas = new JSONArray();
+        JSONObject dataObj = new JSONObject();
+        dataObj.put("lv_mjbh", TianChuangConstant.getCompany());
+        dataObj.put("lv_sbxqmc", communityDto.getName());
+        dataObj.put("lv_zt", "0");
+        dataObj.put("lv_dxtzhm", StringUtil.isEmpty(communityDto.getTel()) ? "18909711234" : communityDto.getTel());
+        String qrCodeAddress = "";
+        for (CommunityAttrDto communityAttrDto : communityDto.getCommunityAttrDtos()) {
+            if (TianChuangConstant.EXT_TC_COMMUNITY_QRCODE.equals(communityAttrDto.getSpecCd())) {
+                qrCodeAddress = communityAttrDto.getValue();
             }
         }
-        body.put("state", state);
 
-        JSONObject kafkaData = baseHcGovSendAsynImpl.createHeadersOrBody(body, extCommunityId, HcGovConstant.ADD_INOUT_RECORD_ACTION, HcGovConstant.COMMUNITY_SECURE);
-        baseHcGovSendAsynImpl.sendKafka(HcGovConstant.GOV_TOPIC, kafkaData, communityId, machineRecordId, HcGovConstant.COMMUNITY_SECURE);
+        dataObj.put("lv_sbxqdzbm", qrCodeAddress);
+        dataObj.put("lv_procmode", "PMINSERT");
+
+        datas.add(dataObj);
+
+        data.put("datas", datas);
+
+        JSONArray pages = new JSONArray();
+        JSONObject page = new JSONObject();
+        page.put("psize", "100");
+        page.put("tcount", "1");
+        page.put("pno", "1");
+        page.put("tsize", "");
+        pages.add(page);
+
+        data.put("pages", pages);
+
+        String dataStr = AuthenticationFactory.AesDecrypt(data.toJSONString(), TianChuangConstant.getAppSecret());
+
+        HttpEntity httpEntity = new HttpEntity(dataStr, GetTianChuangToken.getHeaders(TianChuangConstant.SERVICE_ID_COMMUNITY, dataStr));
+        ResponseEntity<String> responseEntity = outRestTemplate.exchange(TianChuangConstant.getUrl(), HttpMethod.POST, httpEntity, String.class);
+        logger.debug("调用HC IOT信息:" + responseEntity);
+        JSONObject paramOut = JSONObject.parseObject(AuthenticationFactory.AesEncrypt(responseEntity.getBody(), TianChuangConstant.getAppSecret()));
+
+        String code = paramOut.getJSONObject("sta").getString("cod");
+        if (!"0000".equals(code)) {
+            throw new IllegalArgumentException("同步小区失败," + paramOut.toJSONString());
+        }
+        String extTcCommunityId = paramOut.getJSONArray("data").getJSONObject(0).getString("result");
+        CommunityAttrPo communityAttrPo = new CommunityAttrPo();
+        communityAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
+        communityAttrPo.setCommunityId(communityDto.getCommunityId());
+        communityAttrPo.setSpecCd(TianChuangConstant.EXT_TC_COMMUNITY_ID);
+        communityAttrPo.setValue(extTcCommunityId);
+        communityInnerServiceSMOImpl.saveCommunityAttr(communityAttrPo);
+
+        return extTcCommunityId;
     }
 
 }

+ 28 - 75
service-job/src/main/java/com/java110/job/adapt/hcToTianchuang/TianChuangConstant.java

@@ -32,92 +32,35 @@ public class TianChuangConstant {
     public static final String TC_APP_SECRET = "TC_APP_SECRET"; // 物联网域
 
     private static final String DEFAULT_TC_URL = "http://112.51.96.125:9080/ywxzservice/dbClient.do";
-    //122350112432
+    //
     private static final String DEFAULT_APP_ID = "26810B9FE0532D03";
     private static final String DEFAULT_APP_SECRET = "CAD3218426800B9FE0532D03A8C0310E";
+    private static final String DEFAULT_COMPANY = "122350112432"; //单位编号
 
-    public static final String GET_TOKEN_URL = "/extApi/auth/getAccessToken?appId=APP_ID&appSecret=APP_SECRET";
+    private static final String TC_COMPANY = "COMPANY";//公司
 
-    //添加小区
-    public static final String ADD_COMMUNITY_URL = "/extApi/community/addCommunity";
-    //修改小区
-    public static final String UPDATE_COMMUNITY_URL = "/extApi/community/updateCommunity";
-    //删除小区
-    public static final String DELETE_COMMUNITY_URL = "/extApi/community/deleteCommunity";
+    //政务小区编码/楼栋外部便阿门/房屋外部编码/业主外部编码 SPEC_CD
+    public static final String EXT_TC_COMMUNITY_ID = "1329000004";
+    //政务小区编码/楼栋外部便阿门/房屋外部编码/业主外部编码 SPEC_CD
+    public static final String EXT_TC_MACHINE_ID = "1329000004";
+    public static final String EXT_TC_OWNER_ID = "1329000004";
 
-    //添加设备
-    public static final String ADD_MACHINE_URL = "/extApi/machine/addMachine";
-    //修改设备
-    public static final String UPDATE_MACHINE_URL = "/extApi/machine/updateMachine";
-    //删除设备
-    public static final String DELETE_MACHINE_URL = "/extApi/machine/deleteMachine";
+    //政务小区编码/楼栋外部便阿门/房屋外部编码/业主外部编码 SPEC_CD
+    public static final String EXT_TC_COMMUNITY_QRCODE = "3329000004";
 
-    //添加停车场
-    public static final String ADD_PARKING_AREA_URL = "/extApi/parkingArea/addParkingArea";
-    //修改停车场
-    public static final String UPDATE_PARKING_AREA_URL = "/extApi/parkingArea/updateParkingArea";
-    //删除停车场
-    public static final String DELETE_PARKING_AREA_URL = "/extApi/parkingArea/deleteParkingArea";
+    public static final String EXT_TC_ROOM_QRCODE = "3329000004";
 
-    //添加车辆
-    public static final String ADD_OWNER_CAR_URL = "/extApi/car/addCar";
-    //修改车辆
-    public static final String UPDATE_OWNER_CAR_URL = "/extApi/car/updateCar";
-    //删除车辆
-    public static final String DELETE_OWNER_CAR_URL = "/extApi/car/deleteCar";
+    public static final String SERVICE_ID_COMMUNITY = "ZHSQ_XQSBXX";
 
-    //添加车辆
-    public static final String ADD_CAR_BLACK_WHITE_URL = "/extApi/car/addBlackWhite";
+    public static final String SERVICE_ID_MACHINE = "ZHSQ_MJSBXX";
 
-    //删除车辆
-    public static final String DELETE_CAR_BLACK_WHITE_URL = "/extApi/car/deleteBlackWhite";
-
-    //开门接口
-    public static final String OPEN_DOOR = "/extApi/machine/openDoor";
-
-    //获取二维码
-    public static final String GET_QRCODE = "/extApi/machine/getQRcode";
-    //重启接口
-    public static final String RESTART_MACHINE = "/extApi/machine/restartMachine";
-
-    //查询临时停车费订单
-    public static final String GET_TEMP_CAR_FEE_ORDER = "/extApi/fee/getTempCarFeeOrder";
-
-    //查询临时停车费订单
-    public static final String NOTIFY_TEMP_CAR_FEE_ORDER = "/extApi/fee/notifyTempCarFeeOrder";
-
-    //添加车辆
-    public static final String ADD_TEAM_CAR_FEE_CONFIG = "/extApi/fee/addTempCarFee";
-    //修改车辆
-    public static final String UPDATE_TEAM_CAR_FEE_CONFIG = "/extApi/fee/updateTempCarFee";
-    //删除车辆
-    public static final String DELETE_TEAM_CAR_FEE_CONFIG = "/extApi/fee/deleteTempCarFee";
-
-    //添加考勤班次
-    public static final String ADD_ATTENDANCE_CLASSES_STAFFS = "/extApi/attendance/addAttendanceClassStaffs";
-
-
-    //删除考勤班次
-    public static final String DELETE_ATTENDANCE_CLASSES_STAFFS = "/extApi/attendance/deleteAttendanceClassStaff";
-
-    //添加考勤班次
-    public static final String ADD_ATTENDANCE_CLASSES = "/extApi/attendance/addAttendanceClass";
-    //修改考勤班次
-    public static final String UPDATE_ATTENDANCE_CLASSES = "/extApi/attendance/updateAttendanceClass";
-    //删除考勤班次
-    public static final String DELETE_ATTENDANCE_CLASSES = "/extApi/attendance/deleteAttendanceClass";
-
-    public static final String HC_TOKEN = "HC_ACCESS_TOKEN";
-
-    //单位为秒
-    public static final int DEFAULT_LOG_TIME = 5 * 60;
-
-    //添加业主
-    public static final String ADD_OWNER = "/extApi/user/addUser";
-    public static final String EDIT_OWNER = "/extApi/user/updateUser";
-    public static final String DELETE_OWNER = "/extApi/user/deleteUser";
+    public static final String SERVICE_ID_OWNER = "ZHSQ_ZHXX";
 
+    public static final String SERVICE_ID_PERSON_INOUT = "ZHSQ_RYJCJL";
 
+    public static String getUrl() {
+        return getUrl("");
+    }
     public static String getUrl(String param) {
         String url = MappingCache.getValue(TC_DOMAIN, TianChuangConstant.TC_URL);
 
@@ -147,4 +90,14 @@ public class TianChuangConstant {
 
         return appSecret;
     }
+
+    public static String getCompany() {
+        String appSecret = MappingCache.getValue(TC_DOMAIN, TianChuangConstant.TC_COMPANY);
+
+        if (StringUtil.isEmpty(appSecret)) {
+            return DEFAULT_COMPANY;
+        }
+
+        return appSecret;
+    }
 }