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.BomMapper; import doumeemes.dao.business.ProceduresMapper; import doumeemes.dao.business.model.Bom; import doumeemes.dao.business.model.Procedures; import doumeemes.dao.ext.CompanyExtMapper; import doumeemes.dao.ext.DepartmentExtMapper; import doumeemes.dao.ext.ProceduresExtMapper; import doumeemes.dao.ext.dto.QueryCompanyExtDTO; import doumeemes.dao.ext.dto.QueryProceduresExtDTO; import doumeemes.dao.ext.vo.CompanyExtListVO; import doumeemes.dao.ext.vo.ProceduresExtListVO; import doumeemes.service.ext.ProceduresExtService; import io.swagger.models.Contact; import io.swagger.models.auth.In; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; 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.List; /** * 工序信息Service实现 * @author 江蹄蹄 * @date 2022/04/20 10:57 */ @Service public class ProceduresExtServiceImpl implements ProceduresExtService { @Autowired private ProceduresExtMapper proceduresExtMapper; @Autowired private ProceduresMapper proceduresMapper; @Autowired private DepartmentExtMapper departmentExtMapper; @Autowired private RedisTemplate redisTemplate; @Autowired private CompanyExtMapper companyExtMapper; @Autowired private BomMapper bomMapper; @Override public PageData findPage(PageWrap pageWrap) { PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); List result = proceduresExtMapper.selectList(pageWrap.getModel()); return PageData.from(new PageInfo<>(result)); } @Override public void loadCom(CompanyExtListVO com ) { QueryProceduresExtDTO d = new QueryProceduresExtDTO(); d.setDeleted(Constants.ZERO); d.setDmodelCompanyId(com.getId()); //查询全部企业部门信息 List clist = proceduresExtMapper.selectList(d); //加入redis缓存,以企业id为编码,缓存企业二维码 RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_PROCEDURE_KEY+com.getId(),clist); } @Override public List getListByCondition(QueryProceduresExtDTO dto) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); } /* //获取权限范围内的工序 if(user.getProcedureIds()!=null){ dto.setIds(user.getProcedureIds()); }else{ dto.setUserId(user.getCompanyUser().getId()); }*/ List result = proceduresExtMapper.selectList(dto); return result; } @Override public void loadAll() { QueryCompanyExtDTO dto = new QueryCompanyExtDTO(); dto.setDeleted(Constants.ZERO); //查询全部企业信息 List list = companyExtMapper.selectList(dto); if(list != null && list.size()>0){ QueryProceduresExtDTO d = new QueryProceduresExtDTO(); d.setDeleted(Constants.ZERO); //查询全部企业工序信息 List codeList = proceduresExtMapper.selectList(d); for(CompanyExtListVO com : list){ //当前企业的全部工序信息 List clist = getAllByComId(com.getId(),codeList); //加入redis缓存,以企业id为编码,缓存企业工序 RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_PROCEDURE_KEY+com.getId(),clist); } } } /** * 根据企业编码获取工序 * @param id * @param alllist * @return */ private List getAllByComId(Integer id, List alllist) { List list = null; if(alllist!= null){ for(ProceduresExtListVO d :alllist){ if(d.getDmodel()!=null && Constants.equalsInteger(id,d.getDmodel().getCompanyId())){ if(list == null){ list = new ArrayList<>(); } list.add(d); } } } return list; } @Override public List getGYListByCondition(Integer routeId) { List result = proceduresExtMapper.getGYListByCondition(routeId); return result; } @Override public List getSelfList(QueryProceduresExtDTO queryProceduresExtDTO){ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); } List ids =user.getProcedureIds(); List result = new ArrayList<>(); if(ids!=null && ids.size()>0){ //查询缓存数据 List clist = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_PROCEDURE_KEY+user.getCompany().getId(),ArrayList.class); if(clist!=null){ for(ProceduresExtListVO p : clist){ if(Constants.equalsInteger(p.getDepartId(),user.getCurComDepartment().getId()) && exsistsInList(ids,p.getId())){ result.add(p); } } } } return result; } private boolean exsistsInList(List ids, Integer id) { for(Integer idt : ids){ if(Constants.equalsInteger(idt,id)){ return true; } } return false; } @Override public ProceduresExtListVO getById(Integer comId, Integer id){ if(comId==null || id == null){ return null; } //查询缓存数据 List clist = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_PROCEDURE_KEY+comId,ArrayList.class); return getModelFromList(clist,id); } private ProceduresExtListVO getModelFromList(List clist, Integer id) { if(clist!=null){ for(ProceduresExtListVO model:clist){ if(Constants.equalsInteger(id,model.getId())){ return model ; } } } return null; } @Override public String getNamesByIds(Integer comId, List ids){ if(comId==null || ids == null){ return null; } String temp = ""; //查询缓存数据 List clist = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_PROCEDURE_KEY+comId,ArrayList.class); for(Integer id:ids){ ProceduresExtListVO model = getModelFromList(clist,id); if(model !=null && StringUtils.isNotBlank(model.getName())){ if(StringUtils.isNotBlank(temp)){ temp+=","; } temp+=StringUtils.defaultString(model.getName(),""); } } return temp; } @Override public String getNamesByIdStr(Integer comId,String idStr){ if(comId==null || idStr == null){ return null; } String[] ids = idStr.split(","); List idList = new ArrayList<>(); for(String s : ids){ idList.add(Integer.parseInt(s)); } return getNamesByIds(comId,idList); } @Override public List getListByMaterialId(Integer materialId){ //获取物料BOM信息 List bomList = bomMapper.selectList(new QueryWrapper().eq("MATERIAL_ID",materialId).eq("STATUS",1)); if(bomList.size()>Constants.ONE){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,当前物料对应BOM数据异常,存在多条启用BOM!"); }else if(bomList.size()== Constants.ZERO){ return new ArrayList<>(); } Bom bom = bomList.get(Constants.ZERO); List proceduresList = proceduresMapper.selectList( new QueryWrapper().apply(" id in ( select r.PROCEDURE_ID from route_procedure r where r.ROUTE_ID = '"+bom.getRouteId()+"' ) ") .orderByAsc( " SORTNUM ") ); return proceduresList; } }