bug
jiangping
2023-11-07 64b432916af9c9218ab3f3eca614e26c542142ae
server/src/main/java/doumeemes/service/business/impl/DeviceServiceImpl.java
@@ -1,6 +1,7 @@
package doumeemes.service.business.impl;
import com.baomidou.mybatisplus.extension.api.R;
import doumeemes.biz.system.SystemDictBiz;
import doumeemes.core.constants.ResponseStatus;
import doumeemes.core.exception.BusinessException;
import doumeemes.core.model.ApiResponse;
@@ -17,6 +18,8 @@
import doumeemes.dao.ext.dto.DeviceImportDTO;
import doumeemes.dao.ext.dto.QueryDeviceExtDTO;
import doumeemes.dao.ext.vo.DeviceExtListVO;
import doumeemes.dao.system.SystemDictDataMapper;
import doumeemes.dao.system.model.SystemDictData;
import doumeemes.service.business.DeviceService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -62,6 +65,13 @@
    @Autowired
    private WarehouseLocationMapper  warehouseLocationMapper;
    @Autowired
    private WarehouseMapper  warehouseMapper;
    @Autowired
    private SystemDictDataMapper systemDictDataMapper;
    @Override
    public Integer create(Device device) {
@@ -111,7 +121,7 @@
    @Override
    public Device findOne(Device device) {
        QueryWrapper<Device> wrapper = new QueryWrapper<>(device);
        return deviceMapper.selectOne(wrapper);
        return deviceMapper.selectOne(wrapper.last("limit 1"));
    }
    @Override
@@ -219,11 +229,11 @@
            }
        }
        QueryDeviceExtDTO queryDeviceExtDTO=new QueryDeviceExtDTO();
        Device queryDeviceExtDTO=new Device();
        queryDeviceExtDTO.setDeleted(Constants.ZERO);
        queryDeviceExtDTO.setCode(device.getCode());
        queryDeviceExtDTO.setRootDepartId(user.getRootDepartment().getId());
        List<DeviceExtListVO> list= deviceExtService.getListByCondition(queryDeviceExtDTO);
        List<Device> list= this.findList(queryDeviceExtDTO);
       /* QueryDeviceExtDTO queryDeviceExtDTO1=new QueryDeviceExtDTO();
        queryDeviceExtDTO1.setDeleted(Constants.ZERO);
@@ -231,7 +241,7 @@
        queryDeviceExtDTO1.setRootDepartId(user.getRootDepartment().getId());
        List<DeviceExtListVO> list1= deviceExtService.getListByCondition(queryDeviceExtDTO1);*/
        if(list.size()>0){
            return ApiResponse.failed("设备编码,不允许添加");
            return ApiResponse.failed("设备编码已存在,不允许添加");
        }
        device.setDeleted(Constants.ZERO);
        device.setCreateTime(new Date());
@@ -283,8 +293,8 @@
        }
        List<String> departName = new ArrayList<>();
        List<String> procedureName = new ArrayList<>();
        plansList.forEach(s->{
        int num =0;
        for(DeviceImportDTO s : plansList){
            if (StringUtils.isBlank(s.getDeviceName())
                    || s.getDeviceName().length() > 50
                    || StringUtils.isBlank(s.getDepartName())
@@ -293,18 +303,20 @@
                    || StringUtils.isBlank(s.getFinishWarehouseLocationName())){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"导入数据内容有误");
            }
            if(isRepeatCode(s,num,plansList)){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"文档中设备号【"+s.getDeviceCode()+"】重复!");
            }
            departName.add(s.getDepartName());
            procedureName.add(s.getProcedureName());
        });
            num++;
        }
        plansList.forEach(s->{
            QueryWrapper<Department> wrapper = new QueryWrapper<>();
            wrapper.lambda()
                    .eq(Department::getRootId,user.getRootDepartment().getId())
                    .eq(Department::getName,departName)
                    .eq(Department::getName,s.getDepartName())
                    .last("limit 1");
            Department department = departmentMapper.selectOne(wrapper);
            if(Objects.isNull(department)){
@@ -314,32 +326,56 @@
            QueryWrapper<Procedures> proceduresQuery = new QueryWrapper<>();
            proceduresQuery.lambda()
                    .eq(Procedures::getRootDepartId,user.getRootDepartment().getId())
                    .eq(Procedures::getDepartId,department.getId())
                    .eq(Procedures::getOrgId,department.getId())
                    .eq(Procedures::getName,s.getProcedureName());
            Procedures procedures = proceduresMapper.selectOne(proceduresQuery);
            if(Objects.isNull(procedures)){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"工序名称已存在");
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"工序名称不存在");
            }
            QueryDeviceExtDTO queryDeviceExtDTO=new QueryDeviceExtDTO();
            queryDeviceExtDTO.setDeleted(Constants.ZERO);
            queryDeviceExtDTO.setCode(s.getDeviceCode());
            queryDeviceExtDTO.setRootDepartId(user.getRootDepartment().getId());
            List<DeviceExtListVO> list= deviceExtService.getListByCondition(queryDeviceExtDTO);
            if(list.size() > 0){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"设备编码不存在");
            }
//            QueryDeviceExtDTO queryDeviceExtDTO=new QueryDeviceExtDTO();
//            queryDeviceExtDTO.setDeleted(Constants.ZERO);
//            queryDeviceExtDTO.setCode(s.getDeviceCode());
//            queryDeviceExtDTO.setRootDepartId(user.getRootDepartment().getId());
//            List<DeviceExtListVO> list= deviceExtService.getListByCondition(queryDeviceExtDTO);
//            if(list.size() > 0){
//                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"设备编码不存在");
//            }
            QueryWrapper<WarehouseLocation> warehouseLocationQuery = new QueryWrapper<>();
            warehouseLocationQuery.lambda()
                                    .eq(WarehouseLocation::getRootDepartId,department.getRootId())
                                    .eq(WarehouseLocation::getUnionName
                                            ,Arrays.asList(s.getFinishWarehouseLocationName(),s.getProduceWarehouseLocationName()));
            if(Objects.equals(list.size(),2)){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"库位信息已存在");
            }
            List<WarehouseLocation> warehouseLocations = warehouseLocationMapper.selectList(warehouseLocationQuery);
                                            ,s.getProduceWarehouseLocationName()).last("limit 1");
            Map<String, WarehouseLocation> collect = warehouseLocations.stream().collect(Collectors.toMap(w -> w.getUnionName(), w -> w));
            WarehouseLocation warehouseLocation = warehouseLocationMapper.selectOne(warehouseLocationQuery);
            if (Objects.isNull(warehouseLocation)){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"待生产货位不存在");
            }
            QueryWrapper<SystemDictData> systemDictDataQuery = new QueryWrapper<>();
            systemDictDataQuery.lambda()
                    .eq(SystemDictData::getDictId,3)
                    .eq(SystemDictData::getCode,"混合");
            SystemDictData systemDictData = systemDictDataMapper.selectOne(systemDictDataQuery);
            warehouseLocationQuery.clear();
            warehouseLocationQuery.lambda()
                                    .eq(WarehouseLocation::getRootDepartId,department.getRootId())
                                    .eq(WarehouseLocation::getSystemDicDataId,systemDictData.getId())
                                    .eq(WarehouseLocation::getUnionName,s.getFinishWarehouseLocationName()).last("limit 1");
            WarehouseLocation finishWarehouseLocations = warehouseLocationMapper.selectOne(warehouseLocationQuery);
            if (Objects.isNull(finishWarehouseLocations)){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"已完工货位不是混合属性");
            }
            Map<String, WarehouseLocation> collect =new HashMap<>();
            collect.put(warehouseLocation.getUnionName(),warehouseLocation);
            collect.put(finishWarehouseLocations.getUnionName(),finishWarehouseLocations);
            Device device = new Device();
            device.setDeleted(Constants.ZERO);
@@ -348,29 +384,65 @@
            device.setUpdateUser(user.getId());
            device.setUpdateTime(new Date());
//            device.setRemark();
            device.setRootDepartId(department.getRootId());
            device.setDepartId(procedures.getId());
            device.setRootDepartId(user.getRootDepartment().getId());
            device.setDepartId(user.getCurComDepartment().getId());
            device.setProcedureId(procedures.getId());
            device.setCode(StringUtils.isNotBlank(s.getDeviceCode()) ? s.getDeviceCode() : this.getNextCode(user.getCompany().getId()));
            device.setCode(StringUtils.isNotBlank(device.getCode()) ? device.getCode() : this.getNextCode(user.getCompany().getId()));
            device.setType(StringUtils.isNotBlank(device.getCode()) ? device.getCode().trim().equals("设备") ? 1 : 0 : 1);
            Device ttt=new Device();
            ttt.setDeleted(Constants.ZERO);
            ttt.setCode(device.getCode());
            ttt.setRootDepartId(user.getRootDepartment().getId());
            if(findOne(ttt) !=null){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"设备编码【"+device.getCode()+"重复】,不允许添加");
            }
            if(StringUtils.isNotBlank(s.getType()) && StringUtils.equals("设备组",s.getType())){
                device.setType(0);
            }else{
                device.setType(1);
            }
//            device.setType(StringUtils.isNotBlank(device.getCode()) ? device.getCode().trim().equals("设备") ? 1 : 0 : 1);
            device.setName(s.getDeviceName());
            device.setModel(s.getModel());
            device.setStatus(Constants.ZERO);
//            device.setSupplier();
            device.setStationCode(s.getStationCode());
//            device.setGroupId();
//            device.setSerialNum();
            device.setProduceWarehouseLocationId(collect.get(s.getProduceWarehouseLocationName()).getId());
            device.setFinishWarehouseLocationId(collect.get(s.getFinishWarehouseLocationName()).getId());
            device.setProduceWarehouseLocationId(Optional.ofNullable(collect.get(s.getProduceWarehouseLocationName())).map(m->m.getId()).orElseThrow(null));
            device.setFinishWarehouseLocationId(Optional.ofNullable(collect.get(s.getFinishWarehouseLocationName())).map(m->m.getId()).orElseThrow(null));
            deviceMapper.insert(device);
            if(StringUtils.isNotBlank(s.getUserIds())){
                this.dealDeviceUserId(Constants.ZERO,device.getUserIds().trim(),device.getId(),user);
                QueryWrapper<CompanyUser>  companyUserQuery = new QueryWrapper<>();
                companyUserQuery.lambda()
                                .eq(CompanyUser::getComDepartId,user.getComDepartment().getId())
                                .in(CompanyUser::getPhone,Arrays.asList(s.getUserIds().split("[.,;,]")));
                List<CompanyUser> list1 = companyUserService.findList(companyUserQuery);
                if (!CollectionUtils.isEmpty(list1)){
                    List<String> collect1 = list1.stream().map(c -> c.getId().toString()).collect(Collectors.toList());
                    this.dealDeviceUserId(Constants.ZERO,StringUtils.join(collect1,","),device.getId(),user);
                }
            }
        });
    }
    private boolean isRepeatCode(DeviceImportDTO s,int num,List<DeviceImportDTO> plansList) {
        if(StringUtils.isNotBlank(s.getDeviceCode())){
            int tNum = 0;
            for(DeviceImportDTO d :plansList){
                if(num != tNum && StringUtils.equals(s.getDeviceCode(), d.getDeviceCode())){
                    return  true;
                }
                tNum++;
            }
        }
        return  false;
    }
    public synchronized String  getNextCode(Integer comId ){
        String prefix =  "S-" + DateUtil.getDate(new Date(),"yyyyMMdd") +"-";