jiangping
2023-08-21 2837bdd57f72e386bbf9a725e7b3a13e5eb9e930
server/src/main/java/doumeemes/service/business/impl/DeviceServiceImpl.java
@@ -1,5 +1,8 @@
package doumeemes.service.business.impl;
import com.baomidou.mybatisplus.extension.api.R;
import doumeemes.core.constants.ResponseStatus;
import doumeemes.core.exception.BusinessException;
import doumeemes.core.model.ApiResponse;
import doumeemes.core.model.LoginUserInfo;
import doumeemes.core.model.PageData;
@@ -7,12 +10,11 @@
import doumeemes.core.utils.Constants;
import doumeemes.core.utils.DateUtil;
import doumeemes.core.utils.Utils;
import doumeemes.core.utils.excel.EasyExcelUtil;
import doumeemes.core.utils.redis.RedisUtil;
import doumeemes.dao.business.DeviceMapper;
import doumeemes.dao.business.UserDeviceMapper;
import doumeemes.dao.business.model.CompanyUser;
import doumeemes.dao.business.model.Device;
import doumeemes.dao.business.model.UserDevice;
import doumeemes.dao.business.*;
import doumeemes.dao.business.model.*;
import doumeemes.dao.ext.dto.DeviceImportDTO;
import doumeemes.dao.ext.dto.QueryDeviceExtDTO;
import doumeemes.dao.ext.vo.DeviceExtListVO;
import doumeemes.service.business.DeviceService;
@@ -26,10 +28,12 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 生产设备信息表Service实现
@@ -49,6 +53,15 @@
    private DeviceExtService deviceExtService;
    @Autowired
    private UserDeviceMapper userDeviceMapper;
    @Autowired
    private DepartmentMapper departmentMapper;
    @Autowired
    private   ProceduresMapper proceduresMapper;
    @Autowired
    private WarehouseLocationMapper  warehouseLocationMapper;
    @Override
    public Integer create(Device device) {
@@ -106,7 +119,7 @@
        QueryWrapper<Device> wrapper = new QueryWrapper<>(device);
        return deviceMapper.selectList(wrapper);
    }
    @Override
    public PageData<Device> findPage(PageWrap<Device> pageWrap) {
        IPage<Device> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
@@ -240,7 +253,7 @@
            userDeviceMapper.delete(new QueryWrapper<UserDevice>().eq("DEVICE_ID",deviceId));
        }
        if(StringUtils.isNotEmpty(userIds)){
            String [] ids=userIds.split(",");
            String [] ids=userIds.replace(" ","").split("[.,;,]");
            for (String id : ids) {
                CompanyUser companyUser = companyUserService.findById(Integer.valueOf(id));
                UserDevice userDevice = new UserDevice();
@@ -256,6 +269,108 @@
        }
    }
    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
    @Override
    public void importPlans(MultipartFile file) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!");
        }
        //解析excel
        List<DeviceImportDTO> plansList = EasyExcelUtil.importExcel(file, 1, 1, DeviceImportDTO.class);
        if(plansList == null || plansList.size()==0){
            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "导入数据内容有误!");
        }
        List<String> departName = new ArrayList<>();
        List<String> procedureName = new ArrayList<>();
        plansList.forEach(s->{
            if (StringUtils.isBlank(s.getDeviceName())
                    || s.getDeviceName().length() > 50
                    || StringUtils.isBlank(s.getDepartName())
                    || StringUtils.isBlank(s.getProcedureName())
                    || StringUtils.isBlank(s.getProduceWarehouseLocationName())
                    || StringUtils.isBlank(s.getFinishWarehouseLocationName())){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"导入数据内容有误");
            }
            departName.add(s.getDepartName());
            procedureName.add(s.getProcedureName());
        });
        plansList.forEach(s->{
            QueryWrapper<Department> wrapper = new QueryWrapper<>();
            wrapper.lambda()
                    .eq(Department::getRootId,user.getRootDepartment().getId())
                    .eq(Department::getName,departName)
                    .last("limit 1");
            Department department = departmentMapper.selectOne(wrapper);
            if(Objects.isNull(department)){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"工厂名称不存在");
            }
            QueryWrapper<Procedures> proceduresQuery = new QueryWrapper<>();
            proceduresQuery.lambda()
                    .eq(Procedures::getRootDepartId,user.getRootDepartment().getId())
                    .eq(Procedures::getDepartId,department.getId())
                    .eq(Procedures::getName,s.getProcedureName());
            Procedures procedures = proceduresMapper.selectOne(proceduresQuery);
            if(Objects.isNull(procedures)){
                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);
            Map<String, WarehouseLocation> collect = warehouseLocations.stream().collect(Collectors.toMap(w -> w.getUnionName(), w -> w));
            Device device = new Device();
            device.setDeleted(Constants.ZERO);
            device.setCreateUser(user.getId());
            device.setCreateTime(new Date());
            device.setUpdateUser(user.getId());
            device.setUpdateTime(new Date());
//            device.setRemark();
            device.setRootDepartId(department.getRootId());
            device.setDepartId(procedures.getId());
            device.setProcedureId(procedures.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.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());
            deviceMapper.insert(device);
            if(StringUtils.isNotBlank(s.getUserIds())){
                this.dealDeviceUserId(Constants.ZERO,device.getUserIds().trim(),device.getId(),user);
            }
        });
    }
    public synchronized String  getNextCode(Integer comId ){
        String prefix =  "S-" + DateUtil.getDate(new Date(),"yyyyMMdd") +"-";