WdDbServiceImpl.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. package com.persagy.transfer.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.dynamic.datasource.annotation.DS;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  6. import com.persagy.transfer.constant.InfosKeyConstant;
  7. import com.persagy.transfer.constant.SwitchConstant;
  8. import com.persagy.transfer.mapper.HydomcAssetMapper;
  9. import com.persagy.transfer.mapper.HydomcAssetspecMapper;
  10. import com.persagy.transfer.mapper.MasterTwoMapper;
  11. import com.persagy.transfer.pojo.dto.HydomcAsset;
  12. import com.persagy.transfer.pojo.dto.HydomcAssetspec;
  13. import com.persagy.transfer.pojo.dto.WdfacilityRelPersagy;
  14. import com.persagy.transfer.service.IWdDbService;
  15. import com.persagy.transfer.utils.StringTool;
  16. import lombok.extern.slf4j.Slf4j;
  17. import org.apache.commons.lang3.StringUtils;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.stereotype.Service;
  20. import java.util.Date;
  21. import java.util.List;
  22. /**
  23. * @description: 万达数据源业务处理
  24. * @author: YangWanYi
  25. * @create: 2021-09-16 20:19
  26. **/
  27. @Service
  28. @DS(value = SwitchConstant.DS_MASTER_2)
  29. @Slf4j
  30. public class WdDbServiceImpl implements IWdDbService {
  31. @Autowired
  32. private MasterTwoMapper masterTwoMapper;
  33. @Autowired
  34. private HydomcAssetMapper hydomcAssetMapper;
  35. @Autowired
  36. private HydomcAssetspecMapper hydomcAssetspecMapper;
  37. @Override
  38. @DS(value = SwitchConstant.DS_MASTER_2)
  39. public Object getDataByMasterTwo() {
  40. return this.masterTwoMapper.queryTwo();
  41. }
  42. /**
  43. * @param infosObj 博锐尚格项目表的debugs字段值
  44. * @param wdProjectId 博锐尚格项目ID映射的万达项目ID
  45. * @param hydomcAsset 万达设备信息对象
  46. * @param valid 项目数据对象状态:1有效,0无效
  47. * @param updateTime 项目最后更新时间
  48. * @param classstrucrureid 万达设备分类ID
  49. * @param updateUser 更新人
  50. * @author YangWanYi
  51. * @describe 万达设备信息对象数据同步
  52. * @date 2021/9/16 16:00
  53. */
  54. @DS(value = SwitchConstant.DS_MASTER_2)
  55. public void sycnHydomcAsset(JSONObject infosObj, String wdProjectId, HydomcAsset hydomcAsset, Integer valid, java.util.Date updateTime, String classstrucrureid, String updateUser) {
  56. log.debug("准备同步万达设备信息对象数据");
  57. // 根据万达设备信息表的主键查询数据是否存在
  58. hydomcAsset = this.getHydomcAssetByPKey(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_CODE)));
  59. if (hydomcAsset == null) {
  60. log.debug("万达数据库没有这条数据,准备新增");
  61. hydomcAsset = new HydomcAsset(); // 万达设备信息主表实体
  62. hydomcAsset.setSbybm(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_CODE))); // 主键 无其他主键可采用设备编码为主键,但要确保唯一(工程信息化设备原码)
  63. hydomcAsset.setDescription(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_NAME))); // 设备名称
  64. hydomcAsset.setWzqy(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_INSTALL_AREA))); // 详细设备安装位置,格式:楼体-楼层-区域
  65. hydomcAsset.setFwqy(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_SERVICE_ZONE))); // 设备服务区域 设备/系统服务范围
  66. hydomcAsset.setSbxh(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_MODEL))); // 厂商设备型号
  67. hydomcAsset.setClassstructureid(classstrucrureid); // 对接设备分类id,同步后不可更改
  68. hydomcAsset.setStatus(valid == 0 ? SwitchConstant.SCRAP : SwitchConstant.RUNNING); // 设备状态 运行中/报废 默认都为运行中
  69. hydomcAsset.setSbxhh(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_IDX))); // 设备序号 同类设备的序号,即第几台设备:第几台电梯
  70. hydomcAsset.setCjsbxh(StringTool.object2String(infosObj.get(InfosKeyConstant.SERIAL_NUM))); // 厂家设备序列号
  71. hydomcAsset.setManufacturer(StringTool.object2String(infosObj.get(InfosKeyConstant.MANUFACTURER))); // 生产商公司供方管理系统编码code
  72. hydomcAsset.setVendor(StringTool.object2String(infosObj.get(InfosKeyConstant.SUPPLIER))); // 供应商公司供方管理系统编码code
  73. hydomcAsset.setFws(StringTool.object2String(infosObj.get(InfosKeyConstant.MAINTAINER))); // 服务商公司供方管理系统编码code
  74. hydomcAsset.setPurchaseprice(Double.valueOf(StringTool.object2String(infosObj.get(InfosKeyConstant.PURCHASE_PRICE)))); // 采购金额 填写人民币元
  75. hydomcAsset.setZjsynx(StringTool.object2Double(infosObj.get(InfosKeyConstant.SERVICE_LIFE))); // 折旧/使用年限 按年填写 如3年半则填写 3.5
  76. hydomcAsset.setScrq(StringTool.object2DateTime(infosObj.get(InfosKeyConstant.PRODUCT_DATE))); // 生产日期/出厂日期 年/月/日
  77. hydomcAsset.setCgrq(StringTool.object2DateTime(infosObj.get(InfosKeyConstant.PURCHASE_DATE))); // 采购日期
  78. hydomcAsset.setAzdate(StringTool.object2DateTime(infosObj.get(InfosKeyConstant.INSTALL_DATE))); // 安装日期
  79. hydomcAsset.setInstalldate(StringTool.object2DateTime(infosObj.get(InfosKeyConstant.ENABLE_DATE))); // 启用日期
  80. hydomcAsset.setZbksrq(StringTool.object2DateTime(infosObj.get(InfosKeyConstant.WARRANTY_START_DATE))); // 质保开始日期
  81. hydomcAsset.setZbjsrq(StringTool.object2DateTime(infosObj.get(InfosKeyConstant.WARRANTY_END_DATE))); // 质保结束日期
  82. hydomcAsset.setZxzq(StringTool.object2Integer(infosObj.get(InfosKeyConstant.MEDIUM_REPAIR_CYCLE))); // 中修周期 单位为月
  83. hydomcAsset.setDxzq(StringTool.object2Integer(infosObj.get(InfosKeyConstant.OVERHAUL_CYCLE))); // 大修周期 单位为月
  84. hydomcAsset.setWylx(StringTool.object2String(infosObj.get(InfosKeyConstant.PROPERTY_TYPE))); // 物业类型 自持/销售/合作方
  85. hydomcAsset.setSbglgs(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_MANAGE_OWNERSHIP))); // 设备管理归属 商管/百货/大歌星/超市/影院/大酒楼/其他
  86. hydomcAsset.setHysbbm(StringTool.object2String(infosObj.get(InfosKeyConstant.WISDOM_CLOUD_LOCAL_CODE))); // 慧云设备编码
  87. hydomcAsset.setSfhysy(StringTool.object2String(infosObj.get(InfosKeyConstant.WISDOM_CLOUD_USE))); // 是否慧云使用 是/否 缺省为 是
  88. hydomcAsset.setSfzld(StringTool.object2String(infosObj.get(InfosKeyConstant.MAIN_STORE))); // 是否是主力店 缺省为 否
  89. hydomcAsset.setMark(StringTool.object2String(infosObj.get(InfosKeyConstant.REMARK))); // 备注 wD_beizhu
  90. hydomcAsset.setSiteid(wdProjectId); // 项目唯一id,可采用租赁系统广场id,同步后不可更改
  91. hydomcAsset.setDatastatus(valid == 0 ? SwitchConstant.IS_DELETE : SwitchConstant.IS_UPDATE); // 数据状态 update/delete 当数据状态为delete时,设备状态需改为报废
  92. hydomcAsset.setChangedate(updateTime); // 数据更新时间 增量字段
  93. // 新增一个ctx字段 变更人员的万信账号
  94. hydomcAsset.setCtx(updateUser);
  95. this.hydomcAssetMapper.insert(hydomcAsset);
  96. } else {
  97. UpdateWrapper<HydomcAsset> updateWrapper = new UpdateWrapper<>();
  98. // 数据更新时间 增量字段
  99. if (valid == 0) {
  100. log.debug("万达数据库已经存在该条数据,且博锐尚格这条数据状态为无效,因此直接更新万达这条数据状态为delete即可");
  101. updateWrapper.set("status", SwitchConstant.SCRAP); // 设备状态 运行中/报废 默认都为运行中
  102. updateWrapper.set("datastatus", SwitchConstant.IS_DELETE); // 数据状态 update/delete 当数据状态为delete时,设备状态需改为报废
  103. } else {
  104. log.debug("万达数据库已经存在该条数据,但博锐尚格这条数据状态为有效,因此需要更新所有字段");
  105. updateWrapper.set("sbybm", StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_CODE))); // 主键 无其他主键可采用设备编码为主键,但要确保唯一(工程信息化设备原码)
  106. updateWrapper.set("description", StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_NAME))); // 设备名称
  107. updateWrapper.set("wzqy", StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_INSTALL_AREA))); // 详细设备安装位置,格式:楼体-楼层-区域
  108. updateWrapper.set("fwqy", StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_SERVICE_ZONE))); // 设备服务区域 设备/系统服务范围
  109. updateWrapper.set("sbxh", StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_MODEL))); // 厂商设备型号
  110. updateWrapper.set("classstructureid", classstrucrureid); // 对接设备分类id,同步后不可更改
  111. updateWrapper.set("status", SwitchConstant.RUNNING); // 设备状态 运行中/报废 默认都为运行中
  112. updateWrapper.set("sbxhh", StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_IDX))); // 设备序号 同类设备的序号,即第几台设备:第几台电梯
  113. updateWrapper.set("cjsbxh", StringTool.object2String(infosObj.get(InfosKeyConstant.SERIAL_NUM))); // 厂家设备序列号
  114. updateWrapper.set("manufacturer", StringTool.object2String(infosObj.get(InfosKeyConstant.MANUFACTURER))); // 生产商公司供方管理系统编码code
  115. updateWrapper.set("vendor", StringTool.object2String(infosObj.get(InfosKeyConstant.SUPPLIER))); // 供应商公司供方管理系统编码code
  116. updateWrapper.set("fws", StringTool.object2String(infosObj.get(InfosKeyConstant.MAINTAINER))); // 服务商公司供方管理系统编码code
  117. updateWrapper.set("purchaseprice", StringTool.object2Double(Double.valueOf(StringTool.object2String(infosObj.get(InfosKeyConstant.PURCHASE_PRICE))))); // 采购金额 填写人民币元
  118. updateWrapper.set("zjsynx", StringTool.object2Double(infosObj.get(InfosKeyConstant.SERVICE_LIFE))); // 折旧/使用年限 按年填写 如3年半则填写 3.5
  119. updateWrapper.set("scrq", StringTool.object2DateTime(infosObj.get(InfosKeyConstant.PRODUCT_DATE))); // 生产日期/出厂日期 年/月/日
  120. updateWrapper.set("cgrq", StringTool.object2DateTime(infosObj.get(InfosKeyConstant.PURCHASE_DATE))); // 采购日期
  121. updateWrapper.set("azdate", StringTool.object2DateTime(infosObj.get(InfosKeyConstant.INSTALL_DATE))); // 安装日期
  122. updateWrapper.set("installdate", StringTool.object2DateTime(infosObj.get(InfosKeyConstant.ENABLE_DATE))); // 启用日期
  123. updateWrapper.set("zbksrq", StringTool.object2DateTime(infosObj.get(InfosKeyConstant.WARRANTY_START_DATE))); // 质保开始日期
  124. updateWrapper.set("zbjsrq", StringTool.object2DateTime(infosObj.get(InfosKeyConstant.WARRANTY_END_DATE))); // 质保结束日期
  125. updateWrapper.set("zxzq", StringTool.object2Integer(infosObj.get(InfosKeyConstant.MEDIUM_REPAIR_CYCLE))); // 中修周期 单位为月
  126. updateWrapper.set("dxzq", StringTool.object2Integer(infosObj.get(InfosKeyConstant.OVERHAUL_CYCLE))); // 大修周期 单位为月
  127. updateWrapper.set("wylx", StringTool.object2String(infosObj.get(InfosKeyConstant.PROPERTY_TYPE))); // 物业类型 自持/销售/合作方
  128. updateWrapper.set("sbglgs", StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_MANAGE_OWNERSHIP))); // 设备管理归属 商管/百货/大歌星/超市/影院/大酒楼/其他
  129. updateWrapper.set("hysbbm", StringTool.object2String(infosObj.get(InfosKeyConstant.WISDOM_CLOUD_LOCAL_CODE))); // 慧云设备编码
  130. updateWrapper.set("sfhysy", StringTool.object2String(infosObj.get(InfosKeyConstant.WISDOM_CLOUD_USE))); // 是否慧云使用 是/否 缺省为 是
  131. updateWrapper.set("sfzld", StringTool.object2String(infosObj.get(InfosKeyConstant.MAIN_STORE))); // 是否是主力店 缺省为 否
  132. updateWrapper.set("mark", StringTool.object2String(infosObj.get(InfosKeyConstant.REMARK))); // 备注 wD_beizhu
  133. updateWrapper.set("siteid", wdProjectId); // 项目唯一id,可采用租赁系统广场id,同步后不可更改
  134. updateWrapper.set("datastatus", SwitchConstant.IS_UPDATE); // 数据状态 update/delete 当数据状态为delete时,设备状态需改为报废
  135. }
  136. updateWrapper.set("ctx", updateUser); // 新增一个ctx字段 变更人员的万信账号
  137. updateWrapper.set("changedate", updateTime); // 数据更新时间 增量字段
  138. this.hydomcAssetMapper.update(hydomcAsset, updateWrapper);
  139. }
  140. }
  141. /**
  142. * @param wdfacilityRelList 筛选后的万达设备参数信息表与博锐尚格信息点的映射表数据
  143. * @param wdProjectid 万达项目ID(广场ID)
  144. * @param infosObj 博锐尚格项目表的debugs字段值
  145. * @param updateTime 项目最后更新时间
  146. * @author YangWanYi
  147. * @describe 同步万达设备参数对象数据
  148. * @date 2021/9/16 18:56
  149. */
  150. @DS(value = SwitchConstant.DS_MASTER_2)
  151. public void sycnHydomcAssetspec(List<WdfacilityRelPersagy> wdfacilityRelList, String wdProjectid, JSONObject infosObj, java.util.Date updateTime) {
  152. log.debug("准备同步万达设备参数对象数据");
  153. HydomcAssetspec hydomcAssetspec;
  154. for (WdfacilityRelPersagy wdfacilityRelPersagy : wdfacilityRelList) {
  155. // 根据万达设备信息表的SITEID、SBYBM、ASSETATTRID查询数据是否存在
  156. hydomcAssetspec = this.getHydomcAssetspec(wdProjectid, StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_CODE)), wdfacilityRelPersagy.getAssetattrid());
  157. if (hydomcAssetspec == null) {
  158. log.debug("万达表hydomc_assetspec没有这条数据,准备新增");
  159. hydomcAssetspec = this.handleHydomcAssetspec(new HydomcAssetspec(), wdProjectid, infosObj, wdfacilityRelPersagy, updateTime);
  160. this.hydomcAssetspecMapper.insert(hydomcAssetspec);
  161. } else {
  162. // key为wdfacility_rel_persagy的code值从debugs取 有值update 无值(空、空字符串)就是delete
  163. if (StringUtils.isBlank(StringTool.object2String(infosObj.get(wdfacilityRelPersagy.getCode())))) {
  164. log.debug("万达表hydomc_assetspec有这条数据,但code没有值,只需要更新数据状态为delete即可");
  165. hydomcAssetspec.setDatastatus(SwitchConstant.IS_DELETE); // 数据状态 update/delete
  166. hydomcAssetspec.setChangedate(updateTime); // 数据更新时间 增量字段
  167. } else {
  168. log.debug("万达表hydomc_assetspec有这条数据,code有值,需要更新所有字段");
  169. hydomcAssetspec = this.handleHydomcAssetspec(hydomcAssetspec, wdProjectid, infosObj, wdfacilityRelPersagy, updateTime);
  170. }
  171. this.hydomcAssetspecMapper.updateById(hydomcAssetspec);
  172. }
  173. }
  174. }
  175. /**
  176. * @param hydomcAssetspec 设备参数信息对象
  177. * @param wdProjectid 广场ID(万达项目ID)
  178. * @param infosObj 博锐尚格项目表debugs字段数据
  179. * @param wdfacilityRelPersagy 万达设备参数信息表与博锐尚格信息点的映射表
  180. * @param changedate 数据更新时间
  181. * @return com.persagy.transfer.pojo.dto.HydomcAssetspec
  182. * @author YangWanYi
  183. * @describe 处理设备参数信息对象字段映射
  184. * @date 2021/9/17 10:55
  185. */
  186. public HydomcAssetspec handleHydomcAssetspec(HydomcAssetspec hydomcAssetspec, String wdProjectid, JSONObject infosObj, WdfacilityRelPersagy wdfacilityRelPersagy, Date changedate) {
  187. hydomcAssetspec.setSiteid(wdProjectid); // 广场id 关联设备信息 Pj4403070003
  188. hydomcAssetspec.setSbybm(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_CODE))); // 设备编码 关联设备信息 wD_gongchengxinxihua
  189. hydomcAssetspec.setClassstructureid(StringTool.object2String(infosObj.get(InfosKeyConstant.EQUIPMENT_SORT))); // 设备分类id 1507
  190. // 根据Datatype判断设置设备参数数字值还是设备参数文本值 key为wdfacility_rel_persagy的code值从debugs取
  191. final String IS_NUMBER = "数字";
  192. final String IS_LETTER = "字母";
  193. if (IS_NUMBER.equals(wdfacilityRelPersagy.getDatatype())) { // 是数字
  194. log.debug("dataType是数字");
  195. hydomcAssetspec.setNumvalue(StringTool.object2Double(infosObj.get(wdfacilityRelPersagy.getCode()))); // 设备参数数字值 (取自debugs)
  196. } else if (IS_LETTER.equals(wdfacilityRelPersagy.getDatatype())) { // 是字母
  197. log.debug("dataType是字母");
  198. hydomcAssetspec.setAlnvalue(StringTool.object2String(infosObj.get(wdfacilityRelPersagy.getCode()))); // 设备参数文本值 (取自debugs)
  199. }
  200. // key为wdfacility_rel_persagy的code值从debugs取 有值update 无值(空、空字符串)就是delete
  201. if (StringUtils.isBlank(StringTool.object2String(infosObj.get(wdfacilityRelPersagy.getCode())))) {
  202. log.debug("code没有值,数据状态设置为delete");
  203. hydomcAssetspec.setDatastatus(SwitchConstant.IS_DELETE); // 数据状态 update/delete
  204. } else {
  205. log.debug("code有值,数据状态设置为update");
  206. hydomcAssetspec.setDatastatus(SwitchConstant.IS_UPDATE); // 数据状态 update/delete
  207. }
  208. hydomcAssetspec.setClassqc(wdfacilityRelPersagy.getClassqc()); // 设备分类名称 电梯系统/扶梯/人行步道 (取自中间表wdfacility_rel_persagy)
  209. hydomcAssetspec.setAssetattrid(wdfacilityRelPersagy.getAssetattrid()); // 主键 设备参数id 1106 (取自中间表wdfacility_rel_persagy)
  210. hydomcAssetspec.setCsdesc(wdfacilityRelPersagy.getCsdesc()); // 设备参数名称 (取自中间表wdfacility_rel_persagy)
  211. hydomcAssetspec.setDatatype(wdfacilityRelPersagy.getDatatype()); // 设备参数类型 (取自中间表wdfacility_rel_persagy)
  212. hydomcAssetspec.setMeasureunitid(wdfacilityRelPersagy.getMeasureunitid()); // 设备参数单位编码 (取自中间表wdfacility_rel_persagy)
  213. hydomcAssetspec.setCsjldw(wdfacilityRelPersagy.getCsjldw()); // 设备参数单位名称 (取自中间表wdfacility_rel_persagy)
  214. hydomcAssetspec.setChangedate(changedate); // 数据更新时间 增量字段
  215. return hydomcAssetspec;
  216. }
  217. /**
  218. * @param siteId 关联的设备信息字段 广场ID 即万达项目ID
  219. * @param sbybm 关联的设备信息字段 设备编码
  220. * @param assetAttrId 设备分类ID
  221. * @return com.persagy.transfer.pojo.dto.HydomcAssetspec
  222. * @author YangWanYi
  223. * @describe 根据SITEID、SBYBM、ASSETATTRID查询万达设备信息表数据
  224. * @date 2021/9/17 10:13
  225. */
  226. @Override
  227. @DS(value = SwitchConstant.DS_MASTER_2)
  228. public HydomcAssetspec getHydomcAssetspec(String siteId, String sbybm, String assetAttrId) {
  229. LambdaQueryWrapper<HydomcAssetspec> queryHydomcAssetWrapper = new HydomcAssetspec.BuilderQueryWrapper().builder();
  230. queryHydomcAssetWrapper.eq(HydomcAssetspec::getSiteid, siteId);
  231. queryHydomcAssetWrapper.eq(HydomcAssetspec::getSbybm, sbybm);
  232. queryHydomcAssetWrapper.eq(HydomcAssetspec::getAssetattrid, assetAttrId);
  233. return this.hydomcAssetspecMapper.selectOne(queryHydomcAssetWrapper);
  234. }
  235. /**
  236. * @param primaryKey 万达设备信息主表主键
  237. * @return com.persagy.transfer.pojo.dto.HydomcAsset
  238. * @author YangWanYi
  239. * @describe 根据主键获取万达设备信息
  240. * @date 2021/9/16 15:31
  241. */
  242. @DS(value = SwitchConstant.DS_MASTER_2)
  243. public HydomcAsset getHydomcAssetByPKey(String primaryKey) {
  244. LambdaQueryWrapper<HydomcAsset> queryHydomcAssetWrapper = new HydomcAsset.BuilderQueryWrapper().builder();
  245. queryHydomcAssetWrapper.eq(HydomcAsset::getSbybm, primaryKey);
  246. return this.hydomcAssetMapper.selectOne(queryHydomcAssetWrapper);
  247. }
  248. }