Commit 005af3a9 sunke

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/java/com/neotel/smfcore/core/storage/rest/StorageController.java
2 个父辈 4c2054bd 00ea84a4
......@@ -42,7 +42,7 @@ import java.util.Set;
@Slf4j
@RestController
@RequiredArgsConstructor
@Api(tags = "条码管理")
@Api(tags = "产品:条码管理")
@RequestMapping("api/barcode")
public class BacodeController {
@Autowired
......
......@@ -30,7 +30,7 @@ import java.util.Set;
@Slf4j
@RestController
@RequiredArgsConstructor
@Api(tags = "元器件管理")
@Api(tags = "产品:元器件管理")
@RequestMapping("api/component")
public class ComponentController {
@Autowired
......
package com.neotel.smfcore.core.storage.rest;
import com.google.common.base.Strings;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.csv.CsvReader;
import com.neotel.smfcore.common.exception.BadRequestException;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.rest.dto.StorageDto;
import com.neotel.smfcore.core.storage.rest.mapstruct.StorageMapper;
import com.neotel.smfcore.core.storage.rest.query.StorageQueryCriteria;
import com.neotel.smfcore.core.storage.service.dao.IStorageDao;
import com.neotel.smfcore.core.storage.service.manager.IStorageManager;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.security.bean.FileProperties;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
......@@ -35,16 +28,19 @@ import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Slf4j
@RestController
@RequiredArgsConstructor
@Api(tags = "料仓管理")
@Api(tags = "云仓:料仓管理")
@RequestMapping("api/storage")
public class StorageController {
@Autowired
private final IStorageManager storageManager;
private final IStorageDao storageDao;
@Autowired
private final StorageMapper storageMapper;
......@@ -71,7 +67,7 @@ public class StorageController {
@PreAuthorize("@el.check('storage:add')")
public ResponseEntity<Object> create(@Validated @RequestBody StorageDto resources) {
Storage Storage=storageMapper.toEntity(resources);
storageManager.saveStorage(Storage);
saveStorage(Storage);
return new ResponseEntity<>(HttpStatus.CREATED);
}
......@@ -83,9 +79,12 @@ public class StorageController {
if (Storage.getId() == null) {
throw new BadRequestException("修改条码:ID不能为空");
}
storageManager.saveStorage(Storage);
saveStorage(Storage);
return new ResponseEntity<>(HttpStatus.OK);
}
@ApiOperation("删除料仓")
@DeleteMapping
@PreAuthorize("@el.check('storage:del')")
......@@ -102,6 +101,43 @@ public class StorageController {
return new ResponseEntity<>(HttpStatus.OK);
}
private Storage saveStorage(Storage storage) {
if(storage.getName()==null){
throw new BadRequestException("料仓名称不能为空");
} if(storage.getCid()==null){
throw new BadRequestException("料仓编号不能为空");
} if(storage.getType()==null){
throw new BadRequestException("料仓类型不能为空");
} if(storage.getCompatibleType()==null){
throw new BadRequestException("料仓兼容性不能为空");
}
boolean isNew=(storage.getId()==null);
//判断名称是否重复,cid是否重复
Map<String, Storage> storageMap=dataCache.getAllStorage();
for (Storage s:storageMap.values()
) {
if(isNew||(storage.getId()!=s.getId())){
if(s.getCid().equals(storage.getCid())){
throw new BadRequestException("料仓cid["+storage.getCid()+"]已存在");
}
else if(s.getName().equals(storage.getName())){
throw new BadRequestException("料仓名称["+storage.getCid()+"]已存在");
}
}
}
if(storage.getSourcePath()==null){
storage.setSourcePath("");
}
storage= storageDao.save(storage);
dataCache.reloadStorage(storage);
return storage;
}
@ApiOperation("上传库位信息")
@PostMapping(value = "/{storageId}/upload")
public ResultBean upload(@PathVariable String storageId, @RequestParam MultipartFile uploadFile) throws Exception {
......
package com.neotel.smfcore.core.storage.rest;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.BadRequestException;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.rest.dto.StoragePosDto;
import com.neotel.smfcore.core.storage.rest.dto.StoragePosEnabledDto;
import com.neotel.smfcore.core.storage.rest.dto.StoragePosSaveDto;
import com.neotel.smfcore.core.storage.rest.mapstruct.StoragePosMapper;
import com.neotel.smfcore.core.storage.rest.query.StoragePosQueryCriteria;
import com.neotel.smfcore.core.storage.service.dao.IStoragePosDao;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@Slf4j
@RestController
@RequiredArgsConstructor
@Api(tags = "云仓:库位管理")
@RequestMapping("api/storagePos")
public class StoragePosController {
@Autowired
private final IStoragePosManager storagePosManager;
@Autowired
private final IStoragePosDao storagePosDao;
@Autowired
private final StoragePosMapper storagePosMapper;
@Autowired
private DataCache dataCache;
@ApiOperation("查询库位")
@GetMapping
@PreAuthorize("@el.check('storage:list')")
public PageData<StoragePosDto> query(StoragePosQueryCriteria criteria, Pageable pageable){
Query query= QueryHelp.getQuery(criteria);
PageData<StoragePos> pages=storagePosManager.findByPage(query,pageable);
List<StoragePosDto> StoragePosDtos=storagePosMapper.toDto(pages.getContent());
return new PageData(StoragePosDtos,pages.getTotalElements());
}
@ApiOperation("清除指定料仓所有库位")
@PutMapping("/removeAllPos")
@PreAuthorize("@el.check('storage:edit')")
public ResponseEntity<Object> clearAllPos(@RequestBody String cid) {
log.info("开始清理料仓["+cid+"] 所有位置");
Storage storage=dataCache.getStorage(cid);
if(storage==null){
throw new BadRequestException("未找到料仓:"+cid);
}
storagePosManager.removePosByStorageId(storage.getId());
log.info("清理料仓["+cid+"] 所有位置完成");
return new ResponseEntity<>(HttpStatus.OK);
}
@ApiOperation("清空指定库位")
@PutMapping("/clearPos")
@PreAuthorize("@el.check('storage:edit')")
public ResponseEntity<Object> clearPos(@RequestBody String posName) {
log.info("开始手动清空库位:["+posName+"] ");
return new ResponseEntity<>(HttpStatus.OK);
}
@ApiOperation("启用禁用库位")
@PutMapping("/enabledPos")
@PreAuthorize("@el.check('storage:edit')")
public ResponseEntity<Object> enabledPos(@RequestBody StoragePosEnabledDto enabledDto) {
if(enabledDto.getId()==null){
throw new BadRequestException("库位ID为空");
}
StoragePos pos=storagePosDao.findOneById(enabledDto.getId());
if(pos==null){
throw new BadRequestException("未找到库位 ");
}
pos.setEnabled(enabledDto.isEnabled());
storagePosDao.save(pos);
log.info("启用禁用库位:库位号["+pos.getId()+"]["+pos.getPosName()+"]="+enabledDto.isEnabled());
return new ResponseEntity<>(HttpStatus.OK);
}
@ApiOperation("修改库位")
@PutMapping
@PreAuthorize("@el.check('storage:edit')")
public ResponseEntity<Object> update(@Validated @RequestBody StoragePosSaveDto saveDto) {
if(saveDto.getId()==null){
throw new BadRequestException("库位ID为空");
}
if(saveDto.getPosName()==null){
throw new BadRequestException("库位ID为空");
}
StoragePos pos=storagePosDao.findOneById(saveDto.getId());
if(pos==null){
throw new BadRequestException("未找到库位 ");
}
pos.setPosName(saveDto.getPosName());
pos.setPriority(saveDto.getPriority());
pos.setH(saveDto.getH());
pos.setW(saveDto.getW());
storagePosDao.save(pos);
log.info("修改库位:库位号["+pos.getId()+"]=["+saveDto.toString()+"]");
return new ResponseEntity<>(HttpStatus.OK);
}
// @ApiOperation("新增库位")
// @PostMapping
// @PreAuthorize("@el.check('storage:add')")
// public ResponseEntity<Object> create(@Validated @RequestBody StoragePosDto resources) {
//// StoragePos StoragePos=storageMapper.toEntity(resources);
//// storageManager.saveStoragePos(StoragePos);
// return new ResponseEntity<>(HttpStatus.CREATED);
// }
@ApiOperation("删除库位")
@DeleteMapping
@PreAuthorize("@el.check('storage:del')")
public ResponseEntity<Object> delete(@RequestBody Set<String> ids) {
List<StoragePos> storages = new ArrayList<StoragePos>();
for (String id : ids) {
if (id == null) {
throw new BadRequestException("删除库位:ID不能为空");
}else{
throw new BadRequestException("删除库位:暂未开放");
}
}
return new ResponseEntity<>(HttpStatus.OK);
}
}
......@@ -14,6 +14,8 @@ import java.util.concurrent.ConcurrentHashMap;
@Getter
@Setter
public class StorageDto implements Serializable {
@ApiModelProperty("ID")
private String id;
@ApiModelProperty("名称")
private String name;
@ApiModelProperty("程序路径")
......
package com.neotel.smfcore.core.storage.rest.dto;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.List;
@Getter
@Setter
public class StoragePosDto implements Serializable {
@ApiModelProperty("库位ID")
private String id;
@ApiModelProperty("料仓ID")
private String storageId;
@ApiModelProperty("条码")
private Barcode barcode;
@ApiModelProperty("库位号")
private String posName;
@ApiModelProperty("扩展库位的主库位")
private String hostPosId;
@ApiModelProperty("该仓位是否限制物编,虚拟仓使用")
private List<String> limitPnList;
@ApiModelProperty("进料优先级,数字越大优先级越高,例:1-1的优先级为100 仓1-2的优先级200,那么入仓时就会优先进入1-2仓")
private double priority = 0f;
@ApiModelProperty("是否可用了")
private boolean enabled = true;
@ApiModelProperty("是否使用了")
private boolean used = false;
@ApiModelProperty("是否是回温库位,条码第一次入库是入库到冷藏库位,回温或二次入库时才入到回温库位")
private boolean warmPos = false;
@ApiModelProperty("高度")
private int h;
@ApiModelProperty("宽度")
private int w;
@ApiModelProperty("可出库时间,类型的锡膏时,可出库时间为最新放入的锡膏的可出库时间")
private long canCheckOutTime = 0;
@ApiModelProperty("并联的其他库位,合并入主库位的库位")
private List<String> mergePosList;
}
package com.neotel.smfcore.core.storage.rest.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
@Getter
@Setter
public class StoragePosEnabledDto implements Serializable {
@ApiModelProperty("库位ID")
private String id;
@ApiModelProperty("启用/禁用")
private boolean enabled = true;
}
package com.neotel.smfcore.core.storage.rest.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
@Getter
@Setter
@ToString
public class StoragePosSaveDto implements Serializable {
@ApiModelProperty("库位ID")
private String id;
@ApiModelProperty("库位号")
private String posName;
@ApiModelProperty("进料优先级,数字越大优先级越高,例:1-1的优先级为100 仓1-2的优先级200,那么入仓时就会优先进入1-2仓")
private double priority = 0f;
@ApiModelProperty("高度")
private int h;
@ApiModelProperty("宽度")
private int w;
}
package com.neotel.smfcore.core.storage.rest.mapstruct;
import com.neotel.smfcore.common.base.BaseMapper;
import com.neotel.smfcore.core.storage.rest.dto.StoragePosDto;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface StoragePosMapper extends BaseMapper<StoragePosDto, StoragePos> {
}
package com.neotel.smfcore.core.storage.rest.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
public class StoragePosQueryCriteria {
@QueryCondition(blurry = "barcode,posName")
private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> createDate;
@QueryCondition
private String storageId;
@QueryCondition
private String barcode;
@QueryCondition
private String posName;
}
......@@ -8,5 +8,4 @@ import java.util.List;
public interface IStorageManager extends IBaseManager<Storage> {
List<Storage> findAll();
void saveStorage(Storage storage);
}
......@@ -23,4 +23,6 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
List<StoragePos> findLockPos(String lockId);
StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType);
void removePosByStorageId(String storageId);
}
......@@ -3,6 +3,7 @@ package com.neotel.smfcore.core.storage.service.manager.impl;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.BadRequestException;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.service.dao.IStorageDao;
import com.neotel.smfcore.core.storage.service.manager.IStorageManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
......@@ -12,6 +13,7 @@ import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
public class StorageManagerImpl implements IStorageManager {
......@@ -19,6 +21,7 @@ public class StorageManagerImpl implements IStorageManager {
@Autowired
private IStorageDao storageDao;
@Override
public Storage get(String id) {
return storageDao.findOneById(id);
......@@ -51,22 +54,5 @@ public class StorageManagerImpl implements IStorageManager {
return storageDao.findAll();
}
@Override
public void saveStorage(Storage storage) {
if(storage.getName()==null){
throw new BadRequestException("料仓名称不能为空");
} if(storage.getCid()==null){
throw new BadRequestException("料仓编号不能为空");
} if(storage.getType()==null){
throw new BadRequestException("料仓类型不能为空");
} if(storage.getCompatibleType()==null){
throw new BadRequestException("料仓兼容性不能为空");
}
if(storage.getSourcePath()==null){
storage.setSourcePath("");
}
storageDao.save(storage);
}
}
......@@ -213,6 +213,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
return storagePosDao.findOne(q);
}
/**
* 根据出库方式获取不同的 Sort
*/
......@@ -244,4 +245,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
public List<StoragePos> findByQuery(Query query) {
return storagePosDao.findOne(query);
}
@Override
public void removePosByStorageId(String storageId) {
Query query=new Query(Criteria.where("storageId").is(storageId));
storagePosDao.removeByQuery(query);
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!