TranslateOwnerToMachineChangeMachine.java 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. package com.java110.hardwareAdapation.thread;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.java110.core.factory.GenerateCodeFactory;
  4. import com.java110.core.smo.hardwareAdapation.IMachineInnerServiceSMO;
  5. import com.java110.core.smo.order.IOrderInnerServiceSMO;
  6. import com.java110.core.smo.owner.IOwnerInnerServiceSMO;
  7. import com.java110.core.smo.room.IRoomInnerServiceSMO;
  8. import com.java110.dto.owner.OwnerDto;
  9. import com.java110.dto.RoomDto;
  10. import com.java110.dto.hardwareAdapation.MachineDto;
  11. import com.java110.dto.order.OrderDto;
  12. import com.java110.hardwareAdapation.dao.IMachineTranslateServiceDao;
  13. import com.java110.utils.cache.MappingCache;
  14. import com.java110.utils.constant.BusinessTypeConstant;
  15. import com.java110.utils.constant.StatusConstant;
  16. import com.java110.utils.factory.ApplicationContextFactory;
  17. import com.java110.utils.util.StringUtil;
  18. import org.slf4j.Logger;
  19. import org.slf4j.LoggerFactory;
  20. import java.util.ArrayList;
  21. import java.util.Date;
  22. import java.util.HashMap;
  23. import java.util.List;
  24. import java.util.Map;
  25. /**
  26. * 从订单中同步业主信息至设备中间表
  27. * add by wuxw 2019-11-14
  28. */
  29. public class TranslateOwnerToMachineChangeMachine implements Runnable {
  30. Logger logger = LoggerFactory.getLogger(TranslateOwnerToMachineChangeMachine.class);
  31. public static final long DEFAULT_WAIT_SECOND = 1000 * 60; // 默认30秒执行一次
  32. public static boolean TRANSLATE_STATE = false;
  33. private IOrderInnerServiceSMO orderInnerServiceSMOImpl;
  34. private IOwnerInnerServiceSMO ownerInnerServiceSMOImpl;
  35. private IMachineInnerServiceSMO machineInnerServiceSMOImpl;
  36. private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
  37. private IMachineTranslateServiceDao machineTranslateServiceDaoImpl;
  38. public TranslateOwnerToMachineChangeMachine(boolean state) {
  39. TRANSLATE_STATE = state;
  40. orderInnerServiceSMOImpl = ApplicationContextFactory.getBean(IOrderInnerServiceSMO.class.getName(), IOrderInnerServiceSMO.class);
  41. ownerInnerServiceSMOImpl = ApplicationContextFactory.getBean(IOwnerInnerServiceSMO.class.getName(), IOwnerInnerServiceSMO.class);
  42. roomInnerServiceSMOImpl = ApplicationContextFactory.getBean(IRoomInnerServiceSMO.class.getName(), IRoomInnerServiceSMO.class);
  43. machineInnerServiceSMOImpl = ApplicationContextFactory.getBean("machineInnerServiceSMOImpl", IMachineInnerServiceSMO.class);
  44. machineTranslateServiceDaoImpl = ApplicationContextFactory.getBean("machineTranslateServiceDaoImpl", IMachineTranslateServiceDao.class);
  45. }
  46. @Override
  47. public void run() {
  48. long waitTime = DEFAULT_WAIT_SECOND;
  49. while (TRANSLATE_STATE) {
  50. try {
  51. executeTask();
  52. waitTime = StringUtil.isNumber(MappingCache.getValue("DEFAULT_WAIT_SECOND")) ?
  53. Long.parseLong(MappingCache.getValue("DEFAULT_WAIT_SECOND")) : DEFAULT_WAIT_SECOND;
  54. Thread.sleep(waitTime);
  55. } catch (Throwable e) {
  56. logger.error("执行订单中同步业主信息至设备中失败", e);
  57. }
  58. }
  59. }
  60. /**
  61. * 执行任务
  62. */
  63. private void executeTask() {
  64. MachineDto machineDto = null;
  65. //查询订单信息
  66. OrderDto orderDto = new OrderDto();
  67. List<OrderDto> orderDtos = orderInnerServiceSMOImpl.queryMachineOrders(orderDto);
  68. for (OrderDto tmpOrderDto : orderDtos) {
  69. logger.debug("开始处理订单" + JSONObject.toJSONString(tmpOrderDto));
  70. try {
  71. //根据bId 查询硬件信息
  72. machineDto = new MachineDto();
  73. machineDto.setbId(tmpOrderDto.getbId());
  74. List<MachineDto> machineDtos = machineInnerServiceSMOImpl.queryMachines(machineDto);
  75. if (machineDtos == null || machineDtos.size() == 0) {
  76. //刷新 状态为C1
  77. orderInnerServiceSMOImpl.updateBusinessStatusCd(tmpOrderDto);
  78. logger.debug("没有数据数据直接刷为C1" + JSONObject.toJSONString(tmpOrderDto));
  79. continue;
  80. }
  81. if (!"9996".equals(machineDtos.get(0).getMachineTypeCd())) {
  82. dealData(tmpOrderDto, machineDtos.get(0));
  83. }
  84. //刷新 状态为C1
  85. orderInnerServiceSMOImpl.updateBusinessStatusCd(tmpOrderDto);
  86. } catch (Exception e) {
  87. logger.error("执行订单任务失败", e);
  88. }
  89. }
  90. }
  91. /**
  92. * 将业主数据同步给所有该小区设备
  93. *
  94. * @param tmpOrderDto
  95. * @param machineDto
  96. */
  97. private void dealData(OrderDto tmpOrderDto, MachineDto machineDto) {
  98. //拿到小区ID
  99. String communityId = machineDto.getCommunityId();
  100. //根据小区ID查询现有设备
  101. OwnerDto ownerDto = new OwnerDto();
  102. ownerDto.setCommunityId(communityId);
  103. List<OwnerDto> ownerDtos = null;
  104. String locationTypeCd = machineDto.getLocationTypeCd();
  105. if ("1000,1001,1002,1003".contains(locationTypeCd)) {//查询整个小区的业主
  106. ownerDtos = ownerInnerServiceSMOImpl.queryOwnerMembers(ownerDto);
  107. } else if ("2000".equals(locationTypeCd)) {//2000 单元门 ,则这个单元下的业主同步
  108. //先根据单元门ID 查询 房屋
  109. RoomDto roomDto = new RoomDto();
  110. roomDto.setUnitId(machineDto.getLocationObjId());
  111. roomDto.setCommunityId(machineDto.getCommunityId());
  112. List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
  113. if (roomDtos == null || roomDtos.size() == 0) { // 单元下没有房屋
  114. return;
  115. }
  116. ownerDto.setRoomIds(getRoomIds(roomDtos));
  117. ownerDtos = ownerInnerServiceSMOImpl.queryOwnerMembers(ownerDto);
  118. } else if ("3000".equals(locationTypeCd)) {// 3000 房屋门
  119. ownerDto.setRoomId(machineDto.getLocationObjId());
  120. ownerDtos = ownerInnerServiceSMOImpl.queryOwnerMembers(ownerDto);
  121. }
  122. if (ownerDtos == null) {
  123. return;
  124. }
  125. for (OwnerDto tmpOwnerDto : ownerDtos) {
  126. if (BusinessTypeConstant.BUSINESS_TYPE_SAVE_MACHINE.equals(tmpOrderDto.getBusinessTypeCd())
  127. || BusinessTypeConstant.BUSINESS_TYPE_UPDATE_MACHINE.equals(tmpOrderDto.getBusinessTypeCd())) {
  128. saveMachineTranslate(machineDto, tmpOwnerDto);
  129. // } else if (BusinessTypeConstant.BUSINESS_TYPE_UPDATE_MACHINE.equals(tmpOrderDto.getBusinessTypeCd())) {
  130. // updateMachineTranslate(machineDto, tmpOwnerDto);
  131. } else if (BusinessTypeConstant.BUSINESS_TYPE_DELETE_MACHINE.equals(tmpOrderDto.getBusinessTypeCd())) {
  132. deleteMachineTranslate(machineDto, tmpOwnerDto);
  133. } else {
  134. }
  135. }
  136. }
  137. private String[] getRoomIds(List<RoomDto> roomDtos) {
  138. List<String> roomIds = new ArrayList<String>();
  139. for (RoomDto roomDto : roomDtos) {
  140. roomIds.add(roomDto.getRoomId());
  141. }
  142. return roomIds.toArray(new String[roomIds.size()]);
  143. }
  144. private void saveMachineTranslate(MachineDto tmpMachineDto, OwnerDto ownerDto) {
  145. Map paramInfo = new HashMap();
  146. paramInfo.put("machineId", tmpMachineDto.getMachineId());
  147. paramInfo.put("objId", ownerDto.getMemberId());
  148. int count = machineTranslateServiceDaoImpl.queryMachineTranslatesCount(paramInfo);
  149. if (count > 0) {
  150. updateMachineTranslate(tmpMachineDto, ownerDto);
  151. return;
  152. }
  153. Map info = new HashMap();
  154. //machine_id,machine_code,status_cd,type_cd,machine_translate_id,obj_id,obj_name,state,community_id,b_id
  155. info.put("machineTranslateId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_machineTranslateId));
  156. info.put("machineId", tmpMachineDto.getMachineId());
  157. info.put("machineCode", tmpMachineDto.getMachineCode());
  158. info.put("typeCd", "8899");
  159. info.put("objId", ownerDto.getMemberId());
  160. info.put("objName", ownerDto.getName());
  161. info.put("state", "10000");
  162. info.put("communityId", ownerDto.getCommunityId());
  163. info.put("bId", "-1");
  164. machineTranslateServiceDaoImpl.saveMachineTranslate(info);
  165. }
  166. private void updateMachineTranslate(MachineDto tmpMachineDto, OwnerDto ownerDto) {
  167. Map info = new HashMap();
  168. //machine_id,machine_code,status_cd,type_cd,machine_translate_id,obj_id,obj_name,state,community_id,b_id
  169. info.put("machineId", tmpMachineDto.getMachineId());
  170. info.put("objId", ownerDto.getMemberId());
  171. info.put("state", "10000");
  172. info.put("communityId", ownerDto.getCommunityId());
  173. info.put("updateTime", new Date());
  174. machineTranslateServiceDaoImpl.updateMachineTranslate(info);
  175. }
  176. private void deleteMachineTranslate(MachineDto tmpMachineDto, OwnerDto ownerDto) {
  177. Map info = new HashMap();
  178. //machine_id,machine_code,status_cd,type_cd,machine_translate_id,obj_id,obj_name,state,community_id,b_id
  179. info.put("machineId", tmpMachineDto.getMachineId());
  180. info.put("objId", ownerDto.getMemberId());
  181. info.put("statusCd", StatusConstant.STATUS_CD_INVALID);
  182. info.put("communityId", ownerDto.getCommunityId());
  183. info.put("updateTime", new Date());
  184. machineTranslateServiceDaoImpl.updateMachineTranslate(info);
  185. }
  186. }