UpdateVisitSdCmd.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. package com.java110.community.cmd.visit;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.java110.core.annotation.Java110Cmd;
  4. import com.java110.core.annotation.Java110Transactional;
  5. import com.java110.core.context.ICmdDataFlowContext;
  6. import com.java110.core.event.cmd.Cmd;
  7. import com.java110.core.event.cmd.CmdEvent;
  8. import com.java110.core.factory.CommunitySettingFactory;
  9. import com.java110.core.factory.GenerateCodeFactory;
  10. import com.java110.dto.owner.OwnerCarDto;
  11. import com.java110.dto.parking.ParkingSpaceDto;
  12. import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
  13. import com.java110.intf.community.IVisitV1InnerServiceSMO;
  14. import com.java110.intf.user.IOwnerCarAttrInnerServiceSMO;
  15. import com.java110.intf.user.IOwnerCarInnerServiceSMO;
  16. import com.java110.intf.user.IOwnerCarV1InnerServiceSMO;
  17. import com.java110.po.car.OwnerCarPo;
  18. import com.java110.po.owner.VisitPo;
  19. import com.java110.po.ownerCarAttr.OwnerCarAttrPo;
  20. import com.java110.po.parking.ParkingSpacePo;
  21. import com.java110.utils.exception.CmdException;
  22. import com.java110.utils.util.Assert;
  23. import com.java110.utils.util.BeanConvertUtil;
  24. import com.java110.utils.util.DateUtil;
  25. import com.java110.utils.util.StringUtil;
  26. import com.java110.vo.ResultVo;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.http.ResponseEntity;
  29. import java.util.Calendar;
  30. import java.util.Date;
  31. import java.util.List;
  32. import java.util.Random;
  33. //@Java110Cmd(serviceCode = "visit.updateVisit")
  34. public class UpdateVisitSdCmd extends Cmd {
  35. @Autowired
  36. private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
  37. @Autowired
  38. private IOwnerCarV1InnerServiceSMO ownerCarV1InnerServiceSMOImpl;
  39. @Autowired
  40. private IOwnerCarAttrInnerServiceSMO ownerCarAttrInnerServiceSMOImpl;
  41. @Autowired
  42. private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
  43. @Autowired
  44. private IVisitV1InnerServiceSMO visitV1InnerServiceSMOImpl;
  45. //键
  46. public static final String CAR_FREE_TIME = "CAR_FREE_TIME";
  47. //键
  48. public static final String ASCRIPTION_CAR_AREA_ID = "ASCRIPTION_CAR_AREA_ID";
  49. @Override
  50. public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
  51. Assert.hasKeyAndValue(reqJson, "vId", "访客记录ID不能为空");
  52. Assert.hasKeyAndValue(reqJson, "vName", "必填,请填写访客姓名");
  53. Assert.hasKeyAndValue(reqJson, "visitGender", "必填,请填写访客姓名");
  54. Assert.hasKeyAndValue(reqJson, "phoneNumber", "必填,请填写访客联系方式");
  55. Assert.hasKeyAndValue(reqJson, "visitTime", "必填,请填写访客拜访时间");
  56. }
  57. @Override
  58. @Java110Transactional
  59. public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
  60. String userId = context.getReqHeaders().get("user-id");
  61. //是否有空闲车位
  62. boolean freeSpace = false;
  63. //是否存在车辆
  64. boolean existCar = false;
  65. //校验车牌号是否存在
  66. OwnerCarDto ownerCarDto1 = new OwnerCarDto();
  67. ownerCarDto1.setCommunityId(reqJson.getString("communityId"));
  68. ownerCarDto1.setCarNum(reqJson.getString("carNum"));
  69. int count = ownerCarInnerServiceSMOImpl.queryOwnerCarsCount(ownerCarDto1);
  70. if (count > 0) {
  71. existCar = true;
  72. reqJson.put("psId", "-1");
  73. }
  74. //flag审核操作 并且 审核通过 state=1 并且业主车辆不存在的情况先existCar=false
  75. if ("1".equals(reqJson.getString("flag"))
  76. && "1".equals(reqJson.getString("state"))
  77. && !existCar) {
  78. //获取预约车免费时长的值
  79. String freeTime = CommunitySettingFactory.getValue(reqJson.getString("communityId"), CAR_FREE_TIME);
  80. if (StringUtil.isEmpty(freeTime)) {
  81. freeTime = "120";
  82. }
  83. Date time = DateUtil.getDateFromStringA(reqJson.getString("visitTime"));
  84. Calendar newTime = Calendar.getInstance();
  85. newTime.setTime(time);
  86. newTime.add(Calendar.MINUTE, Integer.parseInt(freeTime));//日期加上分钟
  87. Date newDate = newTime.getTime();
  88. String finishFreeTime = DateUtil.getFormatTimeString(newDate, DateUtil.DATE_FORMATE_STRING_A);
  89. reqJson.put("freeTime", finishFreeTime);
  90. //获取小区配置里配置的停车场id
  91. String parkingAreaId = CommunitySettingFactory.getValue(reqJson.getString("communityId"), ASCRIPTION_CAR_AREA_ID);
  92. if (StringUtil.isEmpty(parkingAreaId)) { //如果没有配置停车场id,就随便分配该小区下一个空闲车位
  93. ParkingSpaceDto parkingSpace = new ParkingSpaceDto();
  94. parkingSpace.setCommunityId(reqJson.getString("communityId"));
  95. parkingSpace.setState("F"); //车位状态 出售 S,出租 H ,空闲 F
  96. parkingSpace.setParkingType("1"); //1:普通车位 2:子母车位 3:豪华车位
  97. List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpace);
  98. if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) {
  99. freeSpace = true;
  100. } else {
  101. //随机生成一个不大于集合长度的整数
  102. Random random = new Random();
  103. int i = random.nextInt(parkingSpaceDtos.size());
  104. //获取车位id
  105. String psId = parkingSpaceDtos.get(i).getPsId();
  106. reqJson.put("psId", psId);
  107. }
  108. } else {
  109. ParkingSpaceDto parkingSpace = new ParkingSpaceDto();
  110. parkingSpace.setCommunityId(reqJson.getString("communityId"));
  111. parkingSpace.setPaId(parkingAreaId); //停车场id
  112. parkingSpace.setState("F"); //车位状态 出售 S,出租 H ,空闲 F
  113. parkingSpace.setParkingType("1"); //1:普通车位 2:子母车位 3:豪华车位
  114. List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpace);
  115. if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) {
  116. freeSpace = true;
  117. } else {
  118. //随机生成一个不大于集合长度的整数
  119. Random random = new Random();
  120. int i = random.nextInt(parkingSpaceDtos.size());
  121. //获取车位id
  122. String psId = parkingSpaceDtos.get(i).getPsId();
  123. reqJson.put("psId", psId);
  124. }
  125. }
  126. }
  127. String result = "";
  128. if ("1".equals(reqJson.getString("state"))) {
  129. result = "审核通过!";
  130. } else if ("2".equals(reqJson.getString("state"))) {
  131. result = "审核不通过!";
  132. }
  133. if (existCar) {
  134. result = "访客信息审核成功,车辆已经存在预约,请您在预约到期后,再次进行车辆预约,谢谢!";
  135. }
  136. if (freeSpace) {
  137. result = "访客信息审核成功,当前停车场已无空闲车位,登记车辆将暂时不能进入停车场,请您合理安排出行。";
  138. }
  139. reqJson.put("stateRemark", result);
  140. updateVisit(reqJson);
  141. if (existCar) {
  142. ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "访客信息审核成功,车辆已经存在预约,请您在预约到期后,再次进行车辆预约,谢谢!");
  143. context.setResponseEntity(responseEntity);
  144. return;
  145. }
  146. if (freeSpace) {
  147. ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(ResultVo.CODE_BUSINESS_VERIFICATION, "访客信息审核成功,当前停车场已无空闲车位,登记车辆将暂时不能进入停车场,请您合理安排出行。");
  148. context.setResponseEntity(responseEntity);
  149. return;
  150. }
  151. //审核通过且有车位就更新车位状态
  152. if (reqJson.containsKey("state") && "1".equals(reqJson.getString("state"))
  153. && "1".equals(reqJson.getString("flag"))
  154. && !existCar) {
  155. ParkingSpaceDto parkingSpace = new ParkingSpaceDto();
  156. parkingSpace.setPsId(reqJson.getString("psId"));
  157. //查询停车位
  158. List<ParkingSpaceDto> parkingSpaces = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpace);
  159. Assert.listOnlyOne(parkingSpaces, "查询停车位错误!");
  160. //添加车辆信息
  161. OwnerCarPo ownerCarPo = new OwnerCarPo();
  162. ownerCarPo.setCarId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_carId));
  163. ownerCarPo.setOwnerId(reqJson.getString("ownerId"));
  164. ownerCarPo.setbId("-1");
  165. ownerCarPo.setCarNum(reqJson.getString("carNum"));
  166. ownerCarPo.setCarBrand("无(预约车)");
  167. ownerCarPo.setCarType("9901");
  168. ownerCarPo.setCarColor("无(预约车)");
  169. ownerCarPo.setPsId(reqJson.getString("psId"));
  170. ownerCarPo.setUserId(userId);
  171. ownerCarPo.setRemark("访客登记预约车");
  172. ownerCarPo.setCommunityId(reqJson.getString("communityId"));
  173. ownerCarPo.setStartTime(reqJson.getString("visitTime"));
  174. ownerCarPo.setEndTime(reqJson.getString("freeTime"));
  175. ownerCarPo.setState(OwnerCarDto.STATE_NORMAL); //1001 正常状态,2002 车位释放欠费状态 3003 车位释放
  176. ownerCarPo.setCarTypeCd(OwnerCarDto.CAR_TYPE_TEMP); //1001 业主车辆 1002 成员车辆 1003 临时车
  177. ownerCarPo.setMemberId(reqJson.getString("ownerId"));
  178. ownerCarPo.setLeaseType("R"); //H 月租车 S 出售车 I 内部车 NM 免费车 R 预约车
  179. ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo);
  180. //添加车辆属性
  181. OwnerCarAttrPo ownerCarAttrPo = new OwnerCarAttrPo();
  182. ownerCarAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_cartId));
  183. ownerCarAttrPo.setCarId(ownerCarPo.getCarId());
  184. ownerCarAttrPo.setCommunityId(ownerCarPo.getCommunityId());
  185. ownerCarAttrPo.setSpecCd("6443000036"); //6443000036业主车辆
  186. ownerCarAttrPo.setValue("true"); //预约车
  187. ownerCarAttrPo.setbId("-1");
  188. ownerCarAttrInnerServiceSMOImpl.saveOwnerCarAttr(ownerCarAttrPo);
  189. //更新车位状态
  190. ParkingSpacePo parkingSpacePo = new ParkingSpacePo();
  191. parkingSpacePo.setPsId(reqJson.getString("psId"));
  192. parkingSpacePo.setState("H"); //车位状态 出售 S,出租 H ,空闲 F
  193. parkingSpaceInnerServiceSMOImpl.updateParkingSpace(parkingSpacePo);
  194. }
  195. }
  196. /**
  197. * 添加小区信息
  198. *
  199. * @param paramInJson 接口调用放传入入参
  200. * @return 订单服务能够接受的报文
  201. */
  202. public void updateVisit(JSONObject paramInJson) {
  203. JSONObject businessVisit = new JSONObject();
  204. businessVisit.putAll(paramInJson);
  205. VisitPo visitPo = BeanConvertUtil.covertBean(businessVisit, VisitPo.class);
  206. int flag = visitV1InnerServiceSMOImpl.updateVisit(visitPo);
  207. if (flag < 1) {
  208. throw new CmdException("修改访客失败");
  209. }
  210. }
  211. }