package com.steerinfo.baseinfo.meterbasecalibranumrel.service.impl;

import com.steerinfo.baseinfo.meterbasecalibranumrel.mapper.MeterBaseCalibraNumRelMapper;
import com.steerinfo.baseinfo.meterbasecalibranumrel.model.MeterBaseCalibraNumRel;
import com.steerinfo.baseinfo.meterbasecalibranumrel.service.IMeterBaseCalibraNumRelService;
import com.steerinfo.baseinfo.meterbasecalibrarelation.model.MeterBaseCalibraRelation;
import com.steerinfo.baseinfo.meterbasecalibrationnum.model.MeterBaseCalibrationNum;
import com.steerinfo.baseinfo.meterbasecalibrationnum.service.impl.MeterBaseCalibrationNumServiceImpl;
import com.steerinfo.baseinfo.meterbasespotinfo.model.MeterBaseSpotInfo;
import com.steerinfo.framework.mapper.IBaseMapper;
import com.steerinfo.framework.service.impl.BaseServiceImpl;
import com.steerinfo.framework.utils.base.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.Assert;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;

/**
 * MeterBaseCalibraNumRel服务实现：
 * @author generator
 * @version 1.0-SNAPSHORT 2020-06-28 03:17
 * 类描述
 * 修订历史：
 * 日期：2020-06-28
 * 作者：generator
 * 参考：
 * 描述：MeterBaseCalibraNumRel服务实现
 * @see null
 * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
 */
@Service(value = "meterBaseCalibraNumRelService")
public class MeterBaseCalibraNumRelServiceImpl extends BaseServiceImpl<MeterBaseCalibraNumRel, String> implements IMeterBaseCalibraNumRelService {

    @Resource
    private MeterBaseCalibraNumRelMapper meterBaseCalibraNumRelMapper;

    @Override
    protected IBaseMapper<MeterBaseCalibraNumRel, String> getMapper() {
        return meterBaseCalibraNumRelMapper;
    }

    @Autowired
    private MeterBaseCalibrationNumServiceImpl meterBaseCalibrationNumService;

    //校称重量是否绑定标志
    private String flag;

    @Override
    public String checkandadd(List<MeterBaseCalibraNumRel> models)
    {
        if (models == null || models.size() < 1) {
            return "请传入参数!";
        }
        for (MeterBaseCalibraNumRel model:models) {
            HashMap<String, Object> obj = new HashMap<>();
            obj.put("baseSpotNo", model.getBaseSpotNo());
            obj.put("calibrationTypeNo", model.getCalibrationTypeNo());
            List<MeterBaseCalibraNumRel> com=meterBaseCalibraNumRelMapper.selectByParameters(obj);
            if (! com.isEmpty()) {
                return model.getBaseSpotName()+"中的"+model.getCalibrationTypeName()+"已配置，请直接修改！！";
            }
            String no = meterBaseCalibraNumRelMapper.GetNewID();
            model.setRelationNo(new SimpleDateFormat("yyyyMMdd").format(new Date()) +no);
            model.setCreateTime(new Date());
            meterBaseCalibraNumRelMapper.insert(model);
        }
        return "";
    }

