package doumeemes.service.ext.impl; 
 | 
  
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.github.pagehelper.PageHelper; 
 | 
import com.github.pagehelper.PageInfo; 
 | 
import doumeemes.core.constants.ResponseStatus; 
 | 
import doumeemes.core.exception.BusinessException; 
 | 
import doumeemes.core.model.LoginUserInfo; 
 | 
import doumeemes.core.model.PageData; 
 | 
import doumeemes.core.model.PageWrap; 
 | 
import doumeemes.core.utils.Constants; 
 | 
import doumeemes.core.utils.redis.RedisUtil; 
 | 
import doumeemes.dao.business.WOutboundMapper; 
 | 
import doumeemes.dao.business.WTransferMapper; 
 | 
import doumeemes.dao.business.WorkorderMapper; 
 | 
import doumeemes.dao.business.model.*; 
 | 
import doumeemes.dao.ext.*; 
 | 
import doumeemes.dao.ext.dto.QueryBarcodeParamExtDTO; 
 | 
import doumeemes.dao.ext.dto.QueryCompanyExtDTO; 
 | 
import doumeemes.dao.ext.vo.BarcodeParamContent; 
 | 
import doumeemes.dao.ext.vo.BarcodeParamExtListVO; 
 | 
import doumeemes.dao.ext.vo.CompanyExtListVO; 
 | 
import doumeemes.service.ext.BarcodeParamExtService; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.data.redis.core.RedisTemplate; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
import java.util.Objects; 
 | 
  
 | 
/** 
 | 
 * 二维码设置Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2022/04/20 11:01 
 | 
 */ 
 | 
@Service 
 | 
public class BarcodeParamExtServiceImpl implements BarcodeParamExtService { 
 | 
  
 | 
    @Autowired 
 | 
    private RedisTemplate<String, Object> redisTemplate; 
 | 
    @Autowired 
 | 
    private CompanyExtMapper companyExtMapper; 
 | 
    @Autowired 
 | 
    private BarcodeParamExtMapper barcodeParamExtMapper; 
 | 
    @Autowired 
 | 
    private MaterialExtMapper materialExtMapper; 
 | 
    @Autowired 
 | 
    private WTransferMapper wTransferMapper; 
 | 
    @Autowired 
 | 
    private WOutboundMapper wOutboundMapper; 
 | 
    @Autowired 
 | 
    private AppliancesExtMapper appliancesExtMapper; 
 | 
    @Autowired 
 | 
    private WarehouseExtMapper warehouseExtMapper; 
 | 
    @Autowired 
 | 
    private WarehouseLocationExtMapper warehouseLocationExtMapper; 
 | 
    @Autowired 
 | 
    private WorkorderMapper workorderMapper; 
 | 
    @Autowired 
 | 
    private DeviceExtMapper deviceExtMapper; 
 | 
    @Autowired 
 | 
    private CompanyUserExtMapper companyUserExtMapper; 
 | 
  
 | 
    @Override 
 | 
    public PageData<BarcodeParamExtListVO> findPage(PageWrap<QueryBarcodeParamExtDTO> pageWrap) { 
 | 
        PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        List<BarcodeParamExtListVO> result = barcodeParamExtMapper.selectList(pageWrap.getModel()); 
 | 
        return PageData.from(new PageInfo<>(result)); 
 | 
    } 
 | 
    @Override 
 | 
    public   void initParamData(Company com){ 
 | 
        String[] names = new String[]{"WL","CK","HW","GD","GZ","S","YG","ZKD","CKD","RKD","K"}; 
 | 
        BarcodeParam param = new BarcodeParam(); 
 | 
        param.setCreateTime(new Date()); 
 | 
        param.setStatus(Constants.ONE); 
 | 
        param.setDepartId(com.getRootDepartment().getId()); 
 | 
        param.setRootDepartId(com.getRootDepartment().getId()); 
 | 
        param.setDeleted(Constants.ZERO); 
 | 
        for(int i=0;i<10;i++){ 
 | 
            param.setPrefix(names[i]); 
 | 
            param.setType(i); 
 | 
            barcodeParamExtMapper.insert(param); 
 | 
        } 
 | 
        CompanyExtListVO c = new CompanyExtListVO(); 
 | 
        c.setId(com.getId()); 
 | 
        loadCom(c); 
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public  void loadCom(CompanyExtListVO com ) { 
 | 
        QueryBarcodeParamExtDTO d = new QueryBarcodeParamExtDTO(); 
 | 
        d.setDeleted(Constants.ZERO); 
 | 
        d.setDmodelCompanyId(com.getId()); 
 | 
        //查询全部企业部门信息 
 | 
        List<BarcodeParamExtListVO> clist =    barcodeParamExtMapper.selectList(d); 
 | 
        //加入redis缓存,以企业id为编码,缓存企业二维码 
 | 
        RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_BARCODE_KEY+com.getId(),clist); 
 | 
    } 
 | 
    @Override 
 | 
    public BarcodeParamExtListVO getByCode(Integer comId,Integer departId,String code){ 
 | 
        if(comId==null || StringUtils.isBlank(code)){ 
 | 
            return null; 
 | 
        } 
 | 
        //查询缓存数据 
 | 
        List<BarcodeParamExtListVO> clist = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_BARCODE_KEY+comId,ArrayList.class); 
 | 
        if(clist!=null){ 
 | 
            for(BarcodeParamExtListVO model:clist){ 
 | 
                if(StringUtils.isNotBlank(model.getPrefix()) && code.startsWith(model.getPrefix()) &&Constants.equalsInteger(model.getDepartId(),departId) ){ 
 | 
                    return model; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return null; 
 | 
  
 | 
    } 
 | 
    @Override 
 | 
    public  BarcodeParamExtListVO getByCodeId(Integer comId,Integer departId, Integer brcode){ 
 | 
        if(comId==null || brcode == null){ 
 | 
            return null; 
 | 
        } 
 | 
        //查询缓存数据 
 | 
        List<BarcodeParamExtListVO> clist = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_BARCODE_KEY+comId,ArrayList.class); 
 | 
        if(clist!=null){ 
 | 
            for(BarcodeParamExtListVO model:clist){ 
 | 
                if(Constants.equalsInteger(brcode,model.getId())&&Constants.equalsInteger(model.getDepartId(),departId)){ 
 | 
                    return model; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
            return null; 
 | 
  
 | 
    } 
 | 
    @Override 
 | 
    public  Integer getByType(Integer comId,Integer departId, Integer type){ 
 | 
        if(comId==null || type == null){ 
 | 
            return null; 
 | 
        } 
 | 
        //查询缓存数据 
 | 
        List<BarcodeParamExtListVO> clist = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_BARCODE_KEY+comId,ArrayList.class); 
 | 
        if(clist!=null){ 
 | 
            for(BarcodeParamExtListVO model:clist){ 
 | 
                if(Constants.equalsInteger(type,model.getType())&&Constants.equalsInteger(model.getDepartId(),departId)){ 
 | 
                    return model.getId(); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
            return null; 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    @Override 
 | 
    public BarcodeParamContent getBarcodeContent(String code, LoginUserInfo loginUserInfo){ 
 | 
        BarcodeParamContent barcodeParamContent = new BarcodeParamContent(); 
 | 
        if(loginUserInfo.getComDepartment().getId()==null || StringUtils.isBlank(code)){ 
 | 
            return null; 
 | 
        } 
 | 
        //查询缓存数据 
 | 
        List<BarcodeParamExtListVO> clist = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_BARCODE_KEY+loginUserInfo.getCompany().getId(),ArrayList.class); 
 | 
        if(clist!=null){ 
 | 
            for(BarcodeParamExtListVO model:clist){ 
 | 
                if(Constants.equalsInteger(model.getDepartId(),loginUserInfo.getComDepartment().getId()) && StringUtils.isNotBlank(model.getPrefix()) && code.startsWith(model.getPrefix())){ 
 | 
                    barcodeParamContent.setBarcodeType(model.getType()); 
 | 
                    if(model.getType() == Constants.BARCODEPARAM_TYPE.material){ 
 | 
                        Material material =   materialExtMapper.selectOne(new QueryWrapper<Material>() 
 | 
                                .eq("CODE",code.replaceFirst(model.getPrefix(),"")) 
 | 
                                .eq("QRCODE_ID",model.getId()) 
 | 
                                .eq("ROOT_DEPART_ID",loginUserInfo.getRootDepartment().getId()) 
 | 
                        ); 
 | 
                        if(Objects.isNull(material)){ 
 | 
                            throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未匹配到数据信息"); 
 | 
                        } 
 | 
                        barcodeParamContent.setId(material.getId()); 
 | 
                    }else if(model.getType() == Constants.BARCODEPARAM_TYPE.warehouse){ 
 | 
                        Warehouse warehouse = warehouseExtMapper.selectOne(new QueryWrapper<Warehouse>() 
 | 
                                .eq("CODE", code.replaceFirst(model.getPrefix(),"")) 
 | 
                                .eq("QRCODE", model.getId()) 
 | 
                                .eq("ROOT_DEPART_ID",loginUserInfo.getRootDepartment().getId()) 
 | 
                        ); 
 | 
                        if(Objects.isNull(warehouse)){ 
 | 
                            throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未匹配到数据信息"); 
 | 
                        } 
 | 
                        barcodeParamContent.setId(warehouse.getId()); 
 | 
                    }else if(model.getType() == Constants.BARCODEPARAM_TYPE.localtion){ 
 | 
                        WarehouseLocation warehouseLocation = warehouseLocationExtMapper.selectOne(new QueryWrapper<WarehouseLocation>() 
 | 
                                .eq("CODE", code.replaceFirst(model.getPrefix(),"")) 
 | 
                                .eq("QRCODE", model.getId()) 
 | 
                                .eq("ROOT_DEPART_ID",loginUserInfo.getRootDepartment().getId()) 
 | 
                        ); 
 | 
                        if(Objects.isNull(warehouseLocation)){ 
 | 
                            throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未匹配到数据信息"); 
 | 
                        } 
 | 
                        barcodeParamContent.setId(warehouseLocation.getId()); 
 | 
                    }else if(model.getType() == Constants.BARCODEPARAM_TYPE.workorder){ 
 | 
                        Workorder workorder = workorderMapper.selectOne(new QueryWrapper<Workorder>() 
 | 
                                .eq("CODE", code.replaceFirst(model.getPrefix(),"")) 
 | 
                                .eq("QRCODE_ID", model.getId()) 
 | 
                                .eq("ROOT_DEPART_ID",loginUserInfo.getRootDepartment().getId()) 
 | 
                        ); 
 | 
                        if(Objects.isNull(workorder)){ 
 | 
                            throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未匹配到数据信息"); 
 | 
                        } 
 | 
                        barcodeParamContent.setId(workorder.getId()); 
 | 
  
 | 
                    }else if(model.getType() == Constants.BARCODEPARAM_TYPE.appliance){ 
 | 
                        Appliances appliances = appliancesExtMapper.selectOne(new QueryWrapper<Appliances>() 
 | 
                                .eq("CODE", code.replaceFirst(model.getPrefix(),"")) 
 | 
                                .eq("BRCODE", model.getId()) 
 | 
                                .eq("ROOT_DEPART_ID",loginUserInfo.getRootDepartment().getId()).last(" limit 1") 
 | 
                        ); 
 | 
                        if(Objects.isNull(appliances)){ 
 | 
                            throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未匹配到数据信息"); 
 | 
                        } 
 | 
                        barcodeParamContent.setId(appliances.getId()); 
 | 
                    }else if(model.getType() == Constants.BARCODEPARAM_TYPE.device){ 
 | 
                        Device device = deviceExtMapper.selectOne(new QueryWrapper<Device>() 
 | 
                                .eq("CODE", code.replaceFirst(model.getPrefix(),"")) 
 | 
                                .eq("ROOT_DEPART_ID",loginUserInfo.getRootDepartment().getId()) 
 | 
                        ); 
 | 
                        if(Objects.isNull(device)){ 
 | 
                            throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未匹配到数据信息"); 
 | 
                        } 
 | 
                        barcodeParamContent.setId(device.getId()); 
 | 
                    }else if(model.getType() == Constants.BARCODEPARAM_TYPE.user){ 
 | 
                        CompanyUser companyUser = companyUserExtMapper.selectOne(new QueryWrapper<CompanyUser>() 
 | 
                                .eq("CODE", code.replaceFirst(model.getPrefix(),"")) 
 | 
                                .eq("QRCODEID", model.getId()) 
 | 
                                .eq("ROOT_DEPART_ID",loginUserInfo.getRootDepartment().getId()) 
 | 
                        ); 
 | 
                        if(Objects.isNull(companyUser)){ 
 | 
                            throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未匹配到数据信息"); 
 | 
                        } 
 | 
                        barcodeParamContent.setId(companyUser.getId()); 
 | 
                    }else if(model.getType() == Constants.BARCODEPARAM_TYPE.transfer){ 
 | 
                        WTransfer wTransfer = wTransferMapper.selectOne(new QueryWrapper<WTransfer>() 
 | 
                                .eq("CODE",code) 
 | 
                                .eq("ROOT_DEPART_ID",loginUserInfo.getRootDepartment().getId()) 
 | 
                        ); 
 | 
                        if(Objects.isNull(wTransfer)){ 
 | 
                            throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未匹配到数据信息"); 
 | 
                        } 
 | 
                        barcodeParamContent.setId(wTransfer.getId()); 
 | 
                    }else if(model.getType() == Constants.BARCODEPARAM_TYPE.out){ 
 | 
                        WOutbound wOutbound = wOutboundMapper.selectOne(new QueryWrapper<WOutbound>() 
 | 
                                .eq("CODE",code) 
 | 
                                .eq("TYPE",Constants.ZERO) 
 | 
                                .eq("ROOT_DEPART_ID",loginUserInfo.getRootDepartment().getId()) 
 | 
                        ); 
 | 
                        if(Objects.isNull(wOutbound)){ 
 | 
                            throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未匹配到数据信息"); 
 | 
                        } 
 | 
                        barcodeParamContent.setId(wOutbound.getId()); 
 | 
                    }else if(model.getType() == Constants.BARCODEPARAM_TYPE.in){ 
 | 
                        WOutbound wOutbound = wOutboundMapper.selectOne(new QueryWrapper<WOutbound>() 
 | 
                                .eq("CODE",code) 
 | 
                                .eq("TYPE",Constants.ONE) 
 | 
                                .eq("ROOT_DEPART_ID",loginUserInfo.getRootDepartment().getId()) 
 | 
                        ); 
 | 
                        if(Objects.isNull(wOutbound)){ 
 | 
                            throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未匹配到数据信息"); 
 | 
                        } 
 | 
                        barcodeParamContent.setId(wOutbound.getId()); 
 | 
                    }else{ 
 | 
                        throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未匹配到条码类别:【"+model.getType()+"】"); 
 | 
                    } 
 | 
                    return barcodeParamContent; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "未读取到条码分类信息,请检查条码信息"); 
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public  void loadAll() { 
 | 
        QueryCompanyExtDTO dto = new QueryCompanyExtDTO(); 
 | 
        dto.setDeleted(Constants.ZERO); 
 | 
        //查询全部企业信息 
 | 
        List<CompanyExtListVO> list =    companyExtMapper.selectList(dto); 
 | 
        if(list != null && list.size()>0){ 
 | 
            QueryBarcodeParamExtDTO d = new QueryBarcodeParamExtDTO(); 
 | 
            d.setDeleted(Constants.ZERO); 
 | 
            //查询全部企业部门信息 
 | 
            List<BarcodeParamExtListVO> codeList =    barcodeParamExtMapper.selectList(d); 
 | 
            for(CompanyExtListVO com : list){ 
 | 
                //当前企业的全部部门信息 
 | 
                List<BarcodeParamExtListVO> clist = getAllBarcodeByComId(com.getId(),codeList); 
 | 
                //加入redis缓存,以企业id为编码,缓存企业二维码 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_BARCODE_KEY+com.getId(),clist); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
    /** 
 | 
     * 根据企业编码获取二维码配置 
 | 
     * @param id 
 | 
     * @param alllist 
 | 
     * @return 
 | 
     */ 
 | 
    private  List<BarcodeParamExtListVO>  getAllBarcodeByComId(Integer id, List<BarcodeParamExtListVO> alllist) { 
 | 
        List<BarcodeParamExtListVO> list = null; 
 | 
        if(alllist!= null){ 
 | 
            for(BarcodeParamExtListVO d :alllist){ 
 | 
                if(d.getDmodel()!=null && Constants.equalsInteger(id,d.getDmodel().getCompanyId())){ 
 | 
                    if(list == null){ 
 | 
                        list = new ArrayList<>(); 
 | 
                    } 
 | 
                    list.add(d); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return  list; 
 | 
    } 
 | 
} 
 |