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 listParkLot(int pageNum, int pageSize, List goodBigTypes) { Page pageVo = new Page(); Page 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 parkMap = new HashMap(); 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 parkingLots = ParkingLot.dao.find(sql); if (CollectionUtil.isEmpty(parkingLots)) { return pageVo; } List vos = new ArrayList(); 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(vos, page.getPageNumber(), page.getPageSize(), page.getTotalPage(), page.getTotalRow()); return pageVo; } /** * 通过停车场编码查询停车场信息.
* * @param pklNo * @return */ public BizResult queryParkLotForpklNo(String pklNo) { BizResult result = new BizResult(); 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> queryCustParkCard(String custId) { Map> result = new HashMap<>(); List 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 available = new ArrayList<>(); //已失效的卡 List 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; } }