    @Override
    public String abolish(List<MeterBaseCalibraNumRel> models) {
        try {
            if (models == null || models.size() < 1) {
                return "请传入参数!";
            }
            for (MeterBaseCalibraNumRel model:models) {
                model.setRelationNo(model.getRelationNo());
                model.setValidFlag("0");
                model.setUpdateTime(new Date());

                meterBaseCalibraNumRelMapper.updateByPrimaryKey(model);

                List<MeterBaseCalibraNumRel> mbCalibNumRels=meterBaseCalibraNumRelMapper.selectByCalibWeightNo(model.getCalibrationNumNo());
                if(mbCalibNumRels.size() < 1){
                    //设置flag="0",解除计量点和校称时间的绑定
                    flag = "0";
                    String key2 = meterBaseCalibrationNumService.updateStateByPrimaryKey(model.getCalibrationNumNo(),flag);
                    Assert.isTrue((key2 == null || key2.equals("")),"更新关联表错误"+key2);
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return "操作异常，请联系管理员";
        }
        return "";
    }

    @Override
    public String addSpotNum(MeterBaseCalibrationNum mbCalibrationNum, MeterBaseSpotInfo mbSpotInfo) {

        MeterBaseCalibraNumRel mbCalibrationNumRel = new MeterBaseCalibraNumRel();

        Assert.isTrue(StringUtils.isNotBlank(mbSpotInfo.getBaseSpotNo()),"计量点编号不能为空,请选择一条计量点数据！");
        mbCalibrationNumRel.setBaseSpotNo(mbSpotInfo.getBaseSpotNo());
        Assert.isTrue(StringUtils.isNotBlank(mbSpotInfo.getBaseSpotName()),"计量点名称不能为空！");
        mbCalibrationNumRel.setBaseSpotName(mbSpotInfo.getBaseSpotName());

        if (mbCalibrationNum == null){
            return "请选择校称重量！";
        }
        Integer validFlag = Integer.parseInt(mbCalibrationNum.getValidFlag());
        //if (validFlag == 0){
        //    return "校称重量不能选择已经废弃的数据，请选择状态是'启用'的校称时间";
        //}
        Assert.isTrue(!(validFlag == 0),"校称重量不能选择已经废弃的数据，请选择状态是'启用'的校称时间");

        Assert.isTrue(StringUtils.isNotBlank(mbCalibrationNum.getCalibrationNumNo()),"校称重量编号不能为空,请选择一条校称重量配置数据！");
        mbCalibrationNumRel.setCalibrationNumNo(mbCalibrationNum.getCalibrationNumNo());
        flag = "1";
        //Assert.isTrue(!Objects.isNull(mbCalibrationNum.getCalibrationNum()),"校称有效次数不能为空！");
        Assert.isTrue(StringUtils.isNotBlank(mbCalibrationNum.getCalibrationNum().toString()),"校称有效次数不能为空！");
        mbCalibrationNumRel.setCalibrationNum(mbCalibrationNum.getCalibrationNum());

        Assert.isTrue(StringUtils.isNotBlank(mbCalibrationNum.getSpotTypeNo()),"计量点类型编号不能为空！");
        mbCalibrationNumRel.setSpotTypeNo(mbCalibrationNum.getSpotTypeNo());
        Assert.isTrue(StringUtils.isNotBlank(mbCalibrationNum.getSpotTypeName()),"计量点类型名称不能为空！");
        mbCalibrationNumRel.setSpotTypeName(mbCalibrationNum.getSpotTypeName());

        Assert.isTrue(StringUtils.isNotBlank(mbCalibrationNum.getCalibrationTypeNo()),"校称类型编号不能为空！");
        mbCalibrationNumRel.setCalibrationTypeNo(mbCalibrationNum.getCalibrationTypeNo());
        Assert.isTrue(StringUtils.isNotBlank(mbCalibrationNum.getCalibrationTypeName()),"校称类型名称不能为空！");
        mbCalibrationNumRel.setCalibrationTypeName(mbCalibrationNum.getCalibrationTypeName());
        if(mbCalibrationNum.getCalibrationTypeName().equals("互检")){
            Assert.isTrue(StringUtils.isNotBlank(mbCalibrationNum.getMutualStrategyNo()),"校称类型为“互检”情况下，校称策略编码不能为空！");
            mbCalibrationNumRel.setMutualStrategyNo(mbCalibrationNum.getMutualStrategyNo());
            Assert.isTrue(StringUtils.isNotBlank(mbCalibrationNum.getMutualStrategyName()),"校称类型为“互检”情况下，校称策略名称不能为空！");
            mbCalibrationNumRel.setMutualStrategyName(mbCalibrationNum.getMutualStrategyName());
        }
        Assert.isTrue(StringUtils.isNotBlank(mbCalibrationNum.getUpWeight().toString()),"可允许的重量上限不能为空！");
        mbCalibrationNumRel.setUpWeight(mbCalibrationNum.getUpWeight());
        Assert.isTrue(StringUtils.isNotBlank(mbCalibrationNum.getIsMeter()),"是否允许计量不能为空！");
        mbCalibrationNumRel.setIsMeter(mbCalibrationNum.getIsMeter());

        String no = meterBaseCalibraNumRelMapper.GetNewID();
        //mtCalibraRelation.setId(new SimpleDateFormat("yyyyMMdd").format(new Date()) +no);
        mbCalibrationNumRel.setRelationNo(new SimpleDateFormat("yyyyMMdd").format(new Date()) +no);
        mbCalibrationNumRel.setValidFlag("1");
        ////设置创建人、创建时间
        mbCalibrationNumRel.setCreateManNo(mbCalibrationNum.getCreateManNo());
        mbCalibrationNumRel.setCreateManName(mbCalibrationNum.getCreateManName());
        mbCalibrationNumRel.setCreateTime(new Date());

        meterBaseCalibraNumRelMapper.insertSelective(mbCalibrationNumRel);

        String key2 = meterBaseCalibrationNumService.updateStateByPrimaryKey(mbCalibrationNum.getCalibrationNumNo(),flag);
        Assert.isTrue((key2 == null || key2.equals("")),"更新关联表错误"+key2);

        return "";
    }

    @Override
    public String updateBymbCalibWeightNo(String calWeightNo, MeterBaseCalibrationNum models) {
        try{
            if (StringUtils.isEmpty(calWeightNo) && (calWeightNo == models.getCalibrationNumNo())){
                return "校称重量编号不能为空";
            }
            List<MeterBaseCalibraNumRel> mbCalibNumRels=meterBaseCalibraNumRelMapper.selectByCalibWeightNo(calWeightNo);
            for (MeterBaseCalibraNumRel mbCalibNumRel:mbCalibNumRels){
                if (StringUtils.isEmpty(mbCalibNumRel.getRelationNo())){
                    return "关联数据不存在！";
                }else{
                    mbCalibNumRel.setCalibrationNum(models.getCalibrationNum());
                    mbCalibNumRel.setCalibrationTypeNo(models.getCalibrationTypeNo());
                    mbCalibNumRel.setCalibrationTypeName(models.getCalibrationTypeName());
                    mbCalibNumRel.setSpotTypeNo(models.getSpotTypeNo());
                    mbCalibNumRel.setSpotTypeName(models.getSpotTypeName());
                    mbCalibNumRel.setMutualStrategyNo(models.getMutualStrategyNo());
                    mbCalibNumRel.setMutualStrategyName(models.getMutualStrategyName());
                    mbCalibNumRel.setIsMeter(models.getIsMeter());
                    mbCalibNumRel.setUpWeight(models.getUpWeight());
                    mbCalibNumRel.setIsMeter(models.getIsMeter());
                    meterBaseCalibraNumRelMapper.updateByPrimaryKey(mbCalibNumRel);
                }
            }

        }catch (Exception ex){
            ex.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return "操作异常，请联系管理员";
        }
        return  "";
    }


}
