package com.zteits.park.biz; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import com.alibaba.fastjson.JSONObject; import com.clouds.common.utils.ResultUtils; import com.github.pagehelper.PageInfo; import com.zteits.clouds.api.apibase.bean.BizResult; import com.zteits.clouds.api.apibase.bean.PageBean; import com.zteits.clouds.api.apibase.constants.ErrorType; import com.zteits.clouds.api.apibase.exception.BizException; import com.zteits.clouds.api.dto.pay.TdACardCouponsOutDTO; import com.zteits.clouds.api.dto.pay.param.TdACardCouponsOutRequest; import com.zteits.clouds.api.dto.park.dto.InOutParkDTO; import com.zteits.clouds.api.dto.park.param.InOutParkRequest; import com.zteits.clouds.api.service.clouds.InOutParkStatisticService; import com.zteits.clouds.api.service.pay.TdACardCouponsService; import com.zteits.park.constant.ParkConstant; import com.zteits.park.dao.InOutParkDao; import com.zteits.park.domain.InOutParkDO; import com.zteits.park.pagepager.PageBeanUtil; /** * 企业云平台->数据统计->进出场上报服务实现。 * *

存量 `zteits-park` 的 `InOutParkStatisticServiceImpl` 在主干上整类被注释、Dubbo provider * 也早已注释掉(`dubbo-park-provider.xml`),但 `InOutParkDao` + `InOutParkSMapper.xml` 一直活着。 * 本类按 `git show 550cba464e^:zteits-park/src/main/java/com/zteits/park/biz/InOutParkStatisticServiceImpl.java` * 的原始实现逐行搬运,**唯一的替换**是:存量依赖的 `TdACardCouponsService` 已随那批注释代码 * 一起被删,本次按原实现补回(见 `parking-module-pay` 的 `TdACardCouponsServiceImpl`), * 仍然走「本模块 DAO 只查本模块库」的分层,不在 park 里直连 pay 库。

* *

固定车复判的存量怪癖(照搬,红线⑥)

*
    *
  1. `isFixedCar` 为空 → **每个车牌都复判**;非空 → **也每个都复判**,再把与入参不一致的行移除。 * 两条分支的复判调用是同一句,存量就是重复写了两遍,**照搬**。
  2. *
  3. 复判后只有「查到卡 → `FIXEDCAR("1")`」这一条赋值;查不到卡**不改**原值 * (而不是像 catch 分支那样置 `TMPCAR`)—— 存量如此,照搬。
  4. *
  5. `catch (Exception)` 里把固定车标记置 `TMPCAR("0")` 并 `printStackTrace()`,**照搬**。
  6. *
  7. 入参 `sysCode` 固定写死 `"zteits-park"`(不是请求里的 sysCode),**照搬**。
  8. *
*/ @Service("com.zteits.park.biz.InOutParkStatisticServiceImpl") public class InOutParkStatisticServiceImpl implements InOutParkStatisticService { private static final Logger logger = LoggerFactory.getLogger(InOutParkStatisticServiceImpl.class); @Autowired private InOutParkDao inOutParkDao; @Autowired private TdACardCouponsService tdACardCouponsService; @Override public BizResult> queryInOutParkForList(InOutParkRequest inOutParkRequest) throws Exception { PageBean pageBean = new PageBean(); if (inOutParkRequest == null) { throw new BizException(ErrorType.PARAMM_NULL, "入参不能为空!"); } PageInfo pageInfo = inOutParkDao.queryInOutParkForList( inOutParkRequest.getBaseRequest().getPageNum(), inOutParkRequest.getBaseRequest().getPageSize(), inOutParkRequest.getInOutStatus(), inOutParkRequest.getBeginTime(), inOutParkRequest.getEndTime(), inOutParkRequest.getPlNos(), inOutParkRequest.getIsFixedCar()); if (pageInfo != null && pageInfo.getList() != null && pageInfo.getList().size() > 0) { PageBeanUtil.copyProperties(pageInfo, pageBean, InOutParkDTO.class); List list = pageBean.getDataList(); List removeList = new ArrayList<>(); for (InOutParkDTO inOutParkDTO : list) { if (StringUtils.isBlank(inOutParkRequest.getIsFixedCar())) { //判断该车牌是否是固定车辆(包月,包年) this.isFixedCar(inOutParkDTO); } else { //判断该车牌是否是固定车辆(包月,包年) this.isFixedCar(inOutParkDTO); if (!inOutParkRequest.getIsFixedCar().equals(inOutParkDTO.getIsFixedCar())) { removeList.add(inOutParkDTO); } } } list.removeAll(removeList); } else { logger.info("没有查询到企业云平台数据统计进出场上报信息..."); } logger.info("---end---企业云平台数据统计进出场上报分页查询,结果={}", JSONObject.toJSON(pageBean)); return new BizResult>(pageBean); } /** * 判断是否为固定车或临时车. * * @param inOutParkDTO 进出场上报行 */ private void isFixedCar(InOutParkDTO inOutParkDTO) { if (StringUtils.isBlank(inOutParkDTO.getIsFixedCar()) || inOutParkDTO.getIsFixedCar().equals(ParkConstant.InterfaceLog.isFixedCar.ISFIX_ERROR)) { //调用接口判断 String carNumber = inOutParkDTO.getCarNumber(); List carNumbers = new ArrayList<>(); carNumbers.add(carNumber); TdACardCouponsOutRequest request = new TdACardCouponsOutRequest(); request.setSysCode("zteits-park"); request.setCarNumbers(carNumbers); //TODO 入参增加时间 BizResult> bizResult = null; logger.info("判断车牌号是否为包月或包年 请求入参为:" + JSONObject.toJSONString(request)); try { bizResult = tdACardCouponsService.queryCardCouponsByCarNumbers(request); if (ResultUtils.isError(bizResult)) { logger.info("通过车牌号查询是否为包月或包年车失败:"); logger.info("响应信息为:" + JSONObject.toJSONString(bizResult)); throw new BizException(bizResult.getErrCode(), bizResult.getErrMsg()); } List couponsOutDTOs = ResultUtils.getBizResultData(bizResult); if (!CollectionUtils.isEmpty(couponsOutDTOs)) { //1 办理了包月,否则没有办理 String isFixedCar = couponsOutDTOs.get(0).getCoupons().equals("1") ? ParkConstant.InterfaceLog.isFixedCar.FIXEDCAR : ParkConstant.InterfaceLog.isFixedCar.ISFIX_ERROR; inOutParkDTO.setIsFixedCar(isFixedCar); //TODO 更新该进出场上报的固定车辆值 } } catch (Exception e) { logger.info("通过车牌号查询是否为包月或包年车失败"); //默认临时车 inOutParkDTO.setIsFixedCar(ParkConstant.InterfaceLog.isFixedCar.TMPCAR); e.printStackTrace(); } } } }