ParkLotService.java 9.1 KB
package com.rnt.service;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.druid.util.StringUtils;
import com.alibaba.fastjson.JSONObject;

import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import com.rnt.commo.enums.DSEnum;
import com.rnt.commo.enums.DataStateEnum;
import com.rnt.commo.enums.ErrorType;
import com.rnt.commo.enums.GoodsTypeEnum;
import com.rnt.model.park.ParkingLot;
import com.rnt.model.zf.CardCoupons;
import com.rnt.model.zf.ParkCardCoupons;
import com.rnt.utils.CardTypeUtil;
import com.rnt.vo.BizResult;
import com.rnt.vo.CustCardVO;
import com.rnt.vo.ParkLotCardVO;
import com.rnt.vo.ParkLotInfoVO;
import com.rnt.vo.ParkLotListVO;
import com.xiaoleilu.hutool.date.DateUtil;
import com.xiaoleilu.hutool.util.CollectionUtil;
import org.beetl.sql.core.kit.StringKit;

/**
 * Copyright: Copyright (c) 2017  zteits
 *
 * @ClassName: com.rnt.service
 * @Description:
 * @version: v1.0.0
 * @author: atao
 * @date: 2017/6/7   上午11:13
 * Modification History:
 * Date         Author          Version      Description
 * ---------------------------------------------------------*
 * 2017/6/7      atao          v1.0.0          创建
 */
public class ParkLotService {

    /**
     * 获取停车场信息
     *
     * @param pageNum
     * @param pageSize
     * @param goodBigTypes
     * @return
     */
    public Page<ParkLotListVO> listParkLot(int pageNum, int pageSize, List<Long> goodBigTypes) {
        Page<ParkLotListVO> pageVo = new Page<ParkLotListVO>();
        Page<Record> page;
        if (CollectionUtil.isNotEmpty(goodBigTypes)) {
            String str = goodBigTypes.toString().substring(1, goodBigTypes.toString().length() - 1);
            //涉及到跨库查询
            page = Db.use(DSEnum.ZF_DATASOURCE.name()).paginate(pageNum, pageSize, true,
                "select t.park_id , group_concat(t.goods_type) AS goodsTypes",
                "  FROM (SELECT * FROM td_b_park_card_coupons WHERE data_state = ? AND goods_state = ? AND "
                    + "goods_big_type in (?) ) t GROUP BY"
                    + " t.park_id",
                DataStateEnum.DATA_STATE_VALID.getValue(), DataStateEnum.DATA_STATE_VALID.getValue(), str);
        } else {
            //涉及到跨库查询
            page = Db.use(DSEnum.ZF_DATASOURCE.name()).paginate(pageNum, pageSize, true,
                "select t.park_id, group_concat(t.goods_type) AS goodsTypes ",
                " FROM (SELECT * FROM td_b_park_card_coupons WHERE data_state = ? AND goods_state = ?) t GROUP BY t"
                    + ".park_id",
                DataStateEnum.DATA_STATE_VALID.getValue(), DataStateEnum.DATA_STATE_VALID.getValue());
        }

        if (null == page || CollectionUtil.isEmpty(page.getList())) {
            return pageVo;
        }

        Map<String, String> parkMap = new HashMap<String, String>();

        for (Record record : page.getList()) {
            parkMap.put(record.getStr("park_id"), record.getStr("goodsTypes"));
        }

        String pkNoJsonStr = JSONObject.toJSONString(parkMap.keySet());
        String pkNosStr = pkNoJsonStr.toString().substring(1, pkNoJsonStr.length() - 1);
        String sql = "select * from parking_lot t where t.pl_no in ( " + pkNosStr + " )";
        List<ParkingLot> parkingLots = ParkingLot.dao.find(sql);
        if (CollectionUtil.isEmpty(parkingLots)) {
            return pageVo;
        }
        List<ParkLotListVO> vos = new ArrayList<ParkLotListVO>();
        ParkLotListVO vo = null;
        for (ParkingLot parkingLot : parkingLots) {
            String pkNo = parkingLot.getPlNo();
            vo = new ParkLotListVO();

            vo.setAddress(parkingLot.getPlAddress());
            vo.setName(parkingLot.getPlName());
            vo.setParkNo(pkNo);
            String goodsTypes = "," + parkMap.get(pkNo) + ",";
            //是否包含月卡商品
            if (goodsTypes.contains("," + GoodsTypeEnum.CARD_BIG_CAR_MONTH.val() + ",") || goodBigTypes.contains(
                "," + GoodsTypeEnum.CARD_SMALL_CAR_MONTH.val() + ",")) {
                vo.getGoodsTypes().add("MONTH");
            }
            //是否包含年卡卡商品
            if (goodsTypes.contains("," + GoodsTypeEnum.CARD_BIG_CAR_YEAR.val() + ",") || goodBigTypes.contains(
                "," + GoodsTypeEnum.CARD_SMALL_CAR_YEAR.val() + ",")) {
                vo.getGoodsTypes().add("YEAR");
            }

            vos.add(vo);
        }
        pageVo = new Page<ParkLotListVO>(vos, page.getPageNumber(), page.getPageSize(), page.getTotalPage(),
            page.getTotalRow());

        return pageVo;

    }

