Commit 198e39f5 LN

锡膏料仓:1增加开始搅拌接口。2.锡膏出库时增加锡膏日志SolderLog

1 个父辈 29aca383
...@@ -30,6 +30,11 @@ public enum SOLDER_STATUS { ...@@ -30,6 +30,11 @@ public enum SOLDER_STATUS {
* 回温中 (从冷藏中取出,未达到回温时间) * 回温中 (从冷藏中取出,未达到回温时间)
*/ */
REWARMING, REWARMING,
/**
*等待搅拌(回温完成后,需要手动开始搅拌)
*/
WAIT_MIXED,
/** /**
* 待搅拌 (回温完成或二次入库重新搅拌,等待搅拌) * 待搅拌 (回温完成或二次入库重新搅拌,等待搅拌)
*/ */
......
...@@ -66,7 +66,7 @@ public class SpBoxController { ...@@ -66,7 +66,7 @@ public class SpBoxController {
@GetMapping("/uidList") @GetMapping("/uidList")
@PreAuthorize("@el.check('checkOut')") @PreAuthorize("@el.check('checkOut')")
public PageData<StoragePosDto> uidList(StoragePosFindCriteria criteria, Pageable pageable, HttpServletRequest request) { public PageData<StoragePosDto> uidList(StoragePosFindCriteria criteria, Pageable pageable, HttpServletRequest request) {
Query query=getPosFindCriteria(criteria); Query query = getPosFindCriteria(criteria);
PageData<StoragePos> pages = storagePosManager.findByPage(query, pageable); PageData<StoragePos> pages = storagePosManager.findByPage(query, pageable);
List<StoragePosDto> StoragePosDtos = storagePosMapper.toDto(pages.getContent()); List<StoragePosDto> StoragePosDtos = storagePosMapper.toDto(pages.getContent());
return new PageData(StoragePosDtos, pages.getTotalElements()); return new PageData(StoragePosDtos, pages.getTotalElements());
...@@ -78,7 +78,7 @@ public class SpBoxController { ...@@ -78,7 +78,7 @@ public class SpBoxController {
Criteria c = Criteria.where("enabled").is(true).and("barcode").exists(true) Criteria c = Criteria.where("enabled").is(true).and("barcode").exists(true)
.and("id").in(pids); .and("id").in(pids);
List<StoragePos> solderPosList = storagePosManager.findByQuery(new Query(c)); List<StoragePos> solderPosList = storagePosManager.findByQuery(new Query(c));
setOutDate(solderPosList,new Date()); setOutDate(solderPosList, new Date());
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
...@@ -89,7 +89,7 @@ public class SpBoxController { ...@@ -89,7 +89,7 @@ public class SpBoxController {
Map<String, InventoryItemDto> inventoryItemMap = new HashMap<>(); Map<String, InventoryItemDto> inventoryItemMap = new HashMap<>();
List<StoragePos> allNotEmptyPos = new ArrayList<>(); List<StoragePos> allNotEmptyPos = new ArrayList<>();
for (Storage storage : dataCache.getAllStorage().values()) { for (Storage storage : dataCache.getAllStorage().values()) {
if(storage.isSolderPaste()){ if (storage.isSolderPaste()) {
List<StoragePos> storageList = storagePosManager.findNotEmptyByStorageId(storage.getId()); List<StoragePos> storageList = storagePosManager.findNotEmptyByStorageId(storage.getId());
allNotEmptyPos.addAll(storageList); allNotEmptyPos.addAll(storageList);
} }
...@@ -102,16 +102,16 @@ public class SpBoxController { ...@@ -102,16 +102,16 @@ public class SpBoxController {
Barcode barcode = pos.getBarcode(); Barcode barcode = pos.getBarcode();
String pn = barcode.getPartNumber(); String pn = barcode.getPartNumber();
InventoryItemDto inventoryItemDto = inventoryItemMap.get(pn); InventoryItemDto inventoryItemDto = inventoryItemMap.get(pn);
if(inventoryItemDto == null){ if (inventoryItemDto == null) {
inventoryItemDto = new InventoryItemDto(); inventoryItemDto = new InventoryItemDto();
} }
inventoryItemDto.setPartNumber(pn); inventoryItemDto.setPartNumber(pn);
inventoryItemDto.setStockReel(inventoryItemDto.getStockReel() + 1); inventoryItemDto.setStockReel(inventoryItemDto.getStockReel() + 1);
String solderStatus = barcode.getSolderStatus(); String solderStatus = barcode.getSolderStatus();
if(!notLockStatus.contains(solderStatus)){ if (!notLockStatus.contains(solderStatus)) {
inventoryItemDto.setLockReel(inventoryItemDto.getLockReel() + 1); inventoryItemDto.setLockReel(inventoryItemDto.getLockReel() + 1);
} }
inventoryItemMap.put(pn,inventoryItemDto); inventoryItemMap.put(pn, inventoryItemDto);
} }
return inventoryItemMap.values(); return inventoryItemMap.values();
} }
...@@ -121,28 +121,28 @@ public class SpBoxController { ...@@ -121,28 +121,28 @@ public class SpBoxController {
* 策略出库 * 策略出库
*/ */
@RequestMapping("/pnOut") @RequestMapping("/pnOut")
public ResultBean outSolder(@RequestBody List<Map<String, String>> reqParams){ public ResultBean outSolder(@RequestBody List<Map<String, String>> reqParams) {
for (Map<String, String> itemMap : reqParams) { for (Map<String, String> itemMap : reqParams) {
String storageId = itemMap.get("storageId"); String storageId = itemMap.get("storageId");
String pn = itemMap.get("pn"); String pn = itemMap.get("pn");
String numStr = itemMap.get("num"); String numStr = itemMap.get("num");
int num = Integer.valueOf(numStr); int num = Integer.valueOf(numStr);
String outDateStr = itemMap.get("outDate"); String outDateStr = itemMap.get("outDate");
Date outDate = DateUtil.toDate(outDateStr,"yyyy-MM-dd HH:mm"); Date outDate = DateUtil.toDate(outDateStr, "yyyy-MM-dd HH:mm");
if(outDate == null){ if (outDate == null) {
outDate = new Date(); outDate = new Date();
} }
List<StoragePos> solderPosList = findSolder(storageId, pn, num); List<StoragePos> solderPosList = findSolder(storageId, pn, num);
setOutDate(solderPosList,outDate); setOutDate(solderPosList, outDate);
} }
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
private void setOutDate(List<StoragePos> solderPosList,Date outDate){ private void setOutDate(List<StoragePos> solderPosList, Date outDate) {
for (StoragePos pos : solderPosList) { for (StoragePos pos : solderPosList) {
Barcode barcode = pos.getBarcode(); Barcode barcode = pos.getBarcode();
if(barcode != null){ if (barcode != null) {
log.info("设定仓位【"+pos.getPosName()+"】中的锡膏["+barcode.getBarcode()+"]出库时间:" + DateUtil.toDateTimeString(outDate)); log.info("设定仓位【" + pos.getPosName() + "】中的锡膏[" + barcode.getBarcode() + "]出库时间:" + DateUtil.toDateTimeString(outDate));
try { try {
barcode.setSolderStatus(SOLDER_STATUS.TO_BE_REWARM.name()); barcode.setSolderStatus(SOLDER_STATUS.TO_BE_REWARM.name());
barcode.setNeedOutDate(outDate); barcode.setNeedOutDate(outDate);
...@@ -150,7 +150,7 @@ public class SpBoxController { ...@@ -150,7 +150,7 @@ public class SpBoxController {
pos.setBarcode(barcode); pos.setBarcode(barcode);
storagePosManager.save(pos); storagePosManager.save(pos);
} catch (ValidateException e) { } catch (ValidateException e) {
log.error("设定锡膏出库时间出错",e); log.error("设定锡膏出库时间出错", e);
} }
} }
} }
...@@ -161,16 +161,16 @@ public class SpBoxController { ...@@ -161,16 +161,16 @@ public class SpBoxController {
*/ */
@RequestMapping("/clearOutDate") @RequestMapping("/clearOutDate")
@ResponseBody @ResponseBody
public ResultBean clearOutDate(HttpServletRequest request){ public ResultBean clearOutDate(HttpServletRequest request) {
String pid = request.getParameter("pid"); String pid = request.getParameter("pid");
StoragePos pos = storagePosManager.get(pid); StoragePos pos = storagePosManager.get(pid);
if(pos == null){ if (pos == null) {
return ResultBean.newErrorResult(404,"smfcore.pos.notFound","位置["+pid+"]不存在"); return ResultBean.newErrorResult(404, "smfcore.pos.notFound", "位置[" + pid + "]不存在");
} }
if(taskService.excludePosIds().contains(pid)){ if (taskService.excludePosIds().contains(pid)) {
return ResultBean.newErrorResult(404,"smfcore.pos.clearLimit","当前库位任务已开始且未完成,无法取消"); return ResultBean.newErrorResult(404, "smfcore.pos.clearLimit", "当前库位任务已开始且未完成,无法取消");
} }
log.info("取消仓位【"+pos.getPosName()+"】的定时出库任务"); log.info("取消仓位【" + pos.getPosName() + "】的定时出库任务");
try { try {
Barcode barcode = pos.getBarcode(); Barcode barcode = pos.getBarcode();
...@@ -186,7 +186,7 @@ public class SpBoxController { ...@@ -186,7 +186,7 @@ public class SpBoxController {
} }
private Query getPosFindCriteria(StoragePosFindCriteria criteria){ private Query getPosFindCriteria(StoragePosFindCriteria criteria) {
if (ObjectUtil.isNotEmpty(criteria.getStorageId()) && criteria.getStorageId().equals("0")) { if (ObjectUtil.isNotEmpty(criteria.getStorageId()) && criteria.getStorageId().equals("0")) {
criteria.setStorageId(null); criteria.setStorageId(null);
} }
...@@ -212,10 +212,10 @@ public class SpBoxController { ...@@ -212,10 +212,10 @@ public class SpBoxController {
return query; return query;
} }
private List<StoragePos> findSolder(String storageId,String pn, int num){ private List<StoragePos> findSolder(String storageId, String pn, int num) {
Criteria c = Criteria.where("enabled").is(true).and("barcode").exists(true) Criteria c = Criteria.where("enabled").is(true).and("barcode").exists(true)
.and("barcode.solderStatus").in(SOLDER_STATUS.RETREAT_STORAGE,SOLDER_STATUS.UNDER_REFRIGERATION); .and("barcode.solderStatus").in(SOLDER_STATUS.RETREAT_STORAGE, SOLDER_STATUS.UNDER_REFRIGERATION);
if(!Strings.isNullOrEmpty(storageId)){ if (!Strings.isNullOrEmpty(storageId)) {
c = c.and("storageId").is(storageId); c = c.and("storageId").is(storageId);
} }
Query q = new Query(c); Query q = new Query(c);
...@@ -227,29 +227,57 @@ public class SpBoxController { ...@@ -227,29 +227,57 @@ public class SpBoxController {
@ApiOperation("锡膏料仓任务列表") @ApiOperation("锡膏料仓任务列表")
@RequestMapping(value = "/tasks") @RequestMapping(value = "/tasks")
public List<SpTaskDto> filterTask(TaskQueryCondition criteria, HttpServletRequest request){ public List<SpTaskDto> filterTask(TaskQueryCondition criteria, HttpServletRequest request) {
String storageId=criteria.getStorageId(); String storageId = criteria.getStorageId();
Storage storage = dataCache.getStorageById(storageId); Storage storage = dataCache.getStorageById(storageId);
if(!storage.isSolderPaste()){ if (!storage.isSolderPaste()) {
return new ArrayList<>(); return new ArrayList<>();
} }
Criteria c = Criteria.where("storageId").is(storageId) Criteria c = Criteria.where("storageId").is(storageId)
.and("enabled").is(true) .and("enabled").is(true)
.and("used").is(true) .and("used").is(true)
.and("barcode.solderStatus").nin(SOLDER_STATUS.NONE.name(),SOLDER_STATUS.UNDER_REFRIGERATION.name(),SOLDER_STATUS.RETREAT_STORAGE.name()); .and("barcode.solderStatus").nin(SOLDER_STATUS.NONE.name(), SOLDER_STATUS.UNDER_REFRIGERATION.name(), SOLDER_STATUS.RETREAT_STORAGE.name());
List<StoragePos> taskPosList = storagePosManager.findByQuery(new Query(c)); List<StoragePos> taskPosList = storagePosManager.findByQuery(new Query(c));
List<SpTaskDto> spTaskDtos=new ArrayList<>(); List<SpTaskDto> spTaskDtos = new ArrayList<>();
for (StoragePos pos : taskPosList) { for (StoragePos pos : taskPosList) {
try{ try {
SpTaskDto spTaskDto=new SpTaskDto(pos.getId(),pos.getStorageId(),pos.getId(),pos.getPosName(),pos.getBarcode().getBarcode(),pos.getBarcode().getPartNumber(), SpTaskDto spTaskDto = new SpTaskDto(pos.getId(), pos.getStorageId(), pos.getId(), pos.getPosName(), pos.getBarcode().getBarcode(), pos.getBarcode().getPartNumber(),
pos.getBarcode().getAmount(),pos.getBarcode().getSolderStatus(),pos.getBarcode().getNeedOutDate()); pos.getBarcode().getAmount(), pos.getBarcode().getSolderStatus(), pos.getBarcode().getNeedOutDate());
spTaskDtos.add(spTaskDto); spTaskDtos.add(spTaskDto);
}catch (Exception ex){ } catch (Exception ex) {
} }
} }
return spTaskDtos; return spTaskDtos;
} }
@ApiOperation("开始搅拌")
@RequestMapping(value = "/startMixed")
public ResultBean startMixed(String posName) {
if (ObjectUtil.isEmpty(posName)) {
throw new ValidateException("sqbox.noTask", "未找到任务");
}
Criteria c = Criteria.where("posName").is(posName);
List<StoragePos> taskPosList = storagePosManager.findByQuery(new Query(c));
if (taskPosList.size() <= 0) {
throw new ValidateException("sqbox.noTask", "未找到任务");
}
StoragePos pos = taskPosList.get(0);
if (pos.getBarcode() != null && (pos.getBarcode().getSolderStatus().equals(SOLDER_STATUS.WAIT_MIXED.name()))) {
Barcode barcode = pos.getBarcode();
log.info("库位【" + pos.getPosName() + "】" + barcode.getBarcode() + "当前为等待搅拌 WAIT_MIXED 状态,用户点击开始搅拌,更改状态为 TO_BE_MIXED");
barcode.setSolderStatus(SOLDER_STATUS.TO_BE_MIXED.name());
barcode = barcodeManager.save(barcode);
pos.setBarcode(barcode);
storagePosManager.save(pos);
return ResultBean.newOkResult("");
} else {
throw new ValidateException("sqbox.noTask", "未找到任务");
}
}
} }
package com.neotel.smfcore.core.solder.service.dao;
import com.neotel.smfcore.common.base.IBaseDao;
public interface ISolderLogDao extends IBaseDao {
}
package com.neotel.smfcore.core.solder.service.dao.impl;
import com.neotel.smfcore.common.base.AbstractBaseDao;
import com.neotel.smfcore.core.solder.service.dao.ISolderLogDao;
import com.neotel.smfcore.core.solder.service.po.SolderLog;
import org.springframework.stereotype.Service;
@Service
public class SolderLogDaoImpl extends AbstractBaseDao implements ISolderLogDao {
@Override
public Class getEntityClass() {
return SolderLog.class;
}
}
package com.neotel.smfcore.core.solder.service.manager;
import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.core.solder.service.po.SolderLog;
public interface ISolderLogManager extends IBaseManager<SolderLog> {
}
package com.neotel.smfcore.core.solder.service.manager.impl;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.core.solder.service.dao.impl.SolderLogDaoImpl;
import com.neotel.smfcore.core.solder.service.manager.ISolderLogManager;
import com.neotel.smfcore.core.solder.service.po.SolderLog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class SolderLogManagerImpl implements ISolderLogManager {
@Autowired
private SolderLogDaoImpl solderLogDao;
@Override
public SolderLog get(String id) {
return solderLogDao.findOneById(id);
}
@Override
public SolderLog save(SolderLog object) throws ValidateException {
return solderLogDao.save(object);
}
@Override
public void delete(SolderLog object) throws ValidateException {
}
@Override
public PageData<SolderLog> findByPage(Query query, Pageable pageable) {
int totalCount = solderLogDao.countByQuery(query);
List<SolderLog> list = solderLogDao.findByQuery(query, pageable);
return new PageData<SolderLog>(list,totalCount);
}
@Override
public List<SolderLog> findByQuery(Query query) {
return solderLogDao.findByQuery(query);
}
}
package com.neotel.smfcore.core.solder.service.po;
import com.neotel.smfcore.common.base.BasePo;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.bean.MSDAppendInfo;
import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
@Data
@Document
public class SolderLog extends BasePo implements Serializable {
public SolderLog( Barcode barcode, StoragePos pos) {
if (barcode != null) {
setPartNumber(barcode.getPartNumber());
setBarcode(barcode.getBarcode());
setAmount(barcode.getAmount());
setH(barcode.getHeight());
setW(barcode.getPlateSize());
setRewarmTime(barcode.getWarmTime());
setMixTime(barcode.getMixTime());
setPutInTime(barcode.getPutInTime());
setStartRewarmTime(barcode.getStartWarmTime());
}
setStorageId(pos.getStorageId());
setPosId(pos.getId());
setPosName(pos.getPosName());
}
/**
* 料仓 ID
*/
private String storageId;
/**
* 仓位 ID
*/
private String posId;
/**
* 仓位名称
*/
private String posName = "";
//二维码(Reel ID)
private String barcode = "";
/**
* 料盘宽度信息
*/
private int w;
/**
* 料盘高度信息
*/
private int h;
/**
* 物料编号
*/
private String partNumber;
/**
*数量/重量(从 barCode 中读取)
*/
private int amount;
/**
* 搅拌时间
*/
private int mixTime;
/**
* 回温时间
*/
private int rewarmTime;
/**
* 搅拌转速
*/
private int mixSpeed;
/**
* 温度
*/
private int tempture=0;
/**
* 入库时间
*/
private long putInTime=0L;
/**
* 开始回温的时间
*/
private long startRewarmTime=0L;
/**
* 开始搅拌的时间
*/
private long startMixTime=0L;
/**
* 开始出库时间
*/
private long startOutTime=0L;
}
...@@ -8,6 +8,8 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode; ...@@ -8,6 +8,8 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.enums.OP; import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS; import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.solder.service.manager.ISolderLogManager;
import com.neotel.smfcore.core.solder.service.po.SolderLog;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager; 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.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
...@@ -50,6 +52,9 @@ public class SolderBoxCache { ...@@ -50,6 +52,9 @@ public class SolderBoxCache {
@Autowired @Autowired
private IStoragePosManager storagePosManager; private IStoragePosManager storagePosManager;
@Autowired
private ISolderLogManager solderLogManager;
@PostConstruct @PostConstruct
public void init(){ public void init(){
ExecutorService executorService = Executors.newSingleThreadExecutor(); ExecutorService executorService = Executors.newSingleThreadExecutor();
...@@ -105,8 +110,8 @@ public class SolderBoxCache { ...@@ -105,8 +110,8 @@ public class SolderBoxCache {
log.info(barcode.getBarcode() + "到达回温时间,搅拌时间为0,修改状态为待出库"); log.info(barcode.getBarcode() + "到达回温时间,搅拌时间为0,修改状态为待出库");
barcode.setSolderStatus(SOLDER_STATUS.TO_BE_OUT.name()); barcode.setSolderStatus(SOLDER_STATUS.TO_BE_OUT.name());
}else{ }else{
log.info(barcode.getBarcode() + "到达回温时间,修改状态为搅拌"); log.info(barcode.getBarcode() + "到达回温时间,修改状态为等待搅拌,待手动开始搅拌后再开始搅拌");
barcode.setSolderStatus(SOLDER_STATUS.TO_BE_MIXED.name()); barcode.setSolderStatus(SOLDER_STATUS.WAIT_MIXED.name());
} }
barcode = barcodeManager.save(barcode); barcode = barcodeManager.save(barcode);
...@@ -126,6 +131,8 @@ public class SolderBoxCache { ...@@ -126,6 +131,8 @@ public class SolderBoxCache {
long needOutStartTime = needOutDate.getTime(); long needOutStartTime = needOutDate.getTime();
if(now >= needOutStartTime){ if(now >= needOutStartTime){
createOutTask(storagePos); createOutTask(storagePos);
saveSolderLog(storagePos);
} }
} }
...@@ -248,4 +255,18 @@ public class SolderBoxCache { ...@@ -248,4 +255,18 @@ public class SolderBoxCache {
private boolean isInStatus(Barcode barcode, SOLDER_STATUS solder_status){ private boolean isInStatus(Barcode barcode, SOLDER_STATUS solder_status){
return barcode.getSolderStatus().equals(solder_status.name()); return barcode.getSolderStatus().equals(solder_status.name());
} }
/**
* 保存日志 温度,回温时间,搅拌时间,转速参数单独不在一起。需将温度,回温 时间,搅拌时间以及转速整合在一个界面作为制程管控点检项目
* @param pos
*/
private void saveSolderLog(StoragePos pos) {
//TODO
SolderLog solderLog = new SolderLog(pos.getBarcode(), pos);
solderLog.setStartOutTime(System.currentTimeMillis());
solderLogManager.save(solderLog);
log.info("保存锡膏日志:" + solderLog.toString());
}
} }
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!