123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- package com.pj.api.open.service;
- import cn.hutool.cache.CacheUtil;
- import cn.hutool.cache.impl.TimedCache;
- import cn.hutool.core.date.DateUtil;
- import cn.hutool.core.util.StrUtil;
- import com.pj.api.open.ResultJson;
- import com.pj.api.open.bo.CheckCarNumberBO;
- import com.pj.constants.UserTypeEnum;
- import com.pj.project.tb_business.BusinessMessageManager;
- import com.pj.project.tb_business.TbBusiness;
- import com.pj.project.tb_business.TbBusinessService;
- import com.pj.project.tb_business_car.TbBusinessCar;
- import com.pj.project.tb_business_car.TbBusinessCarService;
- import com.pj.project.tb_business_item.TbBusinessItem;
- import com.pj.project.tb_business_item.TbBusinessItemService;
- import com.pj.utils.cache.RedisUtil;
- import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
- import org.springframework.context.annotation.Lazy;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.Resource;
- import java.math.BigDecimal;
- import java.util.Date;
- import java.util.List;
- import java.util.stream.Collectors;
- @Service
- @Transactional
- public class OpenService {
- @Resource
- @Lazy
- private TbBusinessService tbBusinessService;
- @Resource
- @Lazy
- private TbBusinessCarService tbBusinessCarService;
- @Resource
- @Lazy
- private TbBusinessItemService tbBusinessItemService;
- private final List<String> CAR_LIST = StrUtil.splitTrim("浙,粤,京,津,冀,晋,蒙,辽,黑,沪,吉,苏,皖,赣,鲁,豫,鄂,湘,桂,琼,渝,川,贵,云,藏, 陕, 甘, 青, 宁", ",");
- public ResultJson checkCarNumber(CheckCarNumberBO checkCarNumberBO) {
- String carNo = checkCarNumberBO.getCarNumber();
- int inOrOut = checkCarNumberBO.getInOrOut();
- if (inOrOut == 1) {
- handlerIn(carNo, checkCarNumberBO.getChannelName());
- return ResultJson.success();
- }
- return handlerOut(carNo, checkCarNumberBO.getChannelName());
- }
- private void handlerIn(String carNo, String channel) {
- carNo = carNo.toUpperCase();
- TbBusinessCar tbBusinessCar = tbBusinessCarService.findTheLastRecord(carNo);
- Date now = new Date();
- if (tbBusinessCar == null || (tbBusinessCar.getRealInTime() != null && tbBusinessCar.getRealOutTime() != null)) {
- tbBusinessCar = new TbBusinessCar();
- tbBusinessCar.setCarNo(carNo).setPay(0).setCarSize(3D).setIsLock(0).setInChannel(channel).setRealInTime(now);
- tbBusinessCarService.save(tbBusinessCar);
- return;
- }
- tbBusinessCar.setRealInTime(now).setInChannel(channel);
- tbBusinessCarService.saveOrUpdate(tbBusinessCar);
- if (!CAR_LIST.contains(carNo)) {
- TbBusiness tbBusiness = tbBusinessService.getById(tbBusinessCar.getBusinessId());
- tbBusiness.setRealInTime(now).setInChannel(channel);
- tbBusinessService.updateById(tbBusiness);
- }
- }
- private ResultJson handlerOut(String carNo, String channel) {
- carNo = carNo.toUpperCase();
- TbBusinessCar tbBusinessCar = tbBusinessCarService.findNotOutCar(carNo);
- if (tbBusinessCar == null) {
- return ResultJson.error("未查询到入场记录");
- }
- if (tbBusinessCar.getIsLock() == 1) {
- return ResultJson.error("车辆已锁定");
- }
- Date now = new Date();
- String businessId = tbBusinessCar.getBusinessId();
- if (StrUtil.isEmpty(businessId)) {
- tbBusinessCar.setRealOutTime(now).setOutChannel(channel);
- tbBusinessCarService.updateById(tbBusinessCar);
- return ResultJson.success();
- }
- TbBusiness business = tbBusinessService.getById(businessId);
- List<TbBusinessItem> items = tbBusinessItemService.findByBusinessId(businessId)
- .stream().filter(tbBusinessItem -> tbBusinessItem.getPayStatus() == 1).collect(Collectors.toList());
- BigDecimal itemPayPrice = new BigDecimal("0");
- for (TbBusinessItem tbBusinessItem : items) {
- itemPayPrice = itemPayPrice.add(tbBusinessItem.getItemPrice());
- }
- if (!CAR_LIST.contains(StrUtil.sub(carNo, 0, 1))) {
- if (!business.getItemPrice().equals(itemPayPrice) && business.getCustomerType() != 2) {
- return ResultJson.error("请缴纳业务费用");
- }
- }
- BigDecimal price = tbBusinessService.calculationPartMoney(tbBusinessCar.getRealInTime(), now);
- double dif = price.subtract(tbBusinessCar.getMoney()).doubleValue();
- if (dif > 0) {
- tbBusinessCar.setPay(0);
- tbBusinessCarService.updateById(tbBusinessCar);
- RedisUtil.set(channel, carNo);
- return ResultJson.error("请缴停车费" + dif + "元");
- }
- if (TbBusiness.BusinessType.CAR_DISINCLE.getCode().equals(business.getBusinessType()) && !business.getItemPrice().equals(itemPayPrice)) {
- return ResultJson.error("请缴纳业务费用");
- }
- tbBusinessCar.setRealOutTime(now).setOutChannel(channel);
- tbBusinessCarService.updateById(tbBusinessCar);
- return ResultJson.success();
- }
- }
|