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<String, Object> redisTemplate; 
 | 
    @Autowired 
 | 
    private CompanyExtMapper companyExtMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private BomMapper bomMapper; 
 | 
    @Override 
 | 
    public PageData<ProceduresExtListVO> findPage(PageWrap<QueryProceduresExtDTO> pageWrap) { 
 | 
        PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        List<ProceduresExtListVO> 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<ProceduresExtListVO> clist =    proceduresExtMapper.selectList(d); 
 | 
        //加入redis缓存,以企业id为编码,缓存企业二维码 
 | 
        RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_PROCEDURE_KEY+com.getId(),clist); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<ProceduresExtListVO> 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<ProceduresExtListVO> result = proceduresExtMapper.selectList(dto); 
 | 
        return result; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public  void loadAll() { 
 | 
        QueryCompanyExtDTO dto = new QueryCompanyExtDTO(); 
 | 
        dto.setDeleted(Constants.ZERO); 
 | 
        //查询全部企业信息 
 | 
        List<CompanyExtListVO> list =    companyExtMapper.selectList(dto); 
 | 
        if(list != null && list.size()>0){ 
 | 
            QueryProceduresExtDTO d = new QueryProceduresExtDTO(); 
 | 
            d.setDeleted(Constants.ZERO); 
 | 
            //查询全部企业工序信息 
 | 
            List<ProceduresExtListVO> codeList =    proceduresExtMapper.selectList(d); 
 | 
            for(CompanyExtListVO com : list){ 
 | 
                //当前企业的全部工序信息 
 | 
                List<ProceduresExtListVO> 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<ProceduresExtListVO>  getAllByComId(Integer id, List<ProceduresExtListVO> alllist) { 
 | 
        List<ProceduresExtListVO> 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<ProceduresExtListVO> getGYListByCondition(Integer routeId) { 
 | 
        List<ProceduresExtListVO> result = proceduresExtMapper.getGYListByCondition(routeId); 
 | 
        return result; 
 | 
    } 
 | 
    @Override 
 | 
    public List<ProceduresExtListVO>  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<Integer> ids =user.getProcedureIds(); 
 | 
        List<ProceduresExtListVO> result = new ArrayList<>(); 
 | 
        if(ids!=null && ids.size()>0){ 
 | 
            //查询缓存数据 
 | 
            List<ProceduresExtListVO> 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<Integer> 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<ProceduresExtListVO> clist = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_PROCEDURE_KEY+comId,ArrayList.class); 
 | 
       return getModelFromList(clist,id); 
 | 
    } 
 | 
  
 | 
    private ProceduresExtListVO getModelFromList(List<ProceduresExtListVO> 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<Integer> ids){ 
 | 
        if(comId==null || ids == null){ 
 | 
            return null; 
 | 
        } 
 | 
        String temp = ""; 
 | 
        //查询缓存数据 
 | 
        List<ProceduresExtListVO> 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<Integer> idList = new ArrayList<>(); 
 | 
        for(String s : ids){ 
 | 
            idList.add(Integer.parseInt(s)); 
 | 
        } 
 | 
        return getNamesByIds(comId,idList); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<Procedures> getListByMaterialId(Integer materialId){ 
 | 
        //获取物料BOM信息 
 | 
        List<Bom> bomList = bomMapper.selectList(new QueryWrapper<Bom>().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<Procedures> proceduresList = proceduresMapper.selectList( 
 | 
                new QueryWrapper<Procedures>().apply(" id in ( select r.PROCEDURE_ID  from route_procedure r where r.ROUTE_ID = '"+bom.getRouteId()+"' order by r.SORTNUM  )  ") 
 | 
  
 | 
        ); 
 | 
       return proceduresList; 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |