package com.cku.service;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.cku.core.ZAErrorCode;
import com.cku.core.ZAException;
import com.cku.dao.BreedCertifiedMapper;
import com.cku.dao.CkuPayTypeMapper;
import com.cku.dao.DogNewBornMapper;
import com.cku.model.CkuPayType;
import com.cku.model.Dog;
import com.cku.model.DogNewBorn;
import com.cku.util.Debugger;

@Service("breedCertifiedService")
public class BreedCertifiedServiceImpl {

    @Autowired
    public BreedCertifiedMapper breedCertifiedMapper;
    @Autowired
    public DogNewBornMapper dogNewBornMapper;
    @Autowired
    public PublicService publicService;
    @Autowired
    public CkuPayTypeMapper ckuPayTypeMapper;
    
    /**
     * 
     * @Description：根据会员号、血统证书号、性别查询犬只信息
     * @author: zhuoHeng
     * @version: 2016年7月28日 上午10:49:38
     * @throws ZAException 
     */
    public Dog getDogInfo(String memberNum,String pedigreeCertified,String dogGender) throws ZAException{
        
        Dog dogInfo = breedCertifiedMapper.getDogInfo(memberNum,pedigreeCertified,dogGender);
        Debugger.doAssert(dogInfo!=null, ZAErrorCode.ZA_DOG_NOT_FOUND, "请输入正确的血统证书号！");
        
        return dogInfo;
    }

