OpenService.java 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package com.pj.api.open.service;
  2. import cn.hutool.cache.CacheUtil;
  3. import cn.hutool.cache.impl.TimedCache;
  4. import cn.hutool.core.date.DateUtil;
  5. import cn.hutool.core.util.StrUtil;
  6. import com.pj.api.open.ResultJson;
  7. import com.pj.api.open.bo.CheckCarNumberBO;
  8. import com.pj.constants.UserTypeEnum;
  9. import com.pj.project.tb_business.BusinessMessageManager;
  10. import com.pj.project.tb_business.TbBusiness;
  11. import com.pj.project.tb_business.TbBusinessService;
  12. import com.pj.project.tb_business_car.TbBusinessCar;
  13. import com.pj.project.tb_business_car.TbBusinessCarService;
  14. import com.pj.project.tb_business_item.TbBusinessItem;
  15. import com.pj.project.tb_business_item.TbBusinessItemService;
  16. import com.pj.utils.cache.RedisUtil;
  17. import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
  18. import org.springframework.context.annotation.Lazy;
  19. import org.springframework.stereotype.Service;
  20. import org.springframework.transaction.annotation.Transactional;
  21. import javax.annotation.Resource;
  22. import java.math.BigDecimal;
  23. import java.util.Date;
  24. import java.util.List;
  25. import java.util.stream.Collectors;
  26. @Service
  27. @Transactional
  28. public class OpenService {
  29. @Resource
  30. @Lazy
  31. private TbBusinessService tbBusinessService;
  32. @Resource
  33. @Lazy
  34. private TbBusinessCarService tbBusinessCarService;
  35. @Resource
  36. @Lazy
  37. private TbBusinessItemService tbBusinessItemService;
  38. private final List<String> CAR_LIST = StrUtil.splitTrim("浙,粤,京,津,冀,晋,蒙,辽,黑,沪,吉,苏,皖,赣,鲁,豫,鄂,湘,桂,琼,渝,川,贵,云,藏, 陕, 甘, 青, 宁", ",");
  39. public ResultJson checkCarNumber(CheckCarNumberBO checkCarNumberBO) {
  40. String carNo = checkCarNumberBO.getCarNumber();
  41. int inOrOut = checkCarNumberBO.getInOrOut();
  42. if (inOrOut == 1) {
  43. handlerIn(carNo, checkCarNumberBO.getChannelName());
  44. return ResultJson.success();
  45. }
  46. return handlerOut(carNo, checkCarNumberBO.getChannelName());
  47. }
  48. private void handlerIn(String carNo, String channel) {
  49. carNo = carNo.toUpperCase();
  50. TbBusinessCar tbBusinessCar = tbBusinessCarService.findTheLastRecord(carNo);
  51. Date now = new Date();
  52. if (tbBusinessCar == null || (tbBusinessCar.getRealInTime() != null && tbBusinessCar.getRealOutTime() != null)) {
  53. tbBusinessCar = new TbBusinessCar();
  54. tbBusinessCar.setCarNo(carNo).setPay(0).setCarSize(3D).setIsLock(0).setInChannel(channel).setRealInTime(now);
  55. tbBusinessCarService.save(tbBusinessCar);
  56. return;
  57. }
  58. tbBusinessCar.setRealInTime(now).setInChannel(channel);
  59. tbBusinessCarService.saveOrUpdate(tbBusinessCar);
  60. if (!CAR_LIST.contains(carNo)) {
  61. TbBusiness tbBusiness = tbBusinessService.getById(tbBusinessCar.getBusinessId());
  62. tbBusiness.setRealInTime(now).setInChannel(channel);
  63. tbBusinessService.updateById(tbBusiness);
  64. }
  65. }
  66. private ResultJson handlerOut(String carNo, String channel) {
  67. carNo = carNo.toUpperCase();
  68. TbBusinessCar tbBusinessCar = tbBusinessCarService.findNotOutCar(carNo);
  69. if (tbBusinessCar == null) {
  70. return ResultJson.error("未查询到入场记录");
  71. }
  72. if (tbBusinessCar.getIsLock() == 1) {
  73. return ResultJson.error("车辆已锁定");
  74. }
  75. Date now = new Date();
  76. String businessId = tbBusinessCar.getBusinessId();
  77. if (StrUtil.isEmpty(businessId)) {
  78. tbBusinessCar.setRealOutTime(now).setOutChannel(channel);
  79. tbBusinessCarService.updateById(tbBusinessCar);
  80. return ResultJson.success();
  81. }
  82. TbBusiness business = tbBusinessService.getById(businessId);
  83. List<TbBusinessItem> items = tbBusinessItemService.findByBusinessId(businessId)
  84. .stream().filter(tbBusinessItem -> tbBusinessItem.getPayStatus() == 1).collect(Collectors.toList());
  85. BigDecimal itemPayPrice = new BigDecimal("0");
  86. for (TbBusinessItem tbBusinessItem : items) {
  87. itemPayPrice = itemPayPrice.add(tbBusinessItem.getItemPrice());
  88. }
  89. if (!CAR_LIST.contains(StrUtil.sub(carNo, 0, 1))) {
  90. if (!business.getItemPrice().equals(itemPayPrice) && business.getCustomerType() != 2) {
  91. return ResultJson.error("请缴纳业务费用");
  92. }
  93. }
  94. BigDecimal price = tbBusinessService.calculationPartMoney(tbBusinessCar.getRealInTime(), now);
  95. double dif = price.subtract(tbBusinessCar.getMoney()).doubleValue();
  96. if (dif > 0) {
  97. tbBusinessCar.setPay(0);
  98. tbBusinessCarService.updateById(tbBusinessCar);
  99. RedisUtil.set(channel, carNo);
  100. return ResultJson.error("请缴停车费" + dif + "元");
  101. }
  102. if (TbBusiness.BusinessType.CAR_DISINCLE.getCode().equals(business.getBusinessType()) && !business.getItemPrice().equals(itemPayPrice)) {
  103. return ResultJson.error("请缴纳业务费用");
  104. }
  105. tbBusinessCar.setRealOutTime(now).setOutChannel(channel);
  106. tbBusinessCarService.updateById(tbBusinessCar);
  107. return ResultJson.success();
  108. }
  109. }