java110
2021-09-08 177052a454fc6a06d97cd263c8baf3b26f878576
和厦门 公安天创系统门禁记录上报 代码对接完成
9个文件已修改
589 ■■■■ 已修改文件
java110-core/src/main/java/com/java110/core/factory/AuthenticationFactory.java 77 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/community/CommunityServiceDaoImplMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-interface/src/main/java/com/java110/intf/community/ICommunityInnerServiceSMO.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-community/src/main/java/com/java110/community/dao/ICommunityServiceDao.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-community/src/main/java/com/java110/community/dao/impl/CommunityServiceDaoImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-community/src/main/java/com/java110/community/smo/impl/CommunityInnerServiceSMOImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/adapt/hcToTianchuang/GetTianChuangToken.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/adapt/hcToTianchuang/PersonToTianchuangAdapt.java 364 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/adapt/hcToTianchuang/TianChuangConstant.java 103 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-core/src/main/java/com/java110/core/factory/AuthenticationFactory.java
@@ -22,7 +22,6 @@
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 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 @@
    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 @@
            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 {
            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());
    // 解密
    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 {
                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 @@
        String newSign = md5(reportDataHeaderDto.getTranId() + reportDataHeaderDto.getReqTime() + reportDataDto.getReportDataBodyDto().toJSONString() + code).toLowerCase();
        reportDataHeaderDto.setSign(newSign);
    }
    /**
     * 加载公钥
     *
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 -->
java110-interface/src/main/java/com/java110/intf/community/ICommunityInnerServiceSMO.java
@@ -4,6 +4,7 @@
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 @@
     */
    @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);
}
service-community/src/main/java/com/java110/community/dao/ICommunityServiceDao.java
@@ -267,4 +267,11 @@
    List<Map> getStoreCommunitys(Map beanCovertMap);
    /**
     * 添加属性
     *
     * @param info
     * @return
     */
    int saveCommunityAttr(Map info);
}
service-community/src/main/java/com/java110/community/dao/impl/CommunityServiceDaoImpl.java
@@ -489,5 +489,14 @@
        return businessCommunityInfos;
    }
    @Override
    public int saveCommunityAttr(Map info) {
        logger.debug("小区成员加入Instance 入参 info : {}", info);
        int saveFlag = sqlSessionTemplate.insert("communityServiceDaoImpl.saveCommunityAttr", info);
        return saveFlag;
    }
}
service-community/src/main/java/com/java110/community/smo/impl/CommunityInnerServiceSMOImpl.java
@@ -8,6 +8,7 @@
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 @@
        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) {
service-job/src/main/java/com/java110/job/adapt/hcToTianchuang/GetTianChuangToken.java
@@ -50,7 +50,7 @@
     *
     * @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));
service-job/src/main/java/com/java110/job/adapt/hcToTianchuang/PersonToTianchuangAdapt.java
@@ -17,34 +17,50 @@
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,8 +70,10 @@
@Component(value = "personToTianchuangAdapt")
public class PersonToTianchuangAdapt extends DatabusAdaptImpl {
    private static Logger logger = LoggerFactory.getLogger(PersonToTianchuangAdapt.class);
    @Autowired
    private ICommunityInnerServiceSMO communityInnerServiceSMOImpl;
    @Autowired
    private BaseHcGovSendAsyn baseHcGovSendAsynImpl;
@@ -64,10 +82,29 @@
    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 @@
        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();
            }
        }
        String locationId = machineDtos.get(0).getLocationTypeCd();
        if (StringUtil.isEmpty(extMachineId)) {
            //传送门禁信息
            extMachineId = sendMachine(machineDtos.get(0), extCommunityId, tmpCommunityDto);
        }
        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 idCard = machineRecordPo.getIdCard();
        Assert.listOnlyOne(communityLocationAttrDtos, "未找到 位置外部ID");
        //身份证为空时 ,门禁记录没法传 所以就不传了
        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("业主不存在");
        }
        String extMemberId = "";
        for (OwnerAttrDto ownerAttrDto : ownerDtos.get(0).getOwnerAttrDtos()) {
            if (TianChuangConstant.EXT_TC_OWNER_ID.equals(ownerAttrDto.getSpecCd())) {
                extMemberId = ownerAttrDto.getValue();
            }
        }
        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 @@
            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();
            }
        }
        body.put("state", state);
        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");
        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);
        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();
            }
        }
        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;
    }
}
service-job/src/main/java/com/java110/job/adapt/hcToTianchuang/TianChuangConstant.java
@@ -32,92 +32,35 @@
    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 SERVICE_ID_OWNER = "ZHSQ_ZHXX";
    //开门接口
    public static final String OPEN_DOOR = "/extApi/machine/openDoor";
    public static final String SERVICE_ID_PERSON_INOUT = "ZHSQ_RYJCJL";
    //获取二维码
    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 String getUrl() {
        return getUrl("");
    }
    public static String getUrl(String param) {
        String url = MappingCache.getValue(TC_DOMAIN, TianChuangConstant.TC_URL);
@@ -147,4 +90,14 @@
        return appSecret;
    }
    public static String getCompany() {
        String appSecret = MappingCache.getValue(TC_DOMAIN, TianChuangConstant.TC_COMPANY);
        if (StringUtil.isEmpty(appSecret)) {
            return DEFAULT_COMPANY;
        }
        return appSecret;
    }
}