TdCCustSignServiceImpl.java 5.55 KB
package com.zteits.pay.biz;

import com.alibaba.fastjson.JSONObject;
import com.zteits.clouds.api.apibase.bean.BizResult;
import com.zteits.clouds.api.apibase.constants.ErrorType;
import com.zteits.clouds.api.apibase.exception.BizException;
import com.zteits.clouds.api.dto.pay.TdCCustSignDTO;
import com.zteits.clouds.api.dto.pay.param.TdCCustSignRequest;
import com.zteits.clouds.api.service.pay.TdCCustSignService;
import com.zteits.clouds.api.service.sys.SysCommonService;
import com.zteits.pay.dao.TdCCustScoreDetailDao;
import com.zteits.pay.dao.TdCCustSignDao;
import com.zteits.pay.domain.TdCCustSign;
import com.zteits.pay.domain.TdCCustSignDO;
import com.zteits.pay.service.presentrule.oper.TdCPresentRuleOperInnerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

@Service("com.zteits.pay.biz.TdCCustSignServiceImpl")
public class TdCCustSignServiceImpl implements TdCCustSignService{
	 private static final Logger logger = LoggerFactory.getLogger(TdCCustScoreDetailServiceImpl.class);
	@Autowired
	private TdCCustSignDao tdCCustSignDAO;
	
	@Autowired
    private SysCommonService sysCommonService;
	
	@Autowired
	private TdCCustScoreDetailDao tdCCustScoreDetailDao;
	@Autowired
	private TdCPresentRuleOperInnerService tdCPresentRuleOperInnerService;

	@Override
	public BizResult<Integer> getCustSignState(TdCCustSignRequest request) {
		TdCCustSign tdCCustSign = new TdCCustSign();
		BeanUtils.copyProperties(request, tdCCustSign);
		int flg =tdCCustSignDAO.getCustSignState(tdCCustSign);
		return new BizResult<Integer>(flg);
	}

	@Transactional
	@Override
	public BizResult<TdCCustSignDTO> saveCustSign(TdCCustSignRequest request) {
		logger.info("签到入参信息:request={}"+ JSONObject.toJSONString(request));
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		String dateString = formatter.format(new Date()); //当前时间
		TdCCustSignDTO tdCCustSignDTO = new TdCCustSignDTO();
		tdCCustSignDTO.setSignScore(0);
		tdCCustSignDTO.setSignDate(new Date());
		tdCCustSignDTO.setContinueSignNum(0);
		TdCCustSign tdCCustSign = new TdCCustSign();
		BeanUtils.copyProperties(request, tdCCustSign);
		TdCCustSignDO tdCCustSignDO = new TdCCustSignDO();
		//判断今天是否已经签到
		tdCCustSignDO = tdCCustSignDAO.queryCustSignOld(tdCCustSign);
		if(tdCCustSignDO.getSignDate() != null ){
			BeanUtils.copyProperties(tdCCustSignDO, tdCCustSignDTO);
			return new BizResult<TdCCustSignDTO>(tdCCustSignDTO);
		}
		Long score = tdCPresentRuleOperInnerService.presentForSign(tdCCustSign.getCustId());
		if(score==null || score.intValue()==0){
			BeanUtils.copyProperties(tdCCustSignDO, tdCCustSignDTO);
			return new BizResult<TdCCustSignDTO>(tdCCustSignDTO);
		}
		tdCCustSign.setSignScore(score.intValue());
		/**首先查询前一天的签到信息*/
		TdCCustSign tdCCustSignQ = new TdCCustSign();
		BeanUtils.copyProperties(tdCCustSign, tdCCustSignQ);
		tdCCustSignQ.setSignDate(this.getBeforeTime(tdCCustSign.getSignDate()));
		tdCCustSignDO = tdCCustSignDAO.queryCustSignOld(tdCCustSignQ);
		if(tdCCustSignDO.getSignDate() == null){
			//前一天没有签到
			tdCCustSign.setContinueSignNum(1);
		}else{
			//前一天签到
			if(tdCCustSignDO.getContinueSignNum() == 7){
				//签到7天,今天按第一天开始签到
				tdCCustSign.setContinueSignNum(1);
			}else{
				tdCCustSign.setContinueSignNum(tdCCustSignDO.getContinueSignNum()+1);
			}
		}
		int flg =tdCCustSignDAO.saveCustSign(tdCCustSign);
		if(flg == 0){
			throw new BizException(ErrorType.CUST_SIGN_ERROR,"签到失败!");
		}
		//查询
		tdCCustSignDO = tdCCustSignDAO.queryCustSignOld(tdCCustSign);
		BeanUtils.copyProperties(tdCCustSignDO, tdCCustSignDTO);
		return new BizResult<TdCCustSignDTO>(tdCCustSignDTO);
	}
	//获取明年的最后一天
	private Date getEndTime(Date endTime){
		Date beginTime = null;
		 //获取当前时间  
        Calendar cal = Calendar.getInstance();  
        cal.setTime(endTime);
        //按你的要求设置时间  
        cal.set(cal.get(Calendar.YEAR)+1, 11, 31, 00, 00, 00);  
        beginTime = cal.getTime();        
        return beginTime;
	}
	//获取前一天
	private Date getBeforeTime(Date beginTime){
		Date date = null;
		Calendar calendar = Calendar.getInstance();
        calendar.setTime(beginTime);
        calendar.add(Calendar.DAY_OF_MONTH, -1);//-1今天的时间减一天
        date = calendar.getTime();
        return date;    
	}

	@Override
	public BizResult<TdCCustSignDTO> queryCustSign(TdCCustSignRequest request) {
		TdCCustSign tdCCustSign = new TdCCustSign();
		TdCCustSignDO tdCCustSignDO = new TdCCustSignDO();
		TdCCustSignDTO tdCCustSignDTO = new TdCCustSignDTO();
		BeanUtils.copyProperties(request, tdCCustSign);
		//查询是否签到
		int flg =tdCCustSignDAO.getCustSignState(tdCCustSign);
		if(flg>0){
			tdCCustSignDO = tdCCustSignDAO.queryCustSignOld(tdCCustSign);
		}else{
			tdCCustSign.setSignDate(this.getBeforeTime(tdCCustSign.getSignDate()));
			tdCCustSignDO = tdCCustSignDAO.queryCustSignOld(tdCCustSign);
			tdCCustSignDO.setSignDate(tdCCustSign.getSignDate());
			if(tdCCustSignDO.getContinueSignNum() == 7){
				//签到7天,今天按第一天开始签到
				tdCCustSignDO.setContinueSignNum(0);
			}
		}
		BeanUtils.copyProperties(tdCCustSignDO, tdCCustSignDTO);
		return new BizResult<TdCCustSignDTO>(tdCCustSignDTO);
		
	}
	

}