package com.java110.user.cmd.owner; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.java110.core.annotation.Java110Cmd; import com.java110.core.annotation.Java110Transactional; import com.java110.core.context.ICmdDataFlowContext; import com.java110.core.event.cmd.Cmd; import com.java110.core.event.cmd.CmdEvent; import com.java110.core.factory.GenerateCodeFactory; import com.java110.dto.machine.CarInoutDto; import com.java110.dto.owner.OwnerCarDto; import com.java110.dto.parking.ParkingSpaceDto; import com.java110.intf.common.ICarInoutInnerServiceSMO; import com.java110.intf.community.IParkingSpaceInnerServiceSMO; import com.java110.intf.community.IParkingSpaceV1InnerServiceSMO; import com.java110.intf.fee.IFeeConfigInnerServiceSMO; import com.java110.intf.user.IOwnerCarAttrInnerServiceSMO; import com.java110.intf.user.IOwnerCarInnerServiceSMO; import com.java110.intf.user.IOwnerCarV1InnerServiceSMO; import com.java110.po.car.OwnerCarPo; import com.java110.po.ownerCarAttr.OwnerCarAttrPo; import com.java110.po.parking.ParkingSpacePo; import com.java110.utils.cache.MappingCache; import com.java110.utils.exception.CmdException; import com.java110.utils.util.Assert; import com.java110.utils.util.BeanConvertUtil; import com.java110.utils.util.DateUtil; import com.java110.utils.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import java.util.Date; import java.util.List; @Java110Cmd(serviceCode = "owner.saveOwnerCar") public class SaveOwnerCarCmd extends Cmd { @Autowired private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl; @Autowired private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl; @Autowired private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl; @Autowired private IOwnerCarAttrInnerServiceSMO ownerCarAttrInnerServiceSMOImpl; @Autowired private IOwnerCarV1InnerServiceSMO ownerCarV1InnerServiceSMOImpl; @Autowired private IParkingSpaceV1InnerServiceSMO parkingSpaceV1InnerServiceSMOImpl; @Autowired private ICarInoutInnerServiceSMO carInoutInnerServiceSMOImpl; @Override public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException { Assert.jsonObjectHaveKey(reqJson, "communityId", "未包含小区ID"); Assert.jsonObjectHaveKey(reqJson, "ownerId", "请求报文中未包含ownerId"); Assert.jsonObjectHaveKey(reqJson, "carNum", "请求报文中未包含carNum"); Assert.jsonObjectHaveKey(reqJson, "carBrand", "请求报文中未包含carBrand"); Assert.jsonObjectHaveKey(reqJson, "carType", "请求报文中未包含carType"); Assert.jsonObjectHaveKey(reqJson, "carColor", "未包含carColor"); Assert.jsonObjectHaveKey(reqJson, "psId", "未包含psId"); Assert.jsonObjectHaveKey(reqJson, "storeId", "未包含storeId"); Assert.hasLength(reqJson.getString("communityId"), "小区ID不能为空"); Assert.hasLength(reqJson.getString("ownerId"), "ownerId不能为空"); Assert.hasLength(reqJson.getString("psId"), "psId不能为空"); //检查车位是否是空闲状态 ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto(); parkingSpaceDto.setPsId(reqJson.getString("psId")); List parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto); Assert.listOnlyOne(parkingSpaceDtos, "查询车位错误!"); //获取车位状态 String state = parkingSpaceDtos.get(0).getState(); if (StringUtil.isEmpty(state) || !state.equals("F")) { throw new IllegalArgumentException("该车位不是空闲状态!"); } //校验车牌号是否存在 OwnerCarDto ownerCarDto = new OwnerCarDto(); ownerCarDto.setCommunityId(reqJson.getString("communityId")); ownerCarDto.setCarNum(reqJson.getString("carNum")); ownerCarDto.setCarTypeCds(new String[]{OwnerCarDto.CAR_TYPE_PRIMARY, OwnerCarDto.CAR_TYPE_MEMBER}); // 临时车除外 int count = ownerCarInnerServiceSMOImpl.queryOwnerCarsCount(ownerCarDto); if (count > 0) { throw new IllegalArgumentException("车辆已存在"); } //判断临时车 是否在场 String parkingIn = MappingCache.getValue("TEMP_CAR_IN_PARKING"); if (!"ON".equals(parkingIn)) { return; } ownerCarDto = new OwnerCarDto(); ownerCarDto.setCommunityId(reqJson.getString("communityId")); ownerCarDto.setCarNum(reqJson.getString("carNum")); ownerCarDto.setCarTypeCds(new String[]{OwnerCarDto.CAR_TYPE_TEMP}); // 临时车除外 count = ownerCarInnerServiceSMOImpl.queryOwnerCarsCount(ownerCarDto); if (count < 1) { return; } CarInoutDto carInoutDto = new CarInoutDto(); carInoutDto.setCarNum(reqJson.getString("carNum")); carInoutDto.setStates(new String[]{CarInoutDto.STATE_PAY, CarInoutDto.STATE_IN, CarInoutDto.STATE_REPAY}); List carInoutDtos = carInoutInnerServiceSMOImpl.queryCarInouts(carInoutDto); if (carInoutDtos != null && carInoutDtos.size() > 0) { throw new CmdException("车辆在场,请出场后再办理月租车"); } } @Override @Java110Transactional public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException { if (!reqJson.containsKey("leaseType")) { reqJson.put("leaseType", OwnerCarDto.LEASE_TYPE_MONTH); } if (!OwnerCarDto.LEASE_TYPE_MONTH.equals(reqJson.getString("leaseType"))) { reqJson.put("startTime", DateUtil.getFormatTimeString(new Date(), DateUtil.DATE_FORMATE_STRING_B)); reqJson.put("endTime", "2037-01-01"); } JSONObject businessOwnerCar = new JSONObject(); businessOwnerCar.putAll(reqJson); businessOwnerCar.put("memberId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_carId)); if (!reqJson.containsKey("carId") || reqJson.getString("carId").startsWith("-")) { businessOwnerCar.put("carId", businessOwnerCar.getString("memberId")); } OwnerCarPo ownerCarPo = BeanConvertUtil.covertBean(businessOwnerCar, OwnerCarPo.class); ownerCarPo.setState(OwnerCarDto.STATE_NORMAL); //没有指定时为主要车辆 if (!reqJson.containsKey("carTypeCd") || StringUtil.isEmpty(reqJson.getString("carTypeCd"))) { ownerCarPo.setCarTypeCd(OwnerCarDto.CAR_TYPE_PRIMARY); } //添加车辆属性 dealOwnerCarAttr(reqJson, ownerCarPo); int flag = ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo); if (flag < 1) { throw new CmdException("保存车辆属性失败"); } ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto(); parkingSpaceDto.setCommunityId(reqJson.getString("communityId")); parkingSpaceDto.setPsId(reqJson.getString("psId")); List parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto); if (parkingSpaceDtos == null || parkingSpaceDtos.size() != 1) { //throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "未查询到停车位信息" + JSONObject.toJSONString(parkingSpaceDto)); return; } parkingSpaceDto = parkingSpaceDtos.get(0); JSONObject businessParkingSpace = new JSONObject(); businessParkingSpace.putAll(BeanConvertUtil.beanCovertMap(parkingSpaceDto)); ParkingSpacePo parkingSpacePo = BeanConvertUtil.covertBean(businessParkingSpace, ParkingSpacePo.class); parkingSpacePo.setState("H"); //S 出售 H 出租 F 空闲 flag = parkingSpaceV1InnerServiceSMOImpl.updateParkingSpace(parkingSpacePo); if (flag < 1) { throw new CmdException("修改车位状态失败"); } } private void dealOwnerCarAttr(JSONObject paramInJson, OwnerCarPo ownerCarPo) { if (!paramInJson.containsKey("attrs")) { return; } JSONArray attrs = paramInJson.getJSONArray("attrs"); if (attrs.size() < 1) { return; } JSONObject attr = null; int flag = 0; for (int attrIndex = 0; attrIndex < attrs.size(); attrIndex++) { attr = attrs.getJSONObject(attrIndex); OwnerCarAttrPo ownerCarAttrPo = new OwnerCarAttrPo(); ownerCarAttrPo.setAttrId(GenerateCodeFactory.getAttrId()); ownerCarAttrPo.setCommunityId(ownerCarPo.getCommunityId()); ownerCarAttrPo.setCarId(ownerCarPo.getCarId()); ownerCarAttrPo.setSpecCd(attr.getString("specCd")); ownerCarAttrPo.setValue(attr.getString("value")); flag = ownerCarAttrInnerServiceSMOImpl.saveOwnerCarAttr(ownerCarAttrPo); if (flag < 1) { throw new CmdException("保存车辆属性失败"); } } } }