    /**
     * 通过停车场编码查询停车场信息.<br/>
     *
     * @param pklNo
     * @return
     */
    public BizResult<ParkLotCardVO> queryParkLotForpklNo(String pklNo) {

        BizResult<ParkLotCardVO> result = new BizResult<ParkLotCardVO>();
        if (StringKit.isEmpty(pklNo)) {
            result.setErrorMessage(ErrorType.PARAMM_NULL, "入参不能为空");
        } else {
            StringBuffer sql = new StringBuffer("select pl_no,pl_name,pl_address ");
            sql.append(" from  parking_lot");
            sql.append(" where data_status=1 and pl_no =?");
            ParkingLot tabParkinglot = new ParkingLot().findFirst(sql.toString(), pklNo);
            if (tabParkinglot != null) {
                ParkLotCardVO parkLotCardVO = new ParkLotCardVO();
                parkLotCardVO.setParkNo(tabParkinglot.getPlNo());
                parkLotCardVO.setParkName(tabParkinglot.getPlName());
                parkLotCardVO.setAddress(tabParkinglot.getPlAddress());
                result.setData(parkLotCardVO);
            }
        }

        return result;

    }

    /**
     * 查询客户购买卡的数量
     *
     * @param custId
     * @return
     */
    public Long queryCustCardNum(String custId) {
        StringBuffer sql = new StringBuffer("select count(*) from td_a_card_coupons t where t.card_big_type = 2 and t.data_state = 1 and t.cust_id = ? ");
        Long count = Db.use(DSEnum.ZF_DATASOURCE.name()).queryLong(sql.toString(), custId);
        return count;
    }

    /**
     * 根据custid 查询客户已购买的年卡
     *
     * @param custId
     * @return
     */
    public Map<String, List<CustCardVO>> queryCustParkCard(String custId) {

        Map<String, List<CustCardVO>> result = new HashMap<>();
        List<CardCoupons> cardCoupons = CardCoupons.dao.find(
            "select * from td_a_card_coupons t where t.card_big_type = 2 and t.data_state = 1 and t.cust_id = ? ORDER BY  t.exp_date desc",
            custId);
        //未失效的卡
        List<CustCardVO> available = new ArrayList<>();
        //已失效的卡
        List<CustCardVO> not_available = new ArrayList<>();

        CustCardVO vo;
        Date now = new Date();
        //已失效的卡
        for (CardCoupons ca : cardCoupons) {
            vo = new CustCardVO();
            Long parkCardId = (long)ca.getParkCardId();
            ParkCardCoupons pkCardCoupons = ParkCardCoupons.dao.findById(parkCardId);
            //获取停车场
            String pkNo = pkCardCoupons.getParkId();
            if (!StringUtils.isEmpty(pkNo)) {
                ParkLotInfoVO parkLotInfoVO = getParkLotInfoByPkNo(pkNo);
                if (null != parkLotInfoVO) {
                    //停车场地址
                    vo.setParkAddress(parkLotInfoVO.getAddress());
                    //停车场名称
                    vo.setParkName(parkLotInfoVO.getName());
                }
            }
            //获取停车卡名称
            vo.setCardName(CardTypeUtil.getCardNameByCardType(ca.getCardType() + ""));
            vo.setCardType(ca.getCardType()+"");
            vo.setCardNum(ca.getCarNumber());
            vo.setEffDate(ca.getEffDate());
            vo.setEffDateStr(DateUtil.format(ca.getEffDate(), "yyyy-MM-dd"));
            vo.setExpDate(ca.getExpDate());
            vo.setExpDateStr(DateUtil.format(ca.getExpDate(), "yyyy-MM-dd"));
            vo.setParkCardId(ca.getParkCardId());
            vo.setCustCardID(ca.getId());

            //比较是否已失效
            if (now.before(vo.getExpDate())) {
                //当前时间在 失效日期之前,未失效
                available.add(vo);
            } else {
                //已失效
                not_available.add(vo);
            }

        }

        result.put("available", available);
        result.put("unavailable", not_available);

        return result;

    }

    /**
     * 根据停车场编码获取停车场信息
     *
     * @param pkNO 停车场编码
     * @return
     */
    public ParkLotInfoVO getParkLotInfoByPkNo(String pkNO) {
        StringBuffer sql = new StringBuffer("select * FROM  parking_lot t where t.pl_no = ?");

        ParkingLot pk = ParkingLot.dao.findFirst(sql.toString(), pkNO);
        if (null == pk) {
            return null;
        }

        ParkLotInfoVO vo = new ParkLotInfoVO();
        vo.setAddress(pk.getPlAddress());
        vo.setName(pk.getPlName());
        vo.setParkNo(pkNO);
        return vo;
    }

}