BarcodeManagerImpl.java 5.2 KB
package com.myproject.manager.impl;

import com.google.common.base.Strings;
import com.myproject.bean.search.PageList;
import com.myproject.bean.update.Barcode;
import com.myproject.bean.update.Component;
import com.myproject.dao.mongo.IBarcodeDao;
import com.myproject.exception.ValidateException;
import com.myproject.manager.IBarcodeManager;
import com.myproject.manager.IComponentManager;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

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

/**
 * Created by kangmor on 2015/12/1.
 */
@Service
public class BarcodeManagerImpl implements IBarcodeManager {

    @Autowired
    protected IBarcodeDao barcodeDao;
    @Autowired
    protected IComponentManager componentManager;
    protected final transient Logger log = LogManager.getLogger(getClass());

    @Override
    public Barcode findByBarcode(String barcode) {
        log.debug("Find barcode " + barcode);
        if (StringUtils.isEmpty(barcode))
            return null;
        return barcodeDao.findOneByCondition(new String[]{"barcode"}, new String[]{barcode});
    }

    @Override
    public void updatePutInDate(){
        for (Barcode barcode : findAll()) {
            long putInTime = barcode.getPutInTime();
            if(putInTime > 0){
                barcode.setPutInDate(new Date(putInTime));
                barcodeDao.save(barcode);
            }
        }
    }

    @Override
    public Barcode get(String id) {
        return barcodeDao.findOneById(id);
    }

    @Override
    public Barcode save(Barcode barcode) throws ValidateException{
        validateSave(barcode);
        Component component = componentManager.findByPartNumber(barcode.getPartNumber());
        if(component != null){
            if(barcode.getMaxStorageTime() <= 0){
                barcode.setMaxStorageTime(component.getMaxStorageTime());
            }
            if(barcode.getAmount() == 1){
                barcode.setAmount(component.getAmount());
            }
            barcode.setType(component.getType());
            barcode.setWarmTime(component.getWarmTime());
            barcode.setOtherField1(component.getProductionType());
            barcode.setFixtureNumber(component.getFixtureNumber());
            if(barcode.getPlateSize() <= 0){
                log.info("设置置["+barcode.getBarcode()+"]的尺寸信息");
                barcode.setPlateSize(component.getPlateSize());
                barcode.setHeight(component.getHeight());
            }
        }else{
            log.error("未找到物料["+barcode.getPartNumber()+"]的档案");
        }
//        String id = barcode.getId();
//        if(!Strings.isNullOrEmpty(id)){
//            Barcode oldBarcode = get(id);
//            //barcode.setNoChangeField(oldBarcode);
//        }
        return barcodeDao.save(barcode);
    }

    @Override
    public void delete(Barcode barcode) throws ValidateException{
        barcodeDao.removeOne(barcode);
    }

    @Override
    public List<Barcode> findAll() {
        return barcodeDao.findAll();
    }

    @Override
    public PageList findByQuery(Query query, PageList pageList) {
        return barcodeDao.findByQuery(query, pageList);
    }

    protected void validateSave(Barcode barcode) throws ValidateException {
        if (StringUtils.isEmpty(barcode.getBarcode())) {
            throw new ValidateException("barcode.error.empty");
        }
        if (StringUtils.isEmpty(barcode.getPartNumber())) {
            throw new ValidateException("barcode.error.partNumber.empty", new String[]{barcode.getBarcode()});
        }
        if (barcode.getAmount() < 0) {
            throw new ValidateException("barcode.error.amount.negative", new String[]{barcode.getBarcode()});
        }
        if (!validateUnique(barcode)) {
            throw new ValidateException("barcode.error.unique", new String[]{barcode.getBarcode()});
        }
        if (!validateComponent(barcode)) {
            throw new ValidateException("barcode.error.component.notExist", new String[]{barcode.getBarcode()});
        }
    }


    protected boolean validateComponent(Barcode barcode) {
        return componentManager.findByPartNumber(barcode.getPartNumber()) != null;
    }

    protected boolean validateUnique(Barcode barcode) {
        boolean unique = true;
        if (Strings.isNullOrEmpty(barcode.getId())){
            Barcode anotherBarcode = findByBarcode(barcode.getBarcode());
            if(anotherBarcode != null){
                log.info("ID:"+barcode.getId()+"[barcode:"+barcode.getBarcode() +"] another ID:" + anotherBarcode.getId() +" With the same barcode:"+anotherBarcode.getBarcode());
                unique = false;
            }
        }
        return unique;
    }

    @Override
    public void validate(Barcode barcode, List errors) {
    }


    public void setBarcodeDao(IBarcodeDao barcodeDao) {
        this.barcodeDao = barcodeDao;
    }

    public void setComponentManager(IComponentManager componentManager) {
        this.componentManager = componentManager;
    }
}