From 1f4e7d0f73a73e7350cf5a1df279d5f30904c5d5 Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期三, 06 十二月 2023 08:41:32 +0800 Subject: [PATCH] bug --- server/src/main/java/doumeemes/service/business/impl/DeviceServiceImpl.java | 213 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 200 insertions(+), 13 deletions(-) diff --git a/server/src/main/java/doumeemes/service/business/impl/DeviceServiceImpl.java b/server/src/main/java/doumeemes/service/business/impl/DeviceServiceImpl.java index efb5075..d8eb021 100644 --- a/server/src/main/java/doumeemes/service/business/impl/DeviceServiceImpl.java +++ b/server/src/main/java/doumeemes/service/business/impl/DeviceServiceImpl.java @@ -1,5 +1,9 @@ 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; @@ -7,14 +11,15 @@ 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.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; @@ -26,10 +31,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; /** * 鐢熶骇璁惧淇℃伅琛⊿ervice瀹炵幇 @@ -49,6 +56,22 @@ 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) { @@ -98,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 @@ -106,7 +129,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()); @@ -206,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); @@ -218,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()); @@ -240,7 +263,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 +279,170 @@ } } + @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(), "瀵逛笉璧凤紝鎮ㄦ棤鏉冮檺杩涜璇ユ搷浣滐紒"); + } + //瑙f瀽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") +"-"; -- Gitblit v1.9.3