Commit d035a6f3 LN

新呆滞物料功能

1 个父辈 7bc06f7e
...@@ -78,6 +78,7 @@ public class ComponentController { ...@@ -78,6 +78,7 @@ public class ComponentController {
headerList.add(Lists.newArrayList("截料设置盘数")); headerList.add(Lists.newArrayList("截料设置盘数"));
headerList.add(Lists.newArrayList("安全库存盘数")); headerList.add(Lists.newArrayList("安全库存盘数"));
headerList.add(Lists.newArrayList("呆滞天数")); headerList.add(Lists.newArrayList("呆滞天数"));
headerList.add(Lists.newArrayList("最大存储天数"));
headerList.add(Lists.newArrayList("物料间距")); headerList.add(Lists.newArrayList("物料间距"));
headerList.add(Lists.newArrayList("尺寸是否已确认")); headerList.add(Lists.newArrayList("尺寸是否已确认"));
headerList.add(Lists.newArrayList("描述")); headerList.add(Lists.newArrayList("描述"));
...@@ -100,6 +101,7 @@ public class ComponentController { ...@@ -100,6 +101,7 @@ public class ComponentController {
data.add(component.getMinStoreNum()); data.add(component.getMinStoreNum());
data.add(component.getSafetyStoreNum()); data.add(component.getSafetyStoreNum());
data.add(component.getSluggishDay()); data.add(component.getSluggishDay());
data.add(component.getMaxSluggishDay());
data.add(component.getDistance()); data.add(component.getDistance());
String confirmed = "否"; String confirmed = "否";
if(component.isSizeConfirmed()){ if(component.isSizeConfirmed()){
...@@ -143,6 +145,9 @@ public class ComponentController { ...@@ -143,6 +145,9 @@ public class ComponentController {
if (component.getId() == null) { if (component.getId() == null) {
throw new ValidateException("smfcore.valueCanotNull","{0}不能为空",new String[]{"ID"} ); throw new ValidateException("smfcore.valueCanotNull","{0}不能为空",new String[]{"ID"} );
} }
if( component.getSluggishDay()>0&& component.getSluggishDay()>component.getMaxSluggishDay()){
throw new ValidateException("smfcore.sluggishDay.error","最大呆滞天数必须大于呆滞天数" );
}
componentManager.saveComponent(component); componentManager.saveComponent(component);
// //修改元器件时更新storagePos中的数据 // //修改元器件时更新storagePos中的数据
// if(!ObjectUtil.isEmpty(component.getPartNumber())) // if(!ObjectUtil.isEmpty(component.getPartNumber()))
...@@ -262,7 +267,7 @@ public class ComponentController { ...@@ -262,7 +267,7 @@ public class ComponentController {
// String[] titleArray = new String[]{"料件编号" , "数量", "尺寸", "高度", "物料间距", "截料设置盘数", "安全库存盘数","补充盘数上限" // String[] titleArray = new String[]{"料件编号" , "数量", "尺寸", "高度", "物料间距", "截料设置盘数", "安全库存盘数","补充盘数上限"
// , "呆滞天数", "整盘比", "散盘比", "描述"}; // , "呆滞天数", "整盘比", "散盘比", "描述"};
String[] titleArray = new String[]{"materialNo" , "amount", "plateSize", "height", "distance", "minStoreNum", "safetyStoreNum","maxStoreNum" String[] titleArray = new String[]{"materialNo" , "amount", "plateSize", "height", "distance", "minStoreNum", "safetyStoreNum","maxStoreNum"
, "sluggishDay", "wholeReel", "halfReel", "description"}; , "sluggishDay","maxSluggishDay", "wholeReel", "halfReel", "description"};
for (String title : for (String title :
titleArray) { titleArray) {
...@@ -282,6 +287,7 @@ public class ComponentController { ...@@ -282,6 +287,7 @@ public class ComponentController {
map.put("safetyStoreNum", ""); map.put("safetyStoreNum", "");
map.put("maxStoreNum",""); map.put("maxStoreNum","");
map.put("sluggishDay", ""); map.put("sluggishDay", "");
map.put("maxSluggishDay","");
map.put("wholeReel", ""); map.put("wholeReel", "");
map.put("halfReel", ""); map.put("halfReel", "");
map.put("description", ""); map.put("description", "");
...@@ -321,6 +327,7 @@ public class ComponentController { ...@@ -321,6 +327,7 @@ public class ComponentController {
int safetyStoreNumIndex = csvRead.getIndex("安全库存盘数", "safetyStoreNum"); int safetyStoreNumIndex = csvRead.getIndex("安全库存盘数", "safetyStoreNum");
int maxStoreNumIndex=csvRead.getIndex("补充最大盘数","maxStoreNum"); int maxStoreNumIndex=csvRead.getIndex("补充最大盘数","maxStoreNum");
int sluggishDayIndex = csvRead.getIndex("呆滞天数", "sluggishDay"); int sluggishDayIndex = csvRead.getIndex("呆滞天数", "sluggishDay");
int maxSluggishDayIndex=csvRead.getIndex("最大存储天数","maxSluggishDay");
int wholeReelIndex = csvRead.getIndex("整盘", "wholeReel"); int wholeReelIndex = csvRead.getIndex("整盘", "wholeReel");
int halfReelIndex = csvRead.getIndex("散盘", "halfReel"); int halfReelIndex = csvRead.getIndex("散盘", "halfReel");
int descriptionIndex = csvRead.getIndex("描述", "description"); int descriptionIndex = csvRead.getIndex("描述", "description");
...@@ -354,6 +361,7 @@ public class ComponentController { ...@@ -354,6 +361,7 @@ public class ComponentController {
item.setSafetyStoreNum(getIntValue(lineValues, safetyStoreNumIndex, item.getSafetyStoreNum())); item.setSafetyStoreNum(getIntValue(lineValues, safetyStoreNumIndex, item.getSafetyStoreNum()));
item.setMaxStoreNum(getIntValue(lineValues,maxStoreNumIndex,item.getMaxStoreNum())); item.setMaxStoreNum(getIntValue(lineValues,maxStoreNumIndex,item.getMaxStoreNum()));
item.setSluggishDay(getIntValue(lineValues, sluggishDayIndex, item.getSluggishDay())); item.setSluggishDay(getIntValue(lineValues, sluggishDayIndex, item.getSluggishDay()));
item.setMaxSluggishDay(getIntValue(lineValues,maxSluggishDayIndex,item.getMaxSluggishDay()));
item.setWholeReel(getIntValue(lineValues, wholeReelIndex, item.getWholeReel())); item.setWholeReel(getIntValue(lineValues, wholeReelIndex, item.getWholeReel()));
item.setHalfReel(getIntValue(lineValues, halfReelIndex, item.getHalfReel())); item.setHalfReel(getIntValue(lineValues, halfReelIndex, item.getHalfReel()));
item.setDescription(lineValues[descriptionIndex].trim()); item.setDescription(lineValues[descriptionIndex].trim());
......
...@@ -247,5 +247,11 @@ public class BarcodeDto implements Serializable { ...@@ -247,5 +247,11 @@ public class BarcodeDto implements Serializable {
@ApiModelProperty("物料间距") @ApiModelProperty("物料间距")
private int distance=0; private int distance=0;
@ApiModelProperty("呆滞到期时间(生成日期+呆滞日期)")
private Date sluggishDate;
@ApiModelProperty("最大存储期(生成日期+最大呆滞日期)")
private Date maxSluggishDate;
} }
...@@ -162,6 +162,8 @@ public class ComponentDto implements Serializable { ...@@ -162,6 +162,8 @@ public class ComponentDto implements Serializable {
@ApiModelProperty("呆滞天数,默认0无需处理") @ApiModelProperty("呆滞天数,默认0无需处理")
private int sluggishDay = 0; private int sluggishDay = 0;
@ApiModelProperty("最大呆滞天数,默认0无需处理")
private int maxSluggishDay = 0;
@ApiModelProperty("整盘比") @ApiModelProperty("整盘比")
private int wholeReel=0; private int wholeReel=0;
......
...@@ -240,9 +240,21 @@ public class Barcode extends BasePo implements Serializable { ...@@ -240,9 +240,21 @@ public class Barcode extends BasePo implements Serializable {
*/ */
private String thickness=""; private String thickness="";
/** /**
* 呆滞到期时间(入库时间+呆滞日期) * 呆滞到期时间(入库时间+呆滞日期) 旧数据,暂不使用
*/ */
private Date sluggishTime; private Date sluggishTime;
/**
* 呆滞到期时间(生成日期+呆滞日期)
*/
private Date sluggishDate;
/**
* 最大存储期(生成日期+最大呆滞日期)
*/
private Date maxSluggishDate;
/** /**
* 是否是冻结的湿敏物料 * 是否是冻结的湿敏物料
...@@ -314,13 +326,42 @@ public class Barcode extends BasePo implements Serializable { ...@@ -314,13 +326,42 @@ public class Barcode extends BasePo implements Serializable {
} }
} }
} }
private void updateSluggishTime(int sluggishDay ) {
public void updateSluggishTime(int sluggishDay ){ if (sluggishDay > 0) {
if(sluggishDay>0){
long maxTime = sluggishDay * 60 * 60 * 1000; long maxTime = sluggishDay * 60 * 60 * 1000;
setSluggishTime( new Date(putInTime + maxTime)); setSluggishTime(new Date(putInTime + maxTime));
}else{ } else {
setSluggishTime(null);
}
}
public void updateSluggishDate(List<Integer> params ) {
if (produceDate == null) {
return;
}
if (params.size() == 2) {
int sluggishDay = params.get(0);
int maxsluggishDay = params.get(1);
if (sluggishDay > 0) {
Date nTime = DateUtil.addDays(produceDate, sluggishDay);
if (getSluggishDate() == null || getSluggishDate().before(nTime)) {
setSluggishDate(nTime);
setMaxSluggishDate(nTime);
}
if (maxsluggishDay > 0) {
Date newMaxTime = DateUtil.addDays(produceDate, maxsluggishDay);
if (getMaxSluggishDate() == null || getMaxSluggishDate().before(newMaxTime)) {
setMaxSluggishDate(newMaxTime);
}
}
} else {
setSluggishTime(null);
setMaxSluggishDate(null);
}
updateSluggishTime(sluggishDay);
} else {
setSluggishTime(null); setSluggishTime(null);
setMaxSluggishDate(null);
} }
} }
......
...@@ -139,6 +139,10 @@ public class Component extends BasePo implements Serializable { ...@@ -139,6 +139,10 @@ public class Component extends BasePo implements Serializable {
*/ */
private int sluggishDay = 0; private int sluggishDay = 0;
/**
* 最大呆滞天数,默认0无需处理
*/
private int maxSluggishDay = 0;
/** /**
* 出库时是否需要授权 * 出库时是否需要授权
......
...@@ -136,7 +136,12 @@ public class CodeResolve { ...@@ -136,7 +136,12 @@ public class CodeResolve {
Date produceDate = barcodeFromRule.getProduceDate(); Date produceDate = barcodeFromRule.getProduceDate();
if(produceDate != null){ if(produceDate != null){
//抓取到了生产日期,未抓取到过期日期,重新设置过期日期 //抓取到了生产日期,未抓取到过期日期,重新设置过期日期
if(barcode.getExpireDate() == null){ if(barcode.getProduceDate()==null){
log.info("重新设置"+codeBeanFromRule.getCodeStr()+"生产日期 ");
barcode.setProduceDate(produceDate);
needUpdate = true;
}
if(barcode.getExpireDate() == null ){
if(validDay > 0){ if(validDay > 0){
log.info("重新设置"+codeBeanFromRule.getCodeStr()+"生产日期和过期日期"); log.info("重新设置"+codeBeanFromRule.getCodeStr()+"生产日期和过期日期");
Date expireDate = DateUtil.addDays(produceDate, validDay); Date expireDate = DateUtil.addDays(produceDate, validDay);
......
...@@ -628,7 +628,7 @@ public class BaseDeviceHandler implements IDeviceHandler { ...@@ -628,7 +628,7 @@ public class BaseDeviceHandler implements IDeviceHandler {
barcode.setUsedCount(barcode.getUsedCount() + 1); barcode.setUsedCount(barcode.getUsedCount() + 1);
barcode.setPutInTime(System.currentTimeMillis()); barcode.setPutInTime(System.currentTimeMillis());
barcode.setPutInType(task.getInType()); barcode.setPutInType(task.getInType());
barcode.updateSluggishTime(dataCache.getPNsluggishDay(barcode.getPartNumber())); barcode.updateSluggishDate(dataCache.getPNsluggishDay(barcode.getPartNumber()));
barcode.setInOpor(task.getOperator()); barcode.setInOpor(task.getOperator());
barcode.setCheckOutDate(null, ""); barcode.setCheckOutDate(null, "");
barcode.setPosName(task.getPosName()); barcode.setPosName(task.getPosName());
......
...@@ -114,8 +114,15 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -114,8 +114,15 @@ public class NLPShelfHandler extends BaseDeviceHandler{
color = ORDER_COLOR.fromRgb(rgb); color = ORDER_COLOR.fromRgb(rgb);
} }
} else { } else {
//普通出库蓝色 DARKGREEN
color = ORDER_COLOR.DARKGREEN; if(ObjectUtil.isNotEmpty(queueTask.getLightColor())){
String rgb = queueTask.getLightColor();
color = ORDER_COLOR.fromRgb(rgb);
}
else {
//普通出库蓝色 DARKGREEN
color = ORDER_COLOR.DARKGREEN;
}
} }
} }
if (color != null) { if (color != null) {
......
...@@ -726,11 +726,17 @@ public class DataCache { ...@@ -726,11 +726,17 @@ public class DataCache {
return storage; return storage;
} }
public int getPNsluggishDay(String pn) { public List<Integer> getPNsluggishDay(String pn) {
List<Integer> result=new ArrayList<>();
Component component = componentManager.findOneByPN(pn); Component component = componentManager.findOneByPN(pn);
if (component != null) { if (component != null) {
return component.getSluggishDay();
result.add(component.getSluggishDay()) ;
result.add(component.getMaxSluggishDay());
}else{
result.add(0);
result.add(0);
} }
return 0; return result;
} }
} }
...@@ -303,7 +303,7 @@ public class SingleInController { ...@@ -303,7 +303,7 @@ public class SingleInController {
barcode.setPutInType(inType); barcode.setPutInType(inType);
barcode.setPutInTime(System.currentTimeMillis()); barcode.setPutInTime(System.currentTimeMillis());
barcode.updateSluggishTime(dataCache.getPNsluggishDay(barcode.getPartNumber())); barcode.updateSluggishDate(dataCache.getPNsluggishDay(barcode.getPartNumber()));
barcodeManager.saveBarcode(barcode); barcodeManager.saveBarcode(barcode);
dataLog.setNum(barcode.getAmount()); dataLog.setNum(barcode.getAmount());
......
...@@ -530,7 +530,7 @@ public class MaterialBoxController { ...@@ -530,7 +530,7 @@ public class MaterialBoxController {
subBarcode.setAmount(opQty); subBarcode.setAmount(opQty);
subBarcode.setUsedDate(new Date()); subBarcode.setUsedDate(new Date());
subBarcode.setPutInTime(System.currentTimeMillis()); subBarcode.setPutInTime(System.currentTimeMillis());
subBarcode.updateSluggishTime(dataCache.getPNsluggishDay(barcode.getPartNumber())); subBarcode.updateSluggishDate(dataCache.getPNsluggishDay(barcode.getPartNumber()));
subBarcode.setCheckOutDate(null, ""); subBarcode.setCheckOutDate(null, "");
subBarcode.setHostBarcodeId(barcode.getId()); subBarcode.setHostBarcodeId(barcode.getId());
subBarcode = barcodeManager.save(subBarcode); subBarcode = barcodeManager.save(subBarcode);
......
package com.neotel.smfcore.core.storage.rest; package com.neotel.smfcore.core.storage.rest;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.FileUtil; import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.manager.IComponentManager; import com.neotel.smfcore.core.barcode.service.manager.IComponentManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.service.po.Component; import com.neotel.smfcore.core.barcode.service.po.Component;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.hik.enums.IN_OUT_TYPE;
import com.neotel.smfcore.core.language.util.MessageUtils; import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.order.enums.ORDER_COLOR;
import com.neotel.smfcore.core.storage.bean.InventoryItem; import com.neotel.smfcore.core.storage.bean.InventoryItem;
import com.neotel.smfcore.core.storage.rest.dto.SafetyInventoryDto; import com.neotel.smfcore.core.storage.rest.dto.SafetyInventoryDto;
import com.neotel.smfcore.core.storage.rest.dto.StoragePosDto; import com.neotel.smfcore.core.storage.rest.dto.StoragePosDto;
...@@ -15,7 +22,9 @@ import com.neotel.smfcore.core.storage.rest.mapstruct.StoragePosMapper; ...@@ -15,7 +22,9 @@ import com.neotel.smfcore.core.storage.rest.mapstruct.StoragePosMapper;
import com.neotel.smfcore.core.storage.rest.query.SafetyInventoryQueryCriteria; import com.neotel.smfcore.core.storage.rest.query.SafetyInventoryQueryCriteria;
import com.neotel.smfcore.core.storage.rest.query.StoragePosFindCriteria; import com.neotel.smfcore.core.storage.rest.query.StoragePosFindCriteria;
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.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.util.TaskService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
...@@ -27,9 +36,7 @@ import org.springframework.data.mongodb.core.query.Query; ...@@ -27,9 +36,7 @@ import org.springframework.data.mongodb.core.query.Query;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
...@@ -56,6 +63,10 @@ public class MaterialStockController { ...@@ -56,6 +63,10 @@ public class MaterialStockController {
@Autowired @Autowired
private final SafetyInventoryMapper safetyInventoryMapper; private final SafetyInventoryMapper safetyInventoryMapper;
@Autowired
private TaskService taskService;
@Autowired
private IBarcodeManager barcodeManager;
// @ApiOperation("导出呆滞物料") // @ApiOperation("导出呆滞物料")
// @GetMapping(value = "/sluggishMaterials/download") // @GetMapping(value = "/sluggishMaterials/download")
...@@ -97,7 +108,7 @@ public class MaterialStockController { ...@@ -97,7 +108,7 @@ public class MaterialStockController {
Criteria baseCriteria = Criteria.where("used").is(true); Criteria baseCriteria = Criteria.where("used").is(true);
//需要查询已经过呆滞日期的物料 //需要查询已经过呆滞日期的物料
baseCriteria.and("barcode.sluggishTime").exists(true).gte(new Date()); baseCriteria.and("barcode.sluggishDate").exists(true).lte(new Date());
// baseCriteria.and("barcode.sluggishTime").gte(new Date()); // baseCriteria.and("barcode.sluggishTime").gte(new Date());
query.addCriteria(baseCriteria); query.addCriteria(baseCriteria);
...@@ -105,8 +116,73 @@ public class MaterialStockController { ...@@ -105,8 +116,73 @@ public class MaterialStockController {
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());
} }
@ApiOperation("延期呆滞物料")
@PutMapping(value = "/delayMaterials")
public ResultBean delayMaterials(@RequestBody Map<String,Object> params) {
List<String> pids= (List<String>) params.get("pids");
int okCount=0;
for (String pid : pids) {
StoragePos pos = storagePosManager.get(pid);
Barcode barcode = pos.getBarcode();
if (barcode == null) {
continue;
}
int delayDay = 90;
//物料存储期自动延长为min(原呆滞存储期+90天,最大呆滞存储期
Date slTime = DateUtil.addDays(barcode.getSluggishDate(),delayDay);
//最大呆滞时间
if (barcode.getMaxSluggishDate() != null && barcode.getMaxSluggishDate().before(slTime)) {
slTime = barcode.getMaxSluggishDate();
}
//判断是否是同一天,同一天不需要重置
String pStr = DateUtil.toDateString(barcode.getSluggishDate(), "yyyy-MM-dd");
String currStr = DateUtil.toDateString(slTime, "yyyy-MM-dd");
if (!pStr.equals(currStr)) {
barcode.setSluggishDate(slTime);
barcodeManager.saveBarcode(barcode);
pos.setBarcode(barcode);
storagePosManager.save(pos);
okCount++;
log.info("库位【" + pos.getPosName() + "】条码【" + barcode.getBarcode() + "】呆滞物料延期成功:从【" + pStr + "】到【" + currStr + "】,okCout="+okCount);
}
}
return ResultBean.newOkResult(okCount);
}
@ApiOperation("下架呆滞物料")
@PutMapping(value = "/checkOutMaterials")
public ResultBean checkOutMaterials(@RequestBody Map<String,Object> params) {
List<String> pids= (List<String>) params.get("pids");
int okCount=0;
for (String pid : pids) {
StoragePos pos = storagePosManager.get(pid);
if (pos == null) {
log.info("下架呆滞物料时,库位号["+pid+"]不存在,忽略");
continue;
}
Storage storage = dataCache.getStorageById(pos.getStorageId());
if (storage == null) {
log.info("下架呆滞物料时,设备["+pos.getStorageId()+"]不存在,忽略");
continue;
}
try{
log.info("下架呆滞物料时【" + storage.getName() + "_" + storage.getCid() + "】位置仓位【" + pos.getPosName() + "】");
taskService.checkout(storage, pos, false, SecurityUtils.getCurrentUsername(), ORDER_COLOR.LIGHTBLUE.name());
okCount++;
}catch (Exception ex){
log.info("下架呆滞物料时【" + storage.getName() + "】位置仓位【" + pos.getPosName() + "】失败:" + ex.getMessage());
}
}
return ResultBean.newOkResult(okCount);
}
@ApiOperation("导出安全库存列表") @ApiOperation("导出安全库存列表")
@GetMapping(value = "/safetyInventory/download") @GetMapping(value = "/safetyInventory/download")
......
...@@ -634,6 +634,11 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -634,6 +634,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
if (storageIdList != null) { if (storageIdList != null) {
c = c.and("storageId").in(storageIdList); c = c.and("storageId").in(storageIdList);
} }
//未到呆滞期
c.orOperator(Criteria.where("barcode.sluggishDate").exists(false),
Criteria.where("barcode.sluggishDate").gt(new Date()));
Query q = new Query(c); Query q = new Query(c);
//数量从大到小,出库先进先出 //数量从大到小,出库先进先出
Sort amountSort = Sort.by(Sort.Direction.DESC, "barcode.amount"); Sort amountSort = Sort.by(Sort.Direction.DESC, "barcode.amount");
......
...@@ -38,6 +38,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -38,6 +38,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
import java.util.List;
/** /**
* Created by sunke on 2021/7/13. * Created by sunke on 2021/7/13.
...@@ -86,7 +87,7 @@ public class TaskService { ...@@ -86,7 +87,7 @@ public class TaskService {
if(barcode!=null){ if(barcode!=null){
barcode.setPutInTime(System.currentTimeMillis()); barcode.setPutInTime(System.currentTimeMillis());
barcode.updateSluggishTime(dataCache.getPNsluggishDay(barcode.getPartNumber())); barcode.updateSluggishDate(dataCache.getPNsluggishDay(barcode.getPartNumber()));
barcodeManager.saveBarcode(barcode); barcodeManager.saveBarcode(barcode);
} }
String loginUser = SecurityUtils.getLoginUsername(); String loginUser = SecurityUtils.getLoginUsername();
...@@ -106,6 +107,9 @@ public class TaskService { ...@@ -106,6 +107,9 @@ public class TaskService {
* @throws ValidateException * @throws ValidateException
*/ */
public synchronized String checkout(Storage storage, StoragePos pos, boolean isSingleOut, String opUserName) throws ValidateException { public synchronized String checkout(Storage storage, StoragePos pos, boolean isSingleOut, String opUserName) throws ValidateException {
return checkout(storage,pos,isSingleOut,opUserName,"");
}
public synchronized String checkout(Storage storage, StoragePos pos, boolean isSingleOut, String opUserName,String color) throws ValidateException {
if (pos.getBarcode() == null) { if (pos.getBarcode() == null) {
String msg = "库位[" + pos.getPosName() + "]中已无物料,忽略"; String msg = "库位[" + pos.getPosName() + "]中已无物料,忽略";
log.info(msg); log.info(msg);
...@@ -114,8 +118,15 @@ public class TaskService { ...@@ -114,8 +118,15 @@ public class TaskService {
DataLog task = new DataLog(storage, pos.getBarcode(), pos); DataLog task = new DataLog(storage, pos.getBarcode(), pos);
task.setType(OP.CHECKOUT); task.setType(OP.CHECKOUT);
if(pos.getBarcode().isLockMsl()){ task.setOutType(IN_OUT_TYPE.OUT_NORMAL);
task.setOutType(IN_OUT_TYPE.OUT_MSL);//湿敏物料出库 if(ObjectUtil.isEmpty(color)) {
if (pos.getBarcode().isLockMsl()) {
task.setOutType(IN_OUT_TYPE.OUT_MSL);//湿敏物料出库
}
}else{
// task.setOutType(outType);
//类型设置为普通出库,颜色设置为指定颜色
task.setLightColor(color);
} }
task.setPutInDate(pos.getBarcode().getPutInDate()); task.setPutInDate(pos.getBarcode().getPutInDate());
task.setStatus(OP_STATUS.WAIT.name()); task.setStatus(OP_STATUS.WAIT.name());
...@@ -124,7 +135,6 @@ public class TaskService { ...@@ -124,7 +135,6 @@ public class TaskService {
addTaskToExecute(task); addTaskToExecute(task);
return ""; return "";
} }
/** /**
* 并盘出库方法,需提前验证是否可出库 * 并盘出库方法,需提前验证是否可出库
* @param storage * @param storage
...@@ -806,7 +816,7 @@ public class TaskService { ...@@ -806,7 +816,7 @@ public class TaskService {
barcode.setUsedCount(barcode.getUsedCount() + 1); barcode.setUsedCount(barcode.getUsedCount() + 1);
barcode.setUsedDate(new Date()); barcode.setUsedDate(new Date());
barcode.setPutInTime(System.currentTimeMillis()); barcode.setPutInTime(System.currentTimeMillis());
barcode.updateSluggishTime(dataCache.getPNsluggishDay(barcode.getPartNumber())); barcode.updateSluggishDate(dataCache.getPNsluggishDay(barcode.getPartNumber()));
barcode.setInOpor(opUser); barcode.setInOpor(opUser);
barcode.setCheckOutDate(null, ""); barcode.setCheckOutDate(null, "");
barcode.setPosName(task.getPosName()); barcode.setPosName(task.getPosName());
......
...@@ -68,4 +68,13 @@ hik: ...@@ -68,4 +68,13 @@ hik:
1.元器件字段修改:截料设置盘数,安全库存盘数,补充盘数限制。 1.元器件字段修改:截料设置盘数,安全库存盘数,补充盘数限制。
2.入库单增加凭证号,物料日志页面分来源一,来源二。 2.入库单增加凭证号,物料日志页面分来源一,来源二。
3.UID出库,增加物料编号,批次,供应商 查询。 3.UID出库,增加物料编号,批次,供应商 查询。
4.齐套缺料改为:分开计算每个工单缺少多少盘, 然后最后把总盘数加起来
\ No newline at end of file \ No newline at end of file
4.齐套缺料改为:分开计算每个工单缺少多少盘, 然后最后把总盘数加起来
20230217
增加普通入库,退料入库,截料入库 菜单。
20230530
新呆滞物料功能:barcode 增加 sluggishDate,maxSluggishDate
\ No newline at end of file \ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!