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 库。
*
* 固定车复判的存量怪癖(照搬,红线⑥)
*
* - `isFixedCar` 为空 → **每个车牌都复判**;非空 → **也每个都复判**,再把与入参不一致的行移除。
* 两条分支的复判调用是同一句,存量就是重复写了两遍,**照搬**。
* - 复判后只有「查到卡 → `FIXEDCAR("1")`」这一条赋值;查不到卡**不改**原值
* (而不是像 catch 分支那样置 `TMPCAR`)—— 存量如此,照搬。
* - `catch (Exception)` 里把固定车标记置 `TMPCAR("0")` 并 `printStackTrace()`,**照搬**。
* - 入参 `sysCode` 固定写死 `"zteits-park"`(不是请求里的 sysCode),**照搬**。
*
*/
@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();
}
}
}
}