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.biz.system.SystemDictDataBiz; 
 | 
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.DateUtil; 
 | 
import doumeemes.core.utils.redis.RedisUtil; 
 | 
import doumeemes.dao.business.model.CategoryUnion; 
 | 
import doumeemes.dao.business.model.CompanyUser; 
 | 
import doumeemes.dao.business.model.WorkorderCheck; 
 | 
import doumeemes.dao.ext.CategoryUnionExtMapper; 
 | 
import doumeemes.dao.ext.CompanyUserExtMapper; 
 | 
import doumeemes.dao.ext.WorkorderCheckExtMapper; 
 | 
import doumeemes.dao.ext.dto.QueryWorkorderCheckExtDTO; 
 | 
import doumeemes.dao.ext.vo.CategoryExtListVO; 
 | 
import doumeemes.dao.ext.vo.DepartmentExtListVO; 
 | 
import doumeemes.dao.ext.vo.WorkorderCheckExtListVO; 
 | 
import doumeemes.dao.ext.vo.WorkorderCheckGroupListVO; 
 | 
import doumeemes.service.ext.CategoryExtService; 
 | 
import doumeemes.service.ext.DepartmentExtService; 
 | 
import doumeemes.service.ext.WorkorderCheckExtService; 
 | 
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.Date; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * 检验信息Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2022/04/20 10:56 
 | 
 */ 
 | 
@Service 
 | 
public class WorkorderCheckExtServiceImpl implements WorkorderCheckExtService { 
 | 
  
 | 
    @Autowired 
 | 
    private RedisTemplate<String, Object> redisTemplate; 
 | 
    @Autowired 
 | 
    private WorkorderCheckExtMapper workorderCheckExtMapper; 
 | 
    @Autowired 
 | 
    private CompanyUserExtMapper companyUserExtMapper; 
 | 
    @Autowired 
 | 
    private CategoryExtService  categoryExtService; 
 | 
  
 | 
    @Autowired 
 | 
    private CategoryUnionExtMapper  categoryUnionExtMapper; 
 | 
    @Autowired 
 | 
    private DepartmentExtService departmentExtService; 
 | 
    @Autowired 
 | 
    private SystemDictDataBiz systemDictDataBiz; 
 | 
  
 | 
    @Override 
 | 
    public PageData<WorkorderCheckExtListVO> findPage(PageWrap<QueryWorkorderCheckExtDTO> pageWrap) { 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); 
 | 
        } 
 | 
        //只能查看当前根组织的数据 
 | 
        pageWrap.getModel().setDeleted(Constants.ZERO); 
 | 
        pageWrap.getModel().setRootDepartId(user.getRootDepartment().getId()); 
 | 
//        if(!Constants.equalsInteger(user.getCurComDepartment().getId(),user.getRootDepartment().getId())){ 
 | 
            //如果当前选择的公司级组织非根组织信息,只能查看当前选择公司级组织数据 
 | 
            pageWrap.getModel().setDepartId(user.getCurComDepartment().getId()); 
 | 
//        } 
 | 
        //数据权限 
 | 
        List<Integer> dataPermission = user.getDepartPermissionList(); 
 | 
        if(dataPermission!=null){ 
 | 
           // pageWrap.getModel().setPmodelUserId(user.getId()); 
 | 
            pageWrap.getModel().setDepartIds(dataPermission); 
 | 
            pageWrap.getModel().setCreateUser(user.getId()); 
 | 
        /*    if(dataPermission.size() == 0){ 
 | 
                //只能看自己的 
 | 
                pageWrap.getModel().setPmodelUserId(user.getId()); 
 | 
            }else{ 
 | 
                //否则走数据权限 
 | 
                pageWrap.getModel().setDepartIds(dataPermission); 
 | 
            }*/ 
 | 
        } 
 | 
  
 | 
        List<Integer> procedureIds=user.getProcedureIds();//权限范围内工序 
 | 
        if(procedureIds!=null){ 
 | 
            if(procedureIds.size()>0){ 
 | 
                pageWrap.getModel().setProcedureIds(procedureIds); 
 | 
            } 
 | 
  
 | 
        } 
 | 
        PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        pageWrap.getModel().setDeleted(Constants.ZERO); 
 | 
        List<WorkorderCheckExtListVO> result = workorderCheckExtMapper.selectListNew(pageWrap.getModel()); 
 | 
        if(result.size()>0){ 
 | 
            List<DepartmentExtListVO> allDepartList = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_DEPART_LIST_KEY+user.getCompany().getId(),ArrayList.class); 
 | 
            for(int i=0;i<result.size();i++){ 
 | 
                WorkorderCheckExtListVO data=result.get(i); 
 | 
                initProuserIds(user,data,allDepartList); 
 | 
                initCheckUser(user,data,allDepartList); 
 | 
                initCheckInfo(data,user); 
 | 
            } 
 | 
        } 
 | 
        return PageData.from(new PageInfo<>(result)); 
 | 
    } 
 | 
  
 | 
    private void initCheckUser(LoginUserInfo user, WorkorderCheckExtListVO data, List<DepartmentExtListVO> allDepartList) { 
 | 
        if(data.getCheckUserId() ==null){ 
 | 
            return; 
 | 
        } 
 | 
        CompanyUser query=new CompanyUser(); 
 | 
        query.setUserId(data.getCheckUserId()); 
 | 
        query.setDeleted(Constants.ZERO); 
 | 
        query.setRootDepartId(user.getRootDepartment().getId()); 
 | 
        CompanyUser comp= companyUserExtMapper.selectOne(new QueryWrapper<>(query)); 
 | 
        if(comp!=null){ 
 | 
            DepartmentExtListVO d = departmentExtService.getModelById(user.getCompany().getId(),comp.getDepartmentId(),allDepartList); 
 | 
            String dName =d==null?"":StringUtils.defaultString(d.getName(),""); 
 | 
            data.setCheckUserDepartName(dName); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void initProuserIds(LoginUserInfo user, WorkorderCheckExtListVO data, List<DepartmentExtListVO> allDepartList) { 
 | 
        if(StringUtils.isNotEmpty(data.getProUserids())){ 
 | 
            String[] str=data.getProUserids().split(","); 
 | 
            for(String id:str){ 
 | 
                id = StringUtils.strip(id,"[]"); 
 | 
                CompanyUser query=new CompanyUser(); 
 | 
                query.setUserId(Integer.valueOf(id)); 
 | 
                Integer rootDepartId=data.getRootDepartId(); 
 | 
                query.setRootDepartId(rootDepartId); 
 | 
                CompanyUser comp= companyUserExtMapper.selectOne(new QueryWrapper<>(query).last(" limit 1")); 
 | 
                if(comp!=null){ 
 | 
                    DepartmentExtListVO d = departmentExtService.getModelById(user.getCompany().getId(),comp.getDepartmentId(),allDepartList); 
 | 
                    String dName =d==null?"":StringUtils.defaultString(d.getName(),""); 
 | 
                    data.setProUserids(comp.getName()+"-"+dName); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public  WorkorderCheckExtListVO findDetailById(Integer tid){ 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); 
 | 
        } 
 | 
        QueryWorkorderCheckExtDTO pageWrap = new QueryWorkorderCheckExtDTO(); 
 | 
        pageWrap.setId(tid); 
 | 
        //只能查看当前根组织的数据 
 | 
        pageWrap.setDeleted(Constants.ZERO); 
 | 
        List<WorkorderCheckExtListVO> result = workorderCheckExtMapper.selectListNew(pageWrap); 
 | 
        WorkorderCheckExtListVO data = null; 
 | 
        if(result != null && result.size()>0){ 
 | 
            data=result.get(0); 
 | 
            List<DepartmentExtListVO> allDepartList = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_DEPART_LIST_KEY+user.getCompany().getId(),ArrayList.class); 
 | 
            initProuserIds(user,data,allDepartList); 
 | 
            initCheckUser(user,data,allDepartList); 
 | 
            initCheckInfo(data,user); 
 | 
        } 
 | 
        return data; 
 | 
    } 
 | 
    private void initCheckInfo(WorkorderCheckExtListVO data, LoginUserInfo user) { 
 | 
        if(StringUtils.isNotBlank(data.getCheckInfo())){ 
 | 
            try { 
 | 
                List<CategoryExtListVO> clist = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_CATEGORY_KEY+user.getCompany().getId(),ArrayList.class); 
 | 
                CategoryUnion uModel = categoryUnionExtMapper.selectById(Integer.parseInt(data.getCheckInfo())); 
 | 
                if(uModel!= null ){ 
 | 
                    String cnamge = getCatenameById(user,uModel.getCateBigId(),clist)+ getCatenameById(user,uModel.getCateMiddleId(),clist)+ getCatenameById(user,uModel.getCateSmallId(),clist); 
 | 
                    data.setCheckInfo(cnamge); 
 | 
  
 | 
                } 
 | 
            }catch (Exception e){ 
 | 
  
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private String getCatenameById(LoginUserInfo user, Integer cateId, List<CategoryExtListVO> clist) { 
 | 
        if(cateId!=null){ 
 | 
            CategoryExtListVO bc = categoryExtService.getByCategoryId(user.getCompany().getId(),cateId,clist); 
 | 
            if(bc!=null){ 
 | 
                return StringUtils.defaultString(bc.getName(),""); 
 | 
            } 
 | 
        } 
 | 
        return ""; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public  List<WorkorderCheckGroupListVO> listGroupByAppliance(QueryWorkorderCheckExtDTO pageWrap){ 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); 
 | 
        } 
 | 
        if(pageWrap.getWorkorderId() == null){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,请求参数不正确!"); 
 | 
        } 
 | 
  
 | 
        WorkorderCheck cParam = new WorkorderCheck(); 
 | 
        cParam.setWorkorderId(pageWrap.getWorkorderId()); 
 | 
        cParam.setDeleted(Constants.ZERO); 
 | 
        //查询工单全部检验记录 
 | 
        List<WorkorderCheck> checkList = workorderCheckExtMapper.selectGroupList(cParam); 
 | 
        List<WorkorderCheckGroupListVO> result = new ArrayList<>(); 
 | 
        Integer scrapId =   systemDictDataBiz.queryByCode(Constants.SYSTEM_APPLIANCE_TYPE,Constants.APPLIANCES_TYPE_LABLE.scrap).getId(); 
 | 
        if(checkList !=null){ 
 | 
            for(WorkorderCheck c : checkList){ 
 | 
                if( Constants.formatIntegerNum(c.getUnqualifiedNum())>0){ 
 | 
                    WorkorderCheckGroupListVO tModel = new WorkorderCheckGroupListVO(); 
 | 
                    tModel.setId(c.getQualifiedApplianceId()); 
 | 
                    tModel.setCode(c.getQualifiedApplianceCode()); 
 | 
                    tModel.setMaterialName(c.getMaterialName()); 
 | 
                    tModel.setNum(c.getUnqualifiedNum()); 
 | 
                    if(Constants.equalsInteger(c.getDoneType(),scrapId)){ 
 | 
                        //如果是报废品 
 | 
                        tModel.setType(Constants.ONE); 
 | 
                    }else { 
 | 
                        //如果是不良品 
 | 
                        tModel.setType(Constants.ZERO); 
 | 
                    } 
 | 
                    result.add(tModel); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return result; 
 | 
    } 
 | 
    @Override 
 | 
    public synchronized  String  getNextCode(Integer comId ){ 
 | 
        String prefix =   DateUtil.getDate(new Date(),"yyyyMMdd") +"-"; 
 | 
        Integer countNum  = RedisUtil.getObject(redisTemplate, Constants.RedisKeys.COM_CHECK_CODE_KEY+comId,Integer.class); 
 | 
        countNum = Constants.formatIntegerNum(countNum)+1; 
 | 
        //更新缓存 
 | 
        RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_CHECK_CODE_KEY+comId,countNum); 
 | 
        String nextIndex =Integer.toString( countNum); 
 | 
        return prefix + StringUtils.leftPad(nextIndex,4,"0"); 
 | 
    } 
 | 
} 
 |