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;
|
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.excel.EasyExcelUtil;
|
import doumeemes.core.utils.redis.RedisUtil;
|
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.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;
|
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.transaction.annotation.Transactional;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* 生产设备信息表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<String, Object> redisTemplate;
|
@Autowired
|
private DeviceExtService deviceExtService;
|
@Autowired
|
private UserDeviceMapper userDeviceMapper;
|
|
@Autowired
|
private DepartmentMapper departmentMapper;
|
|
@Autowired
|
private ProceduresMapper proceduresMapper;
|
|
@Autowired
|
private WarehouseLocationMapper warehouseLocationMapper;
|
|
@Autowired
|
private WarehouseMapper warehouseMapper;
|
|
|
@Autowired
|
private SystemDictDataMapper systemDictDataMapper;
|
|
@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<Device> deleteWrapper = new UpdateWrapper<>(device);
|
deviceMapper.delete(deleteWrapper);
|
}
|
|
@Override
|
public void deleteByIdInBatch(List<Integer> ids) {
|
if (CollectionUtils.isEmpty(ids)) {
|
return;
|
}
|
deviceMapper.deleteBatchIds(ids);
|
}
|
|
@Override
|
public void updateById(Device device) {
|
deviceMapper.updateById(device);
|
}
|
|
@Override
|
public void updateByIdInBatch(List<Device> 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<Device> wrapper = new QueryWrapper<>(device);
|
return deviceMapper.selectOne(wrapper.last("limit 1"));
|
}
|
|
@Override
|
public List<Device> findList(Device device) {
|
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());
|
QueryWrapper<Device> 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<Device> 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("所属设备组的已完工货位关联错误!");
|
}
|
|
}
|
Device queryDeviceExtDTO=new Device();
|
queryDeviceExtDTO.setDeleted(Constants.ZERO);
|
queryDeviceExtDTO.setCode(device.getCode());
|
queryDeviceExtDTO.setRootDepartId(user.getRootDepartment().getId());
|
List<Device> list= this.findList(queryDeviceExtDTO);
|
|
/* QueryDeviceExtDTO queryDeviceExtDTO1=new QueryDeviceExtDTO();
|
queryDeviceExtDTO1.setDeleted(Constants.ZERO);
|
queryDeviceExtDTO1.setName(device.getName());
|
queryDeviceExtDTO1.setRootDepartId(user.getRootDepartment().getId());
|
List<DeviceExtListVO> 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<UserDevice>().eq("DEVICE_ID",deviceId));
|
}
|
if(StringUtils.isNotEmpty(userIds)){
|
String [] ids=userIds.replace(" ","").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);
|
}
|
}
|
}
|
|
@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<>();
|
int num =0;
|
for(DeviceImportDTO s : plansList){
|
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(),"导入数据内容有误");
|
}
|
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,s.getDepartName())
|
.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::getOrgId,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
|
,s.getProduceWarehouseLocationName()).last("limit 1");
|
|
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);
|
device.setCreateUser(user.getId());
|
device.setCreateTime(new Date());
|
device.setUpdateUser(user.getId());
|
device.setUpdateTime(new Date());
|
// device.setRemark();
|
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 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.setStationCode(s.getStationCode());
|
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())){
|
|
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") +"-";
|
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");
|
}
|
|
}
|