package com.persagy.transfer.service.impl; import java.util.Date; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; 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.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.persagy.common.utils.DateUtil; import com.persagy.common.utils.StringUtil; import com.persagy.db.service.impl.SuperServiceImpl; import com.persagy.transfer.constant.DictType; import com.persagy.transfer.constant.InfosKeyConstant; import com.persagy.transfer.constant.SwitchConstant; import com.persagy.transfer.mapper.HydomcAssetMapper; import com.persagy.transfer.pojo.dto.HydomcAsset; import com.persagy.transfer.pojo.dto.RwdObjectWd; import com.persagy.transfer.service.IHydomcAssetService; import com.persagy.transfer.utils.StringTool; import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; /** * 设备信息主表 * * @version 1.0.0 * @company persagy * @author zhangqiankun * @date 2021-09-16 10:45:41 */ @Slf4j @Service @DS(value = SwitchConstant.DS_MASTER_2) public class HydomcAssetServiceImpl extends SuperServiceImpl implements IHydomcAssetService { @Override public HydomcAsset getHydomcAssetByPKey(String sbybm) { LambdaQueryWrapper queryHydomcAssetWrapper = new HydomcAsset.BuilderQueryWrapper().sbybmEq(sbybm).builder(); return this.baseMapper.selectOne(queryHydomcAssetWrapper); } @Override @Transactional public boolean saveHydomcAsset(RwdObjectWd rwdObjectWd, JSONObject infos, String wdProjectId, String classstructureid, String sbybm) { String equipmentName = StringTool.object2String(infos.get(InfosKeyConstant.EQUIPMENT_NAME)); if (StrUtil.isBlank(equipmentName)) { log.warn("万达设备名称为空,不进行同步,本方对象ID:{}", rwdObjectWd.getId()); return false; } int valid = rwdObjectWd.getValid() == null ? 0 : rwdObjectWd.getValid(); Date updateTime = rwdObjectWd.getUpdateTime() == null ? DateUtil.date().toJdkDate() : rwdObjectWd.getUpdateTime(); String updateUser = StrUtil.isBlank(rwdObjectWd.getUpdateUser()) ? SwitchConstant.USER_ID : rwdObjectWd.getUpdateUser(); log.info("设备数据同步至万达数据库,本方对象ID:{},设备状态:{},万达项目ID:{}, 设备分类ID:{}", rwdObjectWd.getId(), valid, wdProjectId, classstructureid); Integer result = null; HydomcAsset hydomcAsset = this.getHydomcAssetByPKey(sbybm); if (hydomcAsset == null) { hydomcAsset = this.buildHydomcAsset(infos, wdProjectId, classstructureid, updateUser, valid, updateTime); result = this.baseMapper.insert(hydomcAsset); return SqlHelper.retBool(result); } // 数据更新时间 增量字段 LambdaUpdateWrapper updateWrapper = new HydomcAsset.BuilderUpdateWrapper().sbybmEq(sbybm).builder(); if (valid == 0) { updateWrapper.set(HydomcAsset::getStatus, SwitchConstant.SCRAP); // 设备状态 运行中/报废 默认都为运行中 updateWrapper.set(HydomcAsset::getDatastatus, SwitchConstant.IS_DELETE); // 数据状态 update/delete 当数据状态为delete时,设备状态需改为报废 updateWrapper.set(HydomcAsset::getChangedate, updateTime); // 数据更新时间 增量字段 result = this.baseMapper.update(null, updateWrapper); } else { hydomcAsset = this.buildHydomcAsset(infos, wdProjectId, classstructureid, updateUser, valid, updateTime); hydomcAsset.setSbybm(sbybm); result = this.baseMapper.update(hydomcAsset, updateWrapper); } return SqlHelper.retBool(result); } @Override public HydomcAsset buildHydomcAsset(JSONObject infos, String wdProjectId, String classstructureid, String updateUser, int valid, Date updateTime) { String sfhysy = DictType.getCodeDesc(InfosKeyConstant.WISDOM_CLOUD_USE, StringTool.object2String(infos.get(InfosKeyConstant.WISDOM_CLOUD_USE))); sfhysy = StringUtil.isBlank(sfhysy) ? "是" : sfhysy; String sfzld = DictType.getCodeDesc(InfosKeyConstant.MAIN_STORE, StringTool.object2String(infos.get(InfosKeyConstant.MAIN_STORE))); sfzld = StringUtil.isBlank(sfzld) ? "否" : sfzld; HydomcAsset hydomcAsset = HydomcAsset.builder().siteid(wdProjectId) // 项目唯一id,可采用租赁系统广场id,同步后不可更改 // 主键 无其他主键可采用设备编码为主键,但要确保唯一(工程信息化设备原码) .sbybm(StringTool.object2String(infos.get(InfosKeyConstant.EQUIPMENT_CODE))) // 详细设备安装位置,格式:楼体-楼层-区域 没有key 后续补充 .wzqy(StringTool.object2String(infos.get(InfosKeyConstant.EQUIPMENT_INSTALL_AREA))) // 设备服务区域 设备/系统服务范围 .fwqy(StringTool.object2String(infos.get(InfosKeyConstant.EQUIPMENT_SERVICE_ZONE))) // 设备名称 .description(StringTool.object2String(infos.get(InfosKeyConstant.EQUIPMENT_NAME))) // 厂商设备型号 .sbxh(StringTool.object2String(infos.get(InfosKeyConstant.EQUIPMENT_MODEL))) // 设备分类ID .classstructureid(classstructureid) // 设备状态 运行中/报废 默认都为运行中 .status(DictType.getCodeDesc(InfosKeyConstant.EQUIPMENT_STATUS, StringTool.object2String(infos.get(InfosKeyConstant.EQUIPMENT_STATUS)))) // 设备序号 同类设备的序号,即第几台设备:第几台电梯 .sbxhh(StringTool.object2String(infos.get(InfosKeyConstant.EQUIPMENT_IDX))) // 厂家设备序列号 .cjsbxh(StringTool.object2String(infos.get(InfosKeyConstant.SERIAL_NUM))) // 生产商公司供方管理系统编码code .manufacturer(StringTool.object2String(infos.get(InfosKeyConstant.MANUFACTURER))) // 供应商公司供方管理系统编码code .vendor(StringTool.object2String(infos.get(InfosKeyConstant.SUPPLIER))) // 服务商公司供方管理系统编码code .fws(StringTool.object2String(infos.get(InfosKeyConstant.MAINTAINER))) // 采购金额 填写人民币元 .purchaseprice(StringTool.object2Double(infos.get(InfosKeyConstant.PURCHASE_PRICE))) // 折旧/使用年限 按年填写 如3年半则填写 3.5 .zjsynx(StringTool.object2Double(infos.get(InfosKeyConstant.SERVICE_LIFE))) // 生产日期/出厂日期 年/月/日 .scrq(StringTool.object2SqlDate(infos.get(InfosKeyConstant.PRODUCT_DATE))) // 采购日期 .cgrq(StringTool.object2SqlDate(infos.get(InfosKeyConstant.PURCHASE_DATE))) // 安装日期 .azdate(StringTool.object2SqlDate(infos.get(InfosKeyConstant.INSTALL_DATE))) // 启用日期 .installdate(StringTool.object2SqlDate(infos.get(InfosKeyConstant.ENABLE_DATE))) // 质保开始日期 .zbksrq(StringTool.object2SqlDate(infos.get(InfosKeyConstant.WARRANTY_START_DATE))) // 质保结束日期 .zbjsrq(StringTool.object2SqlDate(infos.get(InfosKeyConstant.WARRANTY_END_DATE))) // 中修周期 单位为月 .zxzq(StringTool.object2Integer(infos.get(InfosKeyConstant.MEDIUM_REPAIR_CYCLE))) // 大修周期 单位为月 .dxzq(StringTool.object2Integer(infos.get(InfosKeyConstant.OVERHAUL_CYCLE))) // 物业类型 自持/销售/合作方 .wylx(DictType.getCodeDesc(InfosKeyConstant.PROPERTY_TYPE, StringTool.object2String(infos.get(InfosKeyConstant.PROPERTY_TYPE)))) // 设备管理归属 .sbglgs(DictType.getCodeDesc(InfosKeyConstant.EQUIPMENT_MANAGE_OWNERSHIP, StringTool.object2String(infos.get(InfosKeyConstant.EQUIPMENT_MANAGE_OWNERSHIP)))) // 慧云设备编码 .hysbbm(StringTool.object2String(infos.get(InfosKeyConstant.WISDOM_CLOUD_LOCAL_CODE))) // 是否慧云使用 是/否 缺省为 是 .sfhysy(sfhysy) // 是否是主力店 缺省为 否 .sfzld(sfzld) // 备注 wD_beizhu .mark(StringTool.object2String(infos.get(InfosKeyConstant.REMARK))) // 数据状态 update/delete 当数据状态为delete时,设备状态需改为报废 .datastatus(valid == 0 ? SwitchConstant.IS_DELETE : SwitchConstant.IS_UPDATE) // 数据更新时间 增量字段 .changedate(updateTime) // 更新人员 .ctx(updateUser) .build(); if (valid == 0) { hydomcAsset.setStatus(SwitchConstant.SCRAP); } return hydomcAsset; } }