package com.persagy.transfer.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.persagy.transfer.constant.InfosKeyConstant; import com.persagy.transfer.constant.SwitchConstant; import com.persagy.transfer.mapper.HydomcAssetMapper; import com.persagy.transfer.mapper.HydomcAssetspecMapper; import com.persagy.transfer.mapper.MasterTwoMapper; import com.persagy.transfer.pojo.dto.HydomcAsset; import com.persagy.transfer.pojo.dto.HydomcAssetspec; import com.persagy.transfer.pojo.dto.WdfacilityRelPersagy; import com.persagy.transfer.service.IWdDbService; import com.persagy.transfer.utils.StringTool; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; /** * @description: 万达数据源业务处理 * @author: YangWanYi * @create: 2021-09-16 20:19 **/ @Service @DS(value = SwitchConstant.DS_MASTER_2) @Slf4j public class WdDbServiceImpl implements IWdDbService { @Autowired private MasterTwoMapper masterTwoMapper; @Autowired private HydomcAssetMapper hydomcAssetMapper; @Autowired private HydomcAssetspecMapper hydomcAssetspecMapper; @Override @DS(value = SwitchConstant.DS_MASTER_2) public Object getDataByMasterTwo() { return this.masterTwoMapper.queryTwo(); } /** * @param infosObj 博锐尚格项目表的debugs字段值 * @param wdProjectId 博锐尚格项目ID映射的万达项目ID * @param hydomcAsset 万达设备信息对象 * @param valid 项目数据对象状态:1有效,0无效 * @param updateTime 项目最后更新时间 * @param classstrucrureid 万达设备分类ID * @param updateUser 更新人 * @author YangWanYi * @describe 万达设备信息对象数据同步 * @date 2021/9/16 16:00 */ @DS(value = SwitchConstant.DS_MASTER_2) public void sycnHydomcAsset(JSONObject infosObj, String wdProjectId, HydomcAsset hydomcAsset, Integer valid, java.util.Date updateTime, String classstrucrureid, String updateUser) { log.debug("准备同步万达设备信息对象数据"); // 根据万达设备信息表的主键查询数据是否存在 hydomcAsset = this.getHydomcAssetByPKey(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_CODE))); if (hydomcAsset == null) { log.debug("万达数据库没有这条数据,准备新增"); hydomcAsset = new HydomcAsset(); // 万达设备信息主表实体 hydomcAsset.setSbybm(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_CODE))); // 主键 无其他主键可采用设备编码为主键,但要确保唯一(工程信息化设备原码) hydomcAsset.setDescription(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_NAME))); // 设备名称 hydomcAsset.setWzqy(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_INSTALL_AREA))); // 详细设备安装位置,格式:楼体-楼层-区域 hydomcAsset.setFwqy(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_SERVICE_ZONE))); // 设备服务区域 设备/系统服务范围 hydomcAsset.setSbxh(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_MODEL))); // 厂商设备型号 hydomcAsset.setClassstructureid(classstrucrureid); // 对接设备分类id,同步后不可更改 hydomcAsset.setStatus(valid == 0 ? SwitchConstant.SCRAP : SwitchConstant.RUNNING); // 设备状态 运行中/报废 默认都为运行中 hydomcAsset.setSbxhh(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_IDX))); // 设备序号 同类设备的序号,即第几台设备:第几台电梯 hydomcAsset.setCjsbxh(StringTool.object2String(infosObj.get(InfosKeyConstant.SERIAL_NUM))); // 厂家设备序列号 hydomcAsset.setManufacturer(StringTool.object2String(infosObj.get(InfosKeyConstant.MANUFACTURER))); // 生产商公司供方管理系统编码code hydomcAsset.setVendor(StringTool.object2String(infosObj.get(InfosKeyConstant.SUPPLIER))); // 供应商公司供方管理系统编码code hydomcAsset.setFws(StringTool.object2String(infosObj.get(InfosKeyConstant.MAINTAINER))); // 服务商公司供方管理系统编码code hydomcAsset.setPurchaseprice(Double.valueOf(StringTool.object2String(infosObj.get(InfosKeyConstant.PURCHASE_PRICE)))); // 采购金额 填写人民币元 hydomcAsset.setZjsynx(StringTool.object2Double(infosObj.get(InfosKeyConstant.SERVICE_LIFE))); // 折旧/使用年限 按年填写 如3年半则填写 3.5 hydomcAsset.setScrq(StringTool.object2DateTime(infosObj.get(InfosKeyConstant.PRODUCT_DATE))); // 生产日期/出厂日期 年/月/日 hydomcAsset.setCgrq(StringTool.object2DateTime(infosObj.get(InfosKeyConstant.PURCHASE_DATE))); // 采购日期 hydomcAsset.setAzdate(StringTool.object2DateTime(infosObj.get(InfosKeyConstant.INSTALL_DATE))); // 安装日期 hydomcAsset.setInstalldate(StringTool.object2DateTime(infosObj.get(InfosKeyConstant.ENABLE_DATE))); // 启用日期 hydomcAsset.setZbksrq(StringTool.object2DateTime(infosObj.get(InfosKeyConstant.WARRANTY_START_DATE))); // 质保开始日期 hydomcAsset.setZbjsrq(StringTool.object2DateTime(infosObj.get(InfosKeyConstant.WARRANTY_END_DATE))); // 质保结束日期 hydomcAsset.setZxzq(StringTool.object2Integer(infosObj.get(InfosKeyConstant.MEDIUM_REPAIR_CYCLE))); // 中修周期 单位为月 hydomcAsset.setDxzq(StringTool.object2Integer(infosObj.get(InfosKeyConstant.OVERHAUL_CYCLE))); // 大修周期 单位为月 hydomcAsset.setWylx(StringTool.object2String(infosObj.get(InfosKeyConstant.PROPERTY_TYPE))); // 物业类型 自持/销售/合作方 hydomcAsset.setSbglgs(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_MANAGE_OWNERSHIP))); // 设备管理归属 商管/百货/大歌星/超市/影院/大酒楼/其他 hydomcAsset.setHysbbm(StringTool.object2String(infosObj.get(InfosKeyConstant.WISDOM_CLOUD_LOCAL_CODE))); // 慧云设备编码 hydomcAsset.setSfhysy(StringTool.object2String(infosObj.get(InfosKeyConstant.WISDOM_CLOUD_USE))); // 是否慧云使用 是/否 缺省为 是 hydomcAsset.setSfzld(StringTool.object2String(infosObj.get(InfosKeyConstant.MAIN_STORE))); // 是否是主力店 缺省为 否 hydomcAsset.setMark(StringTool.object2String(infosObj.get(InfosKeyConstant.REMARK))); // 备注 wD_beizhu hydomcAsset.setSiteid(wdProjectId); // 项目唯一id,可采用租赁系统广场id,同步后不可更改 hydomcAsset.setDatastatus(valid == 0 ? SwitchConstant.IS_DELETE : SwitchConstant.IS_UPDATE); // 数据状态 update/delete 当数据状态为delete时,设备状态需改为报废 hydomcAsset.setChangedate(updateTime); // 数据更新时间 增量字段 // 新增一个ctx字段 变更人员的万信账号 hydomcAsset.setCtx(updateUser); this.hydomcAssetMapper.insert(hydomcAsset); } else { UpdateWrapper updateWrapper = new UpdateWrapper<>(); // 数据更新时间 增量字段 if (valid == 0) { log.debug("万达数据库已经存在该条数据,且博锐尚格这条数据状态为无效,因此直接更新万达这条数据状态为delete即可"); updateWrapper.set("status", SwitchConstant.SCRAP); // 设备状态 运行中/报废 默认都为运行中 updateWrapper.set("datastatus", SwitchConstant.IS_DELETE); // 数据状态 update/delete 当数据状态为delete时,设备状态需改为报废 } else { log.debug("万达数据库已经存在该条数据,但博锐尚格这条数据状态为有效,因此需要更新所有字段"); updateWrapper.set("sbybm", StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_CODE))); // 主键 无其他主键可采用设备编码为主键,但要确保唯一(工程信息化设备原码) updateWrapper.set("description", StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_NAME))); // 设备名称 updateWrapper.set("wzqy", StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_INSTALL_AREA))); // 详细设备安装位置,格式:楼体-楼层-区域 updateWrapper.set("fwqy", StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_SERVICE_ZONE))); // 设备服务区域 设备/系统服务范围 updateWrapper.set("sbxh", StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_MODEL))); // 厂商设备型号 updateWrapper.set("classstructureid", classstrucrureid); // 对接设备分类id,同步后不可更改 updateWrapper.set("status", SwitchConstant.RUNNING); // 设备状态 运行中/报废 默认都为运行中 updateWrapper.set("sbxhh", StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_IDX))); // 设备序号 同类设备的序号,即第几台设备:第几台电梯 updateWrapper.set("cjsbxh", StringTool.object2String(infosObj.get(InfosKeyConstant.SERIAL_NUM))); // 厂家设备序列号 updateWrapper.set("manufacturer", StringTool.object2String(infosObj.get(InfosKeyConstant.MANUFACTURER))); // 生产商公司供方管理系统编码code updateWrapper.set("vendor", StringTool.object2String(infosObj.get(InfosKeyConstant.SUPPLIER))); // 供应商公司供方管理系统编码code updateWrapper.set("fws", StringTool.object2String(infosObj.get(InfosKeyConstant.MAINTAINER))); // 服务商公司供方管理系统编码code updateWrapper.set("purchaseprice", StringTool.object2Double(Double.valueOf(StringTool.object2String(infosObj.get(InfosKeyConstant.PURCHASE_PRICE))))); // 采购金额 填写人民币元 updateWrapper.set("zjsynx", StringTool.object2Double(infosObj.get(InfosKeyConstant.SERVICE_LIFE))); // 折旧/使用年限 按年填写 如3年半则填写 3.5 updateWrapper.set("scrq", StringTool.object2DateTime(infosObj.get(InfosKeyConstant.PRODUCT_DATE))); // 生产日期/出厂日期 年/月/日 updateWrapper.set("cgrq", StringTool.object2DateTime(infosObj.get(InfosKeyConstant.PURCHASE_DATE))); // 采购日期 updateWrapper.set("azdate", StringTool.object2DateTime(infosObj.get(InfosKeyConstant.INSTALL_DATE))); // 安装日期 updateWrapper.set("installdate", StringTool.object2DateTime(infosObj.get(InfosKeyConstant.ENABLE_DATE))); // 启用日期 updateWrapper.set("zbksrq", StringTool.object2DateTime(infosObj.get(InfosKeyConstant.WARRANTY_START_DATE))); // 质保开始日期 updateWrapper.set("zbjsrq", StringTool.object2DateTime(infosObj.get(InfosKeyConstant.WARRANTY_END_DATE))); // 质保结束日期 updateWrapper.set("zxzq", StringTool.object2Integer(infosObj.get(InfosKeyConstant.MEDIUM_REPAIR_CYCLE))); // 中修周期 单位为月 updateWrapper.set("dxzq", StringTool.object2Integer(infosObj.get(InfosKeyConstant.OVERHAUL_CYCLE))); // 大修周期 单位为月 updateWrapper.set("wylx", StringTool.object2String(infosObj.get(InfosKeyConstant.PROPERTY_TYPE))); // 物业类型 自持/销售/合作方 updateWrapper.set("sbglgs", StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_MANAGE_OWNERSHIP))); // 设备管理归属 商管/百货/大歌星/超市/影院/大酒楼/其他 updateWrapper.set("hysbbm", StringTool.object2String(infosObj.get(InfosKeyConstant.WISDOM_CLOUD_LOCAL_CODE))); // 慧云设备编码 updateWrapper.set("sfhysy", StringTool.object2String(infosObj.get(InfosKeyConstant.WISDOM_CLOUD_USE))); // 是否慧云使用 是/否 缺省为 是 updateWrapper.set("sfzld", StringTool.object2String(infosObj.get(InfosKeyConstant.MAIN_STORE))); // 是否是主力店 缺省为 否 updateWrapper.set("mark", StringTool.object2String(infosObj.get(InfosKeyConstant.REMARK))); // 备注 wD_beizhu updateWrapper.set("siteid", wdProjectId); // 项目唯一id,可采用租赁系统广场id,同步后不可更改 updateWrapper.set("datastatus", SwitchConstant.IS_UPDATE); // 数据状态 update/delete 当数据状态为delete时,设备状态需改为报废 } updateWrapper.set("ctx", updateUser); // 新增一个ctx字段 变更人员的万信账号 updateWrapper.set("changedate", updateTime); // 数据更新时间 增量字段 this.hydomcAssetMapper.update(hydomcAsset, updateWrapper); } } /** * @param wdfacilityRelList 筛选后的万达设备参数信息表与博锐尚格信息点的映射表数据 * @param wdProjectid 万达项目ID(广场ID) * @param infosObj 博锐尚格项目表的debugs字段值 * @param updateTime 项目最后更新时间 * @author YangWanYi * @describe 同步万达设备参数对象数据 * @date 2021/9/16 18:56 */ @DS(value = SwitchConstant.DS_MASTER_2) public void sycnHydomcAssetspec(List wdfacilityRelList, String wdProjectid, JSONObject infosObj, java.util.Date updateTime) { log.debug("准备同步万达设备参数对象数据"); HydomcAssetspec hydomcAssetspec; for (WdfacilityRelPersagy wdfacilityRelPersagy : wdfacilityRelList) { // 根据万达设备信息表的SITEID、SBYBM、ASSETATTRID查询数据是否存在 hydomcAssetspec = this.getHydomcAssetspec(wdProjectid, StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_CODE)), wdfacilityRelPersagy.getAssetattrid()); if (hydomcAssetspec == null) { log.debug("万达表hydomc_assetspec没有这条数据,准备新增"); hydomcAssetspec = this.handleHydomcAssetspec(new HydomcAssetspec(), wdProjectid, infosObj, wdfacilityRelPersagy, updateTime); this.hydomcAssetspecMapper.insert(hydomcAssetspec); } else { // key为wdfacility_rel_persagy的code值从debugs取 有值update 无值(空、空字符串)就是delete if (StringUtils.isBlank(StringTool.object2String(infosObj.get(wdfacilityRelPersagy.getCode())))) { log.debug("万达表hydomc_assetspec有这条数据,但code没有值,只需要更新数据状态为delete即可"); hydomcAssetspec.setDatastatus(SwitchConstant.IS_DELETE); // 数据状态 update/delete hydomcAssetspec.setChangedate(updateTime); // 数据更新时间 增量字段 } else { log.debug("万达表hydomc_assetspec有这条数据,code有值,需要更新所有字段"); hydomcAssetspec = this.handleHydomcAssetspec(hydomcAssetspec, wdProjectid, infosObj, wdfacilityRelPersagy, updateTime); } this.hydomcAssetspecMapper.updateById(hydomcAssetspec); } } } /** * @param hydomcAssetspec 设备参数信息对象 * @param wdProjectid 广场ID(万达项目ID) * @param infosObj 博锐尚格项目表debugs字段数据 * @param wdfacilityRelPersagy 万达设备参数信息表与博锐尚格信息点的映射表 * @param changedate 数据更新时间 * @return com.persagy.transfer.pojo.dto.HydomcAssetspec * @author YangWanYi * @describe 处理设备参数信息对象字段映射 * @date 2021/9/17 10:55 */ public HydomcAssetspec handleHydomcAssetspec(HydomcAssetspec hydomcAssetspec, String wdProjectid, JSONObject infosObj, WdfacilityRelPersagy wdfacilityRelPersagy, Date changedate) { hydomcAssetspec.setSiteid(wdProjectid); // 广场id 关联设备信息 Pj4403070003 hydomcAssetspec.setSbybm(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_CODE))); // 设备编码 关联设备信息 wD_gongchengxinxihua hydomcAssetspec.setClassstructureid(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_SORT))); // 设备分类id 1507 // 根据Datatype判断设置设备参数数字值还是设备参数文本值 key为wdfacility_rel_persagy的code值从debugs取 final String IS_NUMBER = "数字"; final String IS_LETTER = "字母"; if (IS_NUMBER.equals(wdfacilityRelPersagy.getDatatype())) { // 是数字 log.debug("dataType是数字"); hydomcAssetspec.setNumvalue(StringTool.object2Double(infosObj.get(wdfacilityRelPersagy.getCode()))); // 设备参数数字值 (取自debugs) } else if (IS_LETTER.equals(wdfacilityRelPersagy.getDatatype())) { // 是字母 log.debug("dataType是字母"); hydomcAssetspec.setAlnvalue(StringTool.object2String(infosObj.get(wdfacilityRelPersagy.getCode()))); // 设备参数文本值 (取自debugs) } // key为wdfacility_rel_persagy的code值从debugs取 有值update 无值(空、空字符串)就是delete if (StringUtils.isBlank(StringTool.object2String(infosObj.get(wdfacilityRelPersagy.getCode())))) { log.debug("code没有值,数据状态设置为delete"); hydomcAssetspec.setDatastatus(SwitchConstant.IS_DELETE); // 数据状态 update/delete } else { log.debug("code有值,数据状态设置为update"); hydomcAssetspec.setDatastatus(SwitchConstant.IS_UPDATE); // 数据状态 update/delete } hydomcAssetspec.setClassqc(wdfacilityRelPersagy.getClassqc()); // 设备分类名称 电梯系统/扶梯/人行步道 (取自中间表wdfacility_rel_persagy) hydomcAssetspec.setAssetattrid(wdfacilityRelPersagy.getAssetattrid()); // 主键 设备参数id 1106 (取自中间表wdfacility_rel_persagy) hydomcAssetspec.setCsdesc(wdfacilityRelPersagy.getCsdesc()); // 设备参数名称 (取自中间表wdfacility_rel_persagy) hydomcAssetspec.setDatatype(wdfacilityRelPersagy.getDatatype()); // 设备参数类型 (取自中间表wdfacility_rel_persagy) hydomcAssetspec.setMeasureunitid(wdfacilityRelPersagy.getMeasureunitid()); // 设备参数单位编码 (取自中间表wdfacility_rel_persagy) hydomcAssetspec.setCsjldw(wdfacilityRelPersagy.getCsjldw()); // 设备参数单位名称 (取自中间表wdfacility_rel_persagy) hydomcAssetspec.setChangedate(changedate); // 数据更新时间 增量字段 return hydomcAssetspec; } /** * @param siteId 关联的设备信息字段 广场ID 即万达项目ID * @param sbybm 关联的设备信息字段 设备编码 * @param assetAttrId 设备分类ID * @return com.persagy.transfer.pojo.dto.HydomcAssetspec * @author YangWanYi * @describe 根据SITEID、SBYBM、ASSETATTRID查询万达设备信息表数据 * @date 2021/9/17 10:13 */ @Override @DS(value = SwitchConstant.DS_MASTER_2) public HydomcAssetspec getHydomcAssetspec(String siteId, String sbybm, String assetAttrId) { LambdaQueryWrapper queryHydomcAssetWrapper = new HydomcAssetspec.BuilderQueryWrapper().builder(); queryHydomcAssetWrapper.eq(HydomcAssetspec::getSiteid, siteId); queryHydomcAssetWrapper.eq(HydomcAssetspec::getSbybm, sbybm); queryHydomcAssetWrapper.eq(HydomcAssetspec::getAssetattrid, assetAttrId); return this.hydomcAssetspecMapper.selectOne(queryHydomcAssetWrapper); } /** * @param primaryKey 万达设备信息主表主键 * @return com.persagy.transfer.pojo.dto.HydomcAsset * @author YangWanYi * @describe 根据主键获取万达设备信息 * @date 2021/9/16 15:31 */ @DS(value = SwitchConstant.DS_MASTER_2) public HydomcAsset getHydomcAssetByPKey(String primaryKey) { LambdaQueryWrapper queryHydomcAssetWrapper = new HydomcAsset.BuilderQueryWrapper().builder(); queryHydomcAssetWrapper.eq(HydomcAsset::getSbybm, primaryKey); return this.hydomcAssetMapper.selectOne(queryHydomcAssetWrapper); } }