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 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 findPage(PageWrap pageWrap) { PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); List 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 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 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 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 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 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() .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() .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() .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() .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() .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() .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() .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() .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() .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() .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 list = companyExtMapper.selectList(dto); if(list != null && list.size()>0){ QueryBarcodeParamExtDTO d = new QueryBarcodeParamExtDTO(); d.setDeleted(Constants.ZERO); //查询全部企业部门信息 List codeList = barcodeParamExtMapper.selectList(d); for(CompanyExtListVO com : list){ //当前企业的全部部门信息 List 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 getAllBarcodeByComId(Integer id, List alllist) { List 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; } }