DutyRosterDaoImpl.java 11.8 KB
package com.zteits.park.dao.impl;

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

import org.apache.commons.collections4.CollectionUtils;
import com.alibaba.fastjson.JSONObject;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists;
import com.xiaoleilu.hutool.date.DateUtil;
import com.zteits.clouds.api.apibase.constants.DataStatusEnum;
import com.zteits.clouds.api.dto.clouds.param.QueryEmployeeRequest;
import com.zteits.clouds.api.dto.park.dto.ChargerSignNumberStatisticsDTO;
import com.zteits.clouds.api.dto.park.param.dutyroster.*;
import com.zteits.park.dao.DutyRosterDao;
import com.zteits.park.domain.DutyRoster;
import com.zteits.park.domain.DutyRosterExample;
import com.zteits.park.domain.DutyRosterExample.Criteria;
import com.zteits.park.mapper.DutyRosterMapper;
import com.zteits.park.mapper.smapper.DutyRosterSMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * Copyright: Copyright (c) 2018  zteits
 *
 * @ClassName: com.zteits.park.dao.impl
 * @Description: 排班计划实现类
 * @version: v1.0.0
 * @author: atao
 * @date: 2018/8/15   上午10:43
 * Modification History:
 * Date         Author          Version      Description
 * ---------------------------------------------------------*
 * 2018/8/15      atao          v1.0.0          创建
 */
@Component
public class DutyRosterDaoImpl implements DutyRosterDao {

    private static final Logger log = LoggerFactory.getLogger(DutyRosterDaoImpl.class);
    @Autowired
    private DutyRosterMapper dutyRosterMapper;

    @Autowired
    private DutyRosterSMapper dutyRosterSMapper;

    @Override
    public List<DutyRoster> queryDutyRoster(DutyRosterQueryReq req) {

        log.info("排班查询请求入参 req={}", JSONObject.toJSONString(req));
        DutyRosterExample example = new DutyRosterExample();

        //设置查询条件
        Criteria criteria = example.createCriteria();
        if (null != req.getOrgId()) {
            criteria.andOrgIdEqualTo(req.getOrgId());
        }
        if (null != req.getSignState()) {
        	criteria.andSignStateEqualTo(req.getSignState());
        }

        criteria.andDutyDayBetween(req.getStartDate(), req.getEndDate());
        criteria.andDataStatusEqualTo(DataStatusEnum.DATA_STATUS_VALID.value());
        if(req.getGroupTime() != null){
        	criteria.andGroupEndTimeGreaterThanOrEqualTo(req.getGroupTime());
        	criteria.andGroupStartTimeLessThanOrEqualTo(req.getGroupTime());
        }

        if(null != req.getDutyType()){
            criteria.andDutyTypeEqualTo(req.getDutyType());
        }
        if (CollectionUtils.isNotEmpty(req.getEmployeeNo())) {
            criteria.andChargerCodeIn(req.getEmployeeNo());
        }

        if (CollectionUtils.isNotEmpty(req.getPlNo())) {
            criteria.andPlNoIn(req.getPlNo());
        }

        if (CollectionUtils.isNotEmpty(req.getBerthRangNos())) {
        	criteria.andBerthRangeNoIn(req.getBerthRangNos());
        }

        if (CollectionUtils.isNotEmpty(req.getWorkState())) {
            criteria.andWorkStateIn(req.getWorkState());
        }

        if (CollectionUtils.isNotEmpty(req.getChargeCodes())) {
            criteria.andChargerCodeIn(req.getChargeCodes());
        }

        //设置排序字段
        StringBuffer orderByCase = new StringBuffer("duty_day,");

        //视图类型 10:收费员视图 20:停车场视图
        if (new Integer(10).equals(req.getViewType())) {
            orderByCase.append("charger_code,");
        }

        if (new Integer(20).equals(req.getViewType())) {
            orderByCase.append("pl_no,");
        }

        //删除最后一个 逗号','
        if (orderByCase.length() > 0) {
            orderByCase = orderByCase.deleteCharAt(orderByCase.length() - 1);
        }

        example.setOrderByClause(orderByCase.toString());

        List<DutyRoster> dutyRosters = dutyRosterMapper.selectByExample(example);
        log.info("排班查询db结果为 res={}", JSONObject.toJSONString(dutyRosters));
        List<DutyRoster> result = Lists.newArrayList();
        for(DutyRoster dutyRoster:dutyRosters ){
            if(null != req.getGroupId() && req.getGroupId().equals(dutyRoster.getGroupId())){
                continue;
            }

            if(CollectionUtils.isNotEmpty(req.getWorkState()) && !req.getWorkState().contains(dutyRoster.getWorkState())){
                continue;
            }

            result.add(dutyRoster);
        }

        return result;

    }

    @Override
    public Integer updateDutyRosterByPrimaryKey(DutyRoster dutyRoster) {

        return dutyRosterMapper.updateByPrimaryKeySelective(dutyRoster);
    }

    @Override
    public List<Long> queryPlanIdsByPlNo(String plNo, List<Long> planIds,Integer dutyType) {

        return dutyRosterSMapper.queryPlanIdsByPlNo(plNo, planIds,dutyType);
    }

    @Override
    public Integer insertDutyRosterForList(List<DutyRoster> dutyRosterList) {
        return dutyRosterSMapper.insertDutyRosterForList(dutyRosterList);
    }

    @Override
    public Integer insertDutyRosterSelectiv(DutyRoster dutyRoster) {
        return dutyRosterMapper.insertSelective(dutyRoster);
    }

    @Override
    public List<DutyRoster> queryRelaxChargerList(DutyRosterRelaxChargerQueryReq req) {
        return dutyRosterSMapper.queryRelaxChargerList(req);
    }

    @Override
    public List<DutyRoster> queryDutysByChargeCode(String chargeCode, Date workTime, List<Integer> workStates,Integer dutyType) {
        DutyRosterExample example = new DutyRosterExample();
        Criteria sql = example.createCriteria().andDataStatusEqualTo(DataStatusEnum.DATA_STATUS_VALID.value())
            .andGroupStartTimeLessThanOrEqualTo(workTime)
            .andGroupEndTimeGreaterThan(workTime)
            .andChargerCodeEqualTo(chargeCode)
            .andWorkStateIn(workStates);

        if(null != dutyType){
            sql.andDutyTypeEqualTo(dutyType);
        }

        return dutyRosterMapper.selectByExample(example);
    }

    @Override
    public Integer deleteDutyRoster(Long orgId, List<Long> planIds, Date startDate, Date endDate,Integer dutyType) {

        DutyRosterExample example = new DutyRosterExample();
        Criteria sql = example.createCriteria();
        sql.andOrgIdEqualTo(orgId).andDutyDayGreaterThan(
            startDate).andDutyDayLessThan(endDate).andPlanIdIn(planIds);
        if(null != dutyType){
            sql.andDutyTypeEqualTo(dutyType);
        }

        return dutyRosterMapper.deleteByExample(example);
    }

    @Override
    public Integer deleteParkByPlanIdAndPlNosForRoster(DeleteParkForDutyRosterReq req) {

        //今天的开始时间
        Date startDate = DateUtil.beginOfDay(DateUtil.date());
        //结束时间
        Date endDate = DateUtil.parse("2999-01-01 00:00:00");

        DutyRosterExample example = new DutyRosterExample();
        Criteria sql = example.createCriteria();
        //根据planid plno 开始结束时间 删除数据
        sql.andOrgIdEqualTo(req.getOrgId()).andDutyDayGreaterThan(
                startDate).andDutyDayLessThan(endDate).andPlanIdEqualTo(req.getPlanId()).andPlNoIn(req.getPlNos());
        if (null != req.getDutyType()) {
            sql.andDutyTypeEqualTo(req.getDutyType());
        }
        return dutyRosterMapper.deleteByExample(example);
    }

    @Override
    public Integer deleteDutyRosterByChargerCodes(Long orgId, List<String> chargerCodes, Date starteDate,
        Date endDate,Integer dutyType) {
        DutyRosterExample example = new DutyRosterExample();
        Criteria sql = example.createCriteria();
        sql.andOrgIdEqualTo(orgId).andDutyDayGreaterThan(
            starteDate).andDutyDayLessThan(endDate).andChargerCodeIn(chargerCodes);
        if(null != dutyType){
            sql.andDutyTypeEqualTo(dutyType);
        }

        return dutyRosterMapper.deleteByExample(example);

    }

    @Override
    public List<String> queryChargerCodeForWorkState(ChargerCodeQueryForWorkStateReq req) {

        return dutyRosterSMapper.queryChargerCodeForWorkState(req);

    }

    @Override
    public Integer updateDutyRosterByChargerCode(String chargerCode, DutyRoster base) {

        DutyRosterExample example = new DutyRosterExample();
        example.createCriteria().andChargerCodeEqualTo(chargerCode).andDutyDayGreaterThanOrEqualTo(
            DateUtil.endOfDay(DateUtil.yesterday()));

        return dutyRosterMapper.updateByExampleSelective(base, example);
    }

    @Override
    public Integer exchangeDutyRoster(DutyRosteExchangeReq req) {

        return dutyRosterSMapper.exchangeDutyRoster(req);
    }

    @Override
    public List<DutyRoster> queryDutyRosterBychargerCodeAndBerthRangeNo(String chargerCode, String berthRangeNO,
        Date dutyDate,Integer dutyType) {
        dutyDate = DateUtil.parseDate(DateUtil.formatDate(dutyDate));
        DutyRosterExample example = new DutyRosterExample();
       Criteria sql =  example.createCriteria().andDataStatusEqualTo(DataStatusEnum.DATA_STATUS_VALID.value())
            .andChargerCodeEqualTo(chargerCode).andBerthRangeNoEqualTo(berthRangeNO).andDutyDayEqualTo(dutyDate);
        if(null != dutyType){
            sql.andDutyTypeEqualTo(dutyType);
        }

        return dutyRosterMapper.selectByExample(example);
    }

	@Override
	public ChargerSignNumberStatisticsDTO queryChargerSignInfoNumber(QueryEmployeeRequest request) {
		return dutyRosterSMapper.queryChargerSignInfoNumber(request);
	}

	@Override
	public PageInfo<DutyRoster> queryChargerSignInfoList(DutyRosterQueryReq req) {
		PageHelper.startPage(req.getBaseRequest().getPageNum(), req.getBaseRequest().getPageSize());
		 DutyRosterExample example = new DutyRosterExample();

        //设置查询条件
        Criteria criteria = example.createCriteria();
        if (null != req.getOrgId()) {
            criteria.andOrgIdEqualTo(req.getOrgId());
        }

        criteria.andDutyDayBetween(req.getStartDate(), req.getEndDate());
        criteria.andDataStatusEqualTo(DataStatusEnum.DATA_STATUS_VALID.value());
        if(req.getGroupTime() != null){
        	criteria.andGroupEndTimeGreaterThanOrEqualTo(req.getGroupTime());
        	criteria.andGroupStartTimeLessThanOrEqualTo(req.getGroupTime());
        }
        if (CollectionUtils.isNotEmpty(req.getEmployeeNo())) {
            criteria.andChargerCodeIn(req.getEmployeeNo());
        }

        if (CollectionUtils.isNotEmpty(req.getPlNo())) {
            criteria.andPlNoIn(req.getPlNo());
        }

        if (CollectionUtils.isNotEmpty(req.getBerthRangNos())) {
        	criteria.andBerthRangeNoIn(req.getBerthRangNos());
        }

        if (CollectionUtils.isNotEmpty(req.getWorkState())) {
            criteria.andWorkStateIn(req.getWorkState());
        }

        if (CollectionUtils.isNotEmpty(req.getChargeCodes())) {
            criteria.andChargerCodeIn(req.getChargeCodes());
        }

        if(null != req.getDutyType()){
            criteria.andDutyTypeEqualTo(req.getDutyType());
        }

        List<DutyRoster> list = dutyRosterMapper.selectByExample(example);

        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(list)) {
            return new PageInfo<>(list);
        }
        return new PageInfo<>(new ArrayList<>());
	}

	@Override
	public PageInfo<DutyRoster> queryChargerDutyDetailByCondition(QueryEmployeeRequest request) {
		PageHelper.startPage(request.getBaseRequest().getPageNum(), request.getBaseRequest().getPageSize());
		List<DutyRoster> list = dutyRosterSMapper.queryChargerDutyDetailByCondition(request);
		return new PageInfo<DutyRoster>(list);
	}

    @Override
    public String queryDutyRosterMaxDateByPlanId(ChargerCodeQueryForWorkStateReq req) {
        //查询planid最大时间
        return dutyRosterSMapper.queryDutyRosterMaxDateByPlanId(req);
    }

}