package doumeemes.service.business.impl; import doumeemes.core.model.ApiResponse; 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.Utils; 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.ext.dto.QueryDeviceExtDTO; import doumeemes.dao.ext.vo.DeviceExtListVO; import doumeemes.service.business.DeviceService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import doumeemes.service.ext.DeviceExtService; 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 org.springframework.util.CollectionUtils; import java.util.Date; import java.util.List; /** * 生产设备信息表Service实现 * @author 江蹄蹄 * @date 2022/04/20 09:34 */ @Service public class DeviceServiceImpl implements DeviceService { @Autowired private DeviceMapper deviceMapper; @Autowired private CompanyUserServiceImpl companyUserService; @Autowired private RedisTemplate redisTemplate; @Autowired private DeviceExtService deviceExtService; @Autowired private UserDeviceMapper userDeviceMapper; @Override public Integer create(Device device) { deviceMapper.insert(device); return device.getId(); } @Override public void deleteById(Integer id) { deviceMapper.deleteById(id); } @Override public void delete(Device device) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(device); deviceMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } deviceMapper.deleteBatchIds(ids); } @Override public void updateById(Device device) { deviceMapper.updateById(device); } @Override public void updateByIdInBatch(List devices) { if (CollectionUtils.isEmpty(devices)) { return; } for (Device device: devices) { this.updateById(device); } } @Override public Device findById(Integer id) { return deviceMapper.selectById(id); } @Override public Device findOne(Device device) { QueryWrapper wrapper = new QueryWrapper<>(device); return deviceMapper.selectOne(wrapper); } @Override public List findList(Device device) { QueryWrapper wrapper = new QueryWrapper<>(device); return deviceMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper queryWrapper = new QueryWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); if (pageWrap.getModel().getId() != null) { queryWrapper.lambda().eq(Device::getId, pageWrap.getModel().getId()); } if (pageWrap.getModel().getDeleted() != null) { queryWrapper.lambda().eq(Device::getDeleted, pageWrap.getModel().getDeleted()); } if (pageWrap.getModel().getCreateUser() != null) { queryWrapper.lambda().eq(Device::getCreateUser, pageWrap.getModel().getCreateUser()); } if (pageWrap.getModel().getCreateTime() != null) { queryWrapper.lambda().ge(Device::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime())); queryWrapper.lambda().le(Device::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime())); } if (pageWrap.getModel().getUpdateUser() != null) { queryWrapper.lambda().eq(Device::getUpdateUser, pageWrap.getModel().getUpdateUser()); } if (pageWrap.getModel().getUpdateTime() != null) { queryWrapper.lambda().ge(Device::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime())); queryWrapper.lambda().le(Device::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime())); } if (pageWrap.getModel().getRemark() != null) { queryWrapper.lambda().eq(Device::getRemark, pageWrap.getModel().getRemark()); } if (pageWrap.getModel().getRootDepartId() != null) { queryWrapper.lambda().eq(Device::getRootDepartId, pageWrap.getModel().getRootDepartId()); } if (pageWrap.getModel().getDepartId() != null) { queryWrapper.lambda().eq(Device::getDepartId, pageWrap.getModel().getDepartId()); } if (pageWrap.getModel().getProcedureId() != null) { queryWrapper.lambda().eq(Device::getProcedureId, pageWrap.getModel().getProcedureId()); } if (pageWrap.getModel().getCode() != null) { queryWrapper.lambda().eq(Device::getCode, pageWrap.getModel().getCode()); } if (pageWrap.getModel().getType() != null) { queryWrapper.lambda().eq(Device::getType, pageWrap.getModel().getType()); } if (pageWrap.getModel().getName() != null) { queryWrapper.lambda().eq(Device::getName, pageWrap.getModel().getName()); } if (pageWrap.getModel().getModel() != null) { queryWrapper.lambda().eq(Device::getModel, pageWrap.getModel().getModel()); } if (pageWrap.getModel().getStatus() != null) { queryWrapper.lambda().eq(Device::getStatus, pageWrap.getModel().getStatus()); } if (pageWrap.getModel().getSupplier() != null) { queryWrapper.lambda().eq(Device::getSupplier, pageWrap.getModel().getSupplier()); } if (pageWrap.getModel().getStationCode() != null) { queryWrapper.lambda().eq(Device::getStationCode, pageWrap.getModel().getStationCode()); } if (pageWrap.getModel().getGroupId() != null) { queryWrapper.lambda().eq(Device::getGroupId, pageWrap.getModel().getGroupId()); } if (pageWrap.getModel().getSerialNum() != null) { queryWrapper.lambda().eq(Device::getSerialNum, pageWrap.getModel().getSerialNum()); } for(PageWrap.SortData sortData: pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } return PageData.from(deviceMapper.selectPage(page, queryWrapper)); } @Override public long count(Device device) { QueryWrapper wrapper = new QueryWrapper<>(device); return deviceMapper.selectCount(wrapper); } @Override public ApiResponse insert(Device device) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(StringUtils.isBlank(device.getCode())){ device.setCode(this.getNextCode(user.getCompany().getId())); } if(device.getType()==Constants.ONE){ //设备组 Device groupdata= this.findById(device.getGroupId()); if(groupdata!=null&&groupdata.getFinishWarehouseLocationId()!=null&&!Constants.equalsInteger(groupdata.getFinishWarehouseLocationId(),device.getFinishWarehouseLocationId())){ return ApiResponse.failed("所属设备组的生产货位关联错误!"); } if(groupdata!=null&&groupdata.getProduceWarehouseLocationId()!=null&&!Constants.equalsInteger(groupdata.getProduceWarehouseLocationId(),device.getProduceWarehouseLocationId())){ return ApiResponse.failed("所属设备组的已完工货位关联错误!"); } } QueryDeviceExtDTO queryDeviceExtDTO=new QueryDeviceExtDTO(); queryDeviceExtDTO.setDeleted(Constants.ZERO); queryDeviceExtDTO.setCode(device.getCode()); queryDeviceExtDTO.setRootDepartId(user.getRootDepartment().getId()); List list= deviceExtService.getListByCondition(queryDeviceExtDTO); /* QueryDeviceExtDTO queryDeviceExtDTO1=new QueryDeviceExtDTO(); queryDeviceExtDTO1.setDeleted(Constants.ZERO); queryDeviceExtDTO1.setName(device.getName()); queryDeviceExtDTO1.setRootDepartId(user.getRootDepartment().getId()); List list1= deviceExtService.getListByCondition(queryDeviceExtDTO1);*/ if(list.size()>0){ return ApiResponse.failed("设备编码,不允许添加"); } device.setDeleted(Constants.ZERO); device.setCreateTime(new Date()); device.setCreateUser(user.getId()); device.setRootDepartId(user.getRootDepartment().getId()); device.setDepartId(user.getCurComDepartment().getId()); device.setStatus(Constants.ZERO); deviceMapper.insert(device); if(StringUtils.isNotBlank(device.getUserIds())){ this.dealDeviceUserId(Constants.ZERO,device.getUserIds(),device.getId(),user); } return ApiResponse.success(null); } @Override public void dealDeviceUserId(Integer type,String userIds,Integer deviceId,LoginUserInfo userInfo){ if(type.equals(Constants.ONE)){ userDeviceMapper.delete(new QueryWrapper().eq("DEVICE_ID",deviceId)); } if(StringUtils.isNotEmpty(userIds)){ String [] ids=userIds.split(","); for (String id : ids) { CompanyUser companyUser = companyUserService.findById(Integer.valueOf(id)); UserDevice userDevice = new UserDevice(); userDevice.setCompanyUserId(companyUser.getId()); userDevice.setUserId(companyUser.getUserId()); userDevice.setCreateTime(new Date()); userDevice.setCreateUser(userInfo.getId()); userDevice.setDeleted(Constants.ZERO); userDevice.setDeviceId(deviceId); userDevice.setDeviceDate(new Date()); userDeviceMapper.insert(userDevice); } } } public synchronized String getNextCode(Integer comId ){ String prefix = "S-" + DateUtil.getDate(new Date(),"yyyyMMdd") +"-"; Integer countNum = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_DEVIECE_CHECK_KEY+comId,Integer.class); countNum = Constants.formatIntegerNum(countNum)+1; //更新缓存 RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_DEVIECE_CHECK_KEY+comId,countNum); String nextIndex =Integer.toString( countNum ); return prefix + StringUtils.leftPad(nextIndex,4,"0"); } }