| | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.java110.core.factory.GenerateCodeFactory; |
| | | import com.java110.dto.account.AccountDto; |
| | | import com.java110.dto.chargeMachine.ChargeMachineDto; |
| | | import com.java110.dto.chargeMachine.ChargeMachineFactoryDto; |
| | | import com.java110.dto.chargeMachine.ChargeMachineOrderDto; |
| | | import com.java110.dto.chargeMachine.NotifyChargeOrderDto; |
| | | import com.java110.dto.chargeMachine.ChargeMachineOrderCouponDto; |
| | | import com.java110.dto.chargeMachine.ChargeMachinePortDto; |
| | | import com.java110.dto.chargeMachine.ChargeRuleFeeDto; |
| | | import com.java110.dto.charge.ChargeMachineDto; |
| | | import com.java110.dto.charge.ChargeMachineFactoryDto; |
| | | import com.java110.dto.charge.ChargeMachineOrderDto; |
| | | import com.java110.dto.charge.NotifyChargeOrderDto; |
| | | import com.java110.dto.charge.ChargeMachineOrderCouponDto; |
| | | import com.java110.dto.charge.ChargeMachinePortDto; |
| | | import com.java110.dto.charge.ChargeRuleFeeDto; |
| | | import com.java110.dto.charge.ChargeMonthOrderDto; |
| | | import com.java110.intf.acct.IAccountInnerServiceSMO; |
| | | import com.java110.intf.common.*; |
| | | import com.java110.po.accountDetail.AccountDetailPo; |
| | | import com.java110.po.chargeMachineOrder.ChargeMachineOrderPo; |
| | | import com.java110.po.chargeMachineOrderAcct.ChargeMachineOrderAcctPo; |
| | | import com.java110.po.chargeMachineOrderCoupon.ChargeMachineOrderCouponPo; |
| | | import com.java110.po.chargeMachinePort.ChargeMachinePortPo; |
| | | import com.java110.po.account.AccountDetailPo; |
| | | import com.java110.po.charge.ChargeMachineOrderPo; |
| | | import com.java110.po.charge.ChargeMachineOrderAcctPo; |
| | | import com.java110.po.charge.ChargeMachineOrderCouponPo; |
| | | import com.java110.po.charge.ChargeMachinePortPo; |
| | | import com.java110.utils.exception.CmdException; |
| | | import com.java110.utils.factory.ApplicationContextFactory; |
| | | import com.java110.utils.util.Assert; |
| | |
| | | |
| | | @Autowired |
| | | private IChargeMachineOrderCouponV1InnerServiceSMO chargeMachineOrderCouponV1InnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IChargeMonthOrderV1InnerServiceSMO chargeMonthOrderV1InnerServiceSMOImpl; |
| | | |
| | | |
| | | @Override |
| | |
| | | } |
| | | |
| | | |
| | | //订单退款 这里不操作,以设备 通知为主 |
| | | // returnOrderMoney(chargeMachineDto, chargeMachinePortDto, "用户手工结束"); |
| | | |
| | | |
| | | return resultVo; |
| | | } |
| | | |
| | |
| | | * 订单退款 |
| | | * |
| | | * @param chargeMachineDto |
| | | * @param chargeMachinePortDto |
| | | */ |
| | | private void returnOrderMoney(ChargeMachineDto chargeMachineDto, ChargeMachinePortDto chargeMachinePortDto, String remark, String energy) { |
| | | // 退款 |
| | | ChargeMachineOrderDto chargeMachineOrderDto = new ChargeMachineOrderDto(); |
| | | chargeMachineOrderDto.setMachineId(chargeMachineDto.getMachineId()); |
| | | chargeMachineOrderDto.setPortId(chargeMachinePortDto.getPortId()); |
| | | chargeMachineOrderDto.setState(ChargeMachineOrderDto.STATE_DOING); |
| | | List<ChargeMachineOrderDto> chargeMachineOrderDtos = chargeMachineOrderV1InnerServiceSMOImpl.queryChargeMachineOrders(chargeMachineOrderDto); |
| | | private void returnOrderMoney(ChargeMachineDto chargeMachineDto, |
| | | String remark, |
| | | String energy, |
| | | List<ChargeMachineOrderDto> chargeMachineOrderDtos) { |
| | | |
| | | if (chargeMachineOrderDtos == null || chargeMachineOrderDtos.size() < 1) { |
| | | return; |
| | | } |
| | | |
| | | // String chargeHours = chargeMachineOrderDtos.get(0).getChargeHours(); |
| | | // double cHours = Double.parseDouble(chargeHours); |
| | | // if (999 == cHours) { |
| | | // cHours = 10; |
| | | // } |
| | | |
| | | Date startTime = DateUtil.getDateFromStringA(chargeMachineOrderDtos.get(0).getStartTime()); |
| | | |
| | |
| | | double usedHours = Math.ceil((calendar.getTime().getTime() - startTime.getTime()) / (60 * 60 * 1000.00)); |
| | | // 计算平均功率 |
| | | String power = energy; |
| | | if (usedHours < 0) { |
| | | if (usedHours <= 0) { |
| | | usedHours = 0; |
| | | }else{ |
| | | BigDecimal powerDec = new BigDecimal(Double.parseDouble(energy)).divide(new BigDecimal(usedHours),2,BigDecimal.ROUND_HALF_UP); |
| | | power = powerDec.doubleValue()+""; |
| | | } else { |
| | | BigDecimal powerDec = new BigDecimal(Double.parseDouble(energy)).divide(new BigDecimal(usedHours), 2, BigDecimal.ROUND_HALF_UP); |
| | | power = powerDec.doubleValue() + ""; |
| | | } |
| | | |
| | | // todo 优惠券抵扣 |
| | | JSONObject result = useCoupon(usedHours, chargeMachineOrderDtos); |
| | | usedHours = result.getDoubleValue("usedHours"); |
| | | if(StringUtil.isEmpty(remark)) { |
| | | if (StringUtil.isEmpty(remark)) { |
| | | remark = result.getString("remark"); |
| | | }else{ |
| | | remark = remark+";"+result.getString("remark"); |
| | | } else { |
| | | remark = remark + ";" + result.getString("remark"); |
| | | } |
| | | |
| | | ChargeRuleFeeDto chargeRuleFeeDto = new ChargeRuleFeeDto(); |
| | |
| | | } |
| | | |
| | | if (chargeRuleFeeDtos == null || chargeRuleFeeDtos.size() < 1) { |
| | | return; |
| | | throw new CmdException("未找到收费规则"); |
| | | } |
| | | |
| | | String durationPrice = chargeRuleFeeDtos.get(chargeRuleFeeDtos.size() - 1).getDurationPrice(); |
| | |
| | | |
| | | chargeMachineOrderAcctV1InnerServiceSMOImpl.saveChargeMachineOrderAcct(chargeMachineOrderAcctPo); |
| | | } |
| | | |
| | | public boolean ifMonthCard(String personTel, String communityId ) { |
| | | |
| | | ChargeMonthOrderDto chargeMonthOrderDto = new ChargeMonthOrderDto(); |
| | | chargeMonthOrderDto.setPersonTel(personTel); |
| | | chargeMonthOrderDto.setCommunityId(communityId); |
| | | chargeMonthOrderDto.setQueryTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)); |
| | | List<ChargeMonthOrderDto> chargeMonthOrderDtos = chargeMonthOrderV1InnerServiceSMOImpl.queryChargeMonthOrders(chargeMonthOrderDto); |
| | | if (chargeMonthOrderDtos == null || chargeMonthOrderDtos.size() < 1) { |
| | | return false; |
| | | } |
| | | |
| | | //todo 今天是否又充过电 |
| | | ChargeMachineOrderDto chargeMachineOrderDto = new ChargeMachineOrderDto(); |
| | | chargeMachineOrderDto.setPersonTel(personTel); |
| | | chargeMachineOrderDto.setCommunityId(communityId); |
| | | chargeMachineOrderDto.setQueryTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B)); |
| | | chargeMachineOrderDto.setState(ChargeMachineOrderDto.STATE_FINISH); |
| | | int count = chargeMachineOrderV1InnerServiceSMOImpl.queryChargeMachineOrdersCount(chargeMachineOrderDto); |
| | | |
| | | if(count >1){ |
| | | return false; |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | public boolean ifStartMonthCard(String personTel, String communityId ) { |
| | | |
| | | ChargeMonthOrderDto chargeMonthOrderDto = new ChargeMonthOrderDto(); |
| | | chargeMonthOrderDto.setPersonTel(personTel); |
| | | chargeMonthOrderDto.setCommunityId(communityId); |
| | | chargeMonthOrderDto.setQueryTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)); |
| | | List<ChargeMonthOrderDto> chargeMonthOrderDtos = chargeMonthOrderV1InnerServiceSMOImpl.queryChargeMonthOrders(chargeMonthOrderDto); |
| | | if (chargeMonthOrderDtos == null || chargeMonthOrderDtos.size() < 1) { |
| | | return false; |
| | | } |
| | | |
| | | //todo 今天是否又充过电 |
| | | ChargeMachineOrderDto chargeMachineOrderDto = new ChargeMachineOrderDto(); |
| | | chargeMachineOrderDto.setPersonTel(personTel); |
| | | chargeMachineOrderDto.setCommunityId(communityId); |
| | | chargeMachineOrderDto.setQueryStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B)); |
| | | chargeMachineOrderDto.setQueryEndTime(DateUtil.getAddDayStringB(DateUtil.getCurrentDate(),1)); |
| | | chargeMachineOrderDto.setState(ChargeMachineOrderDto.STATE_FINISH); |
| | | List<ChargeMachineOrderDto> chargeMachineOrderDtos = chargeMachineOrderV1InnerServiceSMOImpl.queryChargeMachineOrders(chargeMachineOrderDto); |
| | | |
| | | if (chargeMachineOrderDtos == null || chargeMachineOrderDtos.size() < 1) { |
| | | return true; |
| | | } |
| | | |
| | | |
| | | Date startTime = DateUtil.getDateFromStringA(chargeMachineOrderDtos.get(0).getStartTime()); |
| | | Date endTime = DateUtil.getDateFromStringA(chargeMachineOrderDtos.get(0).getEndTime()); |
| | | |
| | | |
| | | double usedHours = (endTime.getTime() - startTime.getTime()) / (60 * 60 * 1000.00); |
| | | |
| | | if (usedHours < 1) { |
| | | return true; |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 优惠券抵扣 小时 |
| | |
| | | @Override |
| | | public ResultVo finishCharge(NotifyChargeOrderDto notifyChargeOrderDto) { |
| | | |
| | | // // todo 生成 充电订单 |
| | | // ChargeMachineOrderPo chargeMachineOrderPo = new ChargeMachineOrderPo(); |
| | | // chargeMachineOrderPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)); |
| | | // chargeMachineOrderPo.setState(ChargeMachineOrderDto.STATE_FINISH); |
| | | // chargeMachineOrderPo.setOrderId(notifyChargeOrderDto.getOrderId()); |
| | | // chargeMachineOrderV1InnerServiceSMOImpl.updateChargeMachineOrder(chargeMachineOrderPo); |
| | | |
| | | ChargeMachineDto chargeMachineDto = new ChargeMachineDto(); |
| | | chargeMachineDto.setMachineCode(notifyChargeOrderDto.getMachineCode()); |
| | | List<ChargeMachineDto> chargeMachineDtos = chargeMachineV1InnerServiceSMOImpl.queryChargeMachines(chargeMachineDto); |
| | | |
| | | //Assert.listOnlyOne(chargeMachineDtos, "充电桩 不存在"); |
| | | |
| | | if (chargeMachineDtos == null || chargeMachineDtos.size() < 1) { |
| | | return new ResultVo(ResultVo.CODE_OK, "成功"); |
| | |
| | | ChargeMachinePortDto chargeMachinePortDto = new ChargeMachinePortDto(); |
| | | chargeMachinePortDto.setMachineId(chargeMachineDtos.get(0).getMachineId()); |
| | | chargeMachinePortDto.setPortCode(notifyChargeOrderDto.getPortCode()); |
| | | chargeMachinePortDto.setState(ChargeMachinePortDto.STATE_WORKING); |
| | | //chargeMachinePortDto.setState(ChargeMachinePortDto.STATE_WORKING); |
| | | List<ChargeMachinePortDto> chargeMachinePortDtos = chargeMachinePortV1InnerServiceSMOImpl.queryChargeMachinePorts(chargeMachinePortDto); |
| | | //Assert.listOnlyOne(chargeMachinePortDtos, "插槽空闲"); |
| | | if (chargeMachinePortDtos == null || chargeMachinePortDtos.size() < 1) { |
| | | return new ResultVo(ResultVo.CODE_OK, "成功"); |
| | | throw new CmdException("插座不存在"); |
| | | } |
| | | |
| | | ChargeMachinePortPo chargeMachinePortPo = new ChargeMachinePortPo(); |
| | |
| | | chargeMachinePortPo.setState(ChargeMachinePortDto.STATE_FREE); |
| | | chargeMachinePortV1InnerServiceSMOImpl.updateChargeMachinePort(chargeMachinePortPo); |
| | | |
| | | returnOrderMoney(chargeMachineDtos.get(0), chargeMachinePortDtos.get(0), notifyChargeOrderDto.getReason(), notifyChargeOrderDto.getEnergy()); |
| | | ChargeMachineOrderDto chargeMachineOrderDto = new ChargeMachineOrderDto(); |
| | | chargeMachineOrderDto.setMachineId(chargeMachineDtos.get(0).getMachineId()); |
| | | chargeMachineOrderDto.setPortId(chargeMachinePortDtos.get(0).getPortId()); |
| | | chargeMachineOrderDto.setState(ChargeMachineOrderDto.STATE_DOING); |
| | | List<ChargeMachineOrderDto> chargeMachineOrderDtos = chargeMachineOrderV1InnerServiceSMOImpl.queryChargeMachineOrders(chargeMachineOrderDto); |
| | | |
| | | if (chargeMachineOrderDtos == null || chargeMachineOrderDtos.size() < 1) { |
| | | return new ResultVo(ResultVo.CODE_OK, "成功"); |
| | | } |
| | | |
| | | ChargeMachineOrderPo chargeMachineOrderPo = new ChargeMachineOrderPo(); |
| | | chargeMachineOrderPo.setOrderId(chargeMachineOrderDtos.get(0).getOrderId()); |
| | | chargeMachineOrderPo.setState(ChargeMachineOrderDto.STATE_FINISHING); |
| | | chargeMachineOrderPo.setCommunityId(chargeMachineOrderDtos.get(0).getCommunityId()); |
| | | int flag = chargeMachineOrderV1InnerServiceSMOImpl.updateChargeMachineOrder(chargeMachineOrderPo); |
| | | if (flag < 1) { |
| | | throw new IllegalArgumentException("修改订单失败"); |
| | | } |
| | | |
| | | //todo 月卡直接修改状态 |
| | | if (ifMonthCard(chargeMachineOrderDtos.get(0).getPersonTel(), chargeMachinePortDtos.get(0).getCommunityId())) { |
| | | finishMonthCardChargeOrder(notifyChargeOrderDto, chargeMachineOrderDtos); |
| | | return new ResultVo(ResultVo.CODE_OK, "成功"); |
| | | } |
| | | |
| | | returnOrderMoney(chargeMachineDtos.get(0), notifyChargeOrderDto.getReason(), notifyChargeOrderDto.getEnergy(),chargeMachineOrderDtos); |
| | | |
| | | return new ResultVo(ResultVo.CODE_OK, "成功"); |
| | | } |
| | | |
| | | /** |
| | | * 结束月卡 充电订单 |
| | | * @param notifyChargeOrderDto |
| | | * @param chargeMachineOrderDtos |
| | | */ |
| | | private void finishMonthCardChargeOrder(NotifyChargeOrderDto notifyChargeOrderDto, List<ChargeMachineOrderDto> chargeMachineOrderDtos) { |
| | | ChargeMachineOrderPo chargeMachineOrderPo = new ChargeMachineOrderPo(); |
| | | chargeMachineOrderPo.setOrderId(chargeMachineOrderDtos.get(0).getOrderId()); |
| | | chargeMachineOrderPo.setRemark(notifyChargeOrderDto.getReason()); |
| | | chargeMachineOrderPo.setState(ChargeMachineOrderDto.STATE_FINISH); |
| | | chargeMachineOrderPo.setAmount("0"); |
| | | chargeMachineOrderPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)); |
| | | chargeMachineOrderPo.setCommunityId(chargeMachineOrderDtos.get(0).getCommunityId()); |
| | | //chargeMachineOrderPo.setDurationPrice(durationPrice); |
| | | chargeMachineOrderPo.setEnergy(notifyChargeOrderDto.getEnergy()); |
| | | int flag = chargeMachineOrderV1InnerServiceSMOImpl.updateChargeMachineOrder(chargeMachineOrderPo); |
| | | if (flag < 1) { |
| | | throw new IllegalArgumentException("修改订单失败"); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public ResultVo workHeartbeat(NotifyChargeOrderDto notifyChargeOrderDto) { |
| | | |