    /**
     * 
     * @Description：会员提交犬只配种证明申请
     * @author: zhuoHeng
     * @version: 2016年7月28日 下午1:50:38
     * @throws ZAException 
     * @throws ParseException 
     */
    public void addBreedCertified(String memberNum, String breedDate, String malePedigreeCertified, String femalePedigreeCertified,String urgent) throws ZAException, ParseException {
        
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Date breedTime = df.parse(breedDate);
        boolean memberValid = false;
        /*公犬CKU证书校验*/
        boolean ckuMaleDog = false;
        ckuMaleDog = malePedigreeCertified.contains("CKU-");
        Debugger.doAssert(ckuMaleDog, ZAErrorCode.ZA_DOG_NOT_FOUND, "公犬非CKU注册犬！");
        /*母犬CKU证书校验*/
        boolean ckuFemaleDog = false;
        ckuFemaleDog = femalePedigreeCertified.contains("CKU-");
        Debugger.doAssert(ckuFemaleDog, ZAErrorCode.ZA_DOG_NOT_FOUND, "母犬非CKU注册犬！");
        /*公母犬是否同一犬种校验*/
        String maleDogBreed = malePedigreeCertified.substring(4, malePedigreeCertified.length()-9);
        String femaleDogBreed = femalePedigreeCertified.substring(4,femalePedigreeCertified.length()-9);
        boolean dogBreedSame = maleDogBreed.equals(femaleDogBreed);
        Debugger.doAssert(dogBreedSame, ZAErrorCode.ZA_DOG_NOT_FOUND, "公母犬需是同一犬种！");
        /*校验申请配种的公犬数据*/
        String dogGender = "公";
        Dog maleDogInfo = breedCertifiedMapper.getDogInfo(memberNum,malePedigreeCertified,dogGender);
        Debugger.doAssert(maleDogInfo!=null, ZAErrorCode.ZA_DOG_NOT_FOUND, "公犬血统证书号错误或不在申请人名下！");
        Debugger.doAssert(maleDogInfo.getBirthday()!=null, ZAErrorCode.ZA_DOG_NOT_FOUND, "公犬出生信息错误，请联系CKU繁殖部修改！");
        long daysBetween = (breedTime.getTime()-maleDogInfo.getBirthday().getTime()+1000000)/(3600*24*1000);
        Debugger.doAssert(daysBetween>270, ZAErrorCode.ZA_DOG_NOT_FOUND, "公犬不满足配种年龄限制！");
        memberValid = publicService.getMemberStatus(maleDogInfo.getDogOwner());
        //专业会员校验
        Debugger.doAssert(memberValid, ZAErrorCode.ZA_DOG_NOT_FOUND, "公犬主会员无效！");
        /*校验申请配种的母犬数据*/
        dogGender = "母";
        Dog femaleDogInfo = breedCertifiedMapper.getDogInfo(null,femalePedigreeCertified,dogGender);
        Debugger.doAssert(femaleDogInfo!=null, ZAErrorCode.ZA_DOG_NOT_FOUND, "母犬血统证书号错误！");
        Debugger.doAssert(femaleDogInfo.getBirthday()!=null, ZAErrorCode.ZA_DOG_NOT_FOUND, "母犬出生信息错误，请联系CKU繁殖部修改！");
        daysBetween = (breedTime.getTime()-femaleDogInfo.getBirthday().getTime()+1000000)/(3600*24*1000);
        Debugger.doAssert(daysBetween>270, ZAErrorCode.ZA_DOG_NOT_FOUND, "母犬不满足配种年龄限制！");
        memberValid = publicService.getMemberStatus(femaleDogInfo.getDogOwner());
        //专业会员校验
        Debugger.doAssert(memberValid, ZAErrorCode.ZA_DOG_NOT_FOUND, "母犬主会员无效！");
        /*生成配种证明号 start*/
        StringBuffer breedCertifiedNum = new StringBuffer();
        SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
        breedCertifiedNum.append(sdf.format(breedTime));
        breedCertifiedNum.append(memberNum);
        String maxBreedCertifiedNum = dogNewBornMapper.getMaxBreedCertifiedNum(breedCertifiedNum.toString());
        Integer newBreedCertifiedNum = null;
        if(maxBreedCertifiedNum!=null && !"".equals(maxBreedCertifiedNum)){
            newBreedCertifiedNum = new Integer(maxBreedCertifiedNum)+1;
            breedCertifiedNum.setLength(0);
            breedCertifiedNum.append(newBreedCertifiedNum.toString());
        } else {
            breedCertifiedNum.append("1");
        }
        /*生成配种证明号 end*/
        /*生成配种证明业务信息*/
        DogNewBorn dogNewBorn = new DogNewBorn();
        dogNewBorn.setTimestr(new Date());
        dogNewBorn.setPayout("7");
        dogNewBorn.setDogPeinum(breedCertifiedNum.toString());
        dogNewBorn.setDogHeadGong(maleDogInfo.getDogOwner());
        dogNewBorn.setDogGongUserid(maleDogInfo.getMemberNum());
        dogNewBorn.setDogHeadMu(femaleDogInfo.getDogOwner());
        dogNewBorn.setDogMuUserid(femaleDogInfo.getMemberNum());
        dogNewBorn.setDogNameGong(maleDogInfo.getDogEnName());
        dogNewBorn.setDogGongCard(maleDogInfo.getPedigreeCertified());
        dogNewBorn.setDogNameMu(femaleDogInfo.getDogEnName());
        dogNewBorn.setDogMuCard(femaleDogInfo.getPedigreeCertified());
        dogNewBorn.setDogClass(maleDogBreed);
        dogNewBorn.setDogPeiDate(breedTime);
        dogNewBorn.setDogCheck("待审核");
        dogNewBorn.setDogCheckWhy("会员提交");
        dogNewBorn.setDogGongXufei("是");
        dogNewBorn.setDogMuXufei("是");
        dogNewBorn.setDogWoFei("未交");
        dogNewBorn.setRecorder(maleDogInfo.getMemberNum());
        //TODO 根据提交的配种时间与当前时间比对，差两个月以上pid为99，反之pid为12
        //TODO 根据pid去cku_user_payType表中查询出对应的金额
        CkuPayType ckuPayType = ckuPayTypeMapper.getPayTypeByPid("99");
        //TODO 为业务订单金额赋值
        //dogNewBorn.setOrderPrice();
        dogNewBorn.setCkuJiaji(urgent);
    }

    
}
