Commit 8b434640 zshaohui

1.增加散料仓量测接口

2.过期报表增加状态:已过期,未过期,0-7,7-30
3.外仓异动增加首次入库时间
1 个父辈 69c5c1e0
......@@ -238,7 +238,7 @@ public class DataInitManager {
addNewFunctionMenu(91,pMenuReport,"imDetailsReport","导入明细","imDetailsReport","innerWarehouse/imDetailsReport/index","feeding",functionMenuMap);
//内外仓都有
addNewFunctionMenu(92,pMenuReport,"expiredReport","过期","expiredReport","report/expiredReport/index","inventory",functionMenuMap);
addNewFunctionMenu(92,pMenuReport,"expiredReport","物料状态","expiredReport","report/expiredReport/index","inventory",functionMenuMap);
//可观测性:物料追踪
Menu guanceMenu = Menu.CreatePMenu("可观测性", 8, "observability", 2, "scanKey",null);
......
......@@ -433,6 +433,13 @@ public class NLShelfHandler extends BaseDeviceHandler {
Barcode barcodeApi = lizhenApi.barcodeInfo(barcode);
if (barcodeApi != null){
//判断返回过来的物料数量与标签上的是否一致,如果不一致,则调用散料量测接口
if (barcodeApi.getAmount() != barcode.getLabelAmount()) {
boolean check = lizhenApi.checkReelMeasure(barcode);
if (!check) {
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "散料未量测");
}
}
barcode = barcodeApi;
}
......
......@@ -215,6 +215,13 @@ public class DeviceController {
Barcode barcodeApi = lizhenApi.barcodeInfo(barcode);
if (barcodeApi != null){
//判断返回过来的物料数量与标签上的是否一致,如果不一致,则调用散料量测接口
if (barcodeApi.getAmount() != barcode.getLabelAmount()) {
boolean check = lizhenApi.checkReelMeasure(barcode);
if (!check) {
throw new ValidateException("", barcode.getBarcode() + "散料未量测");
}
}
barcode = barcodeApi;
}
......
......@@ -122,4 +122,13 @@ public class OrderItemDto {
@ApiModelProperty("缺料预警物料")
private String reel;
@ApiModelProperty("累计预警时间")
private long preWarningTime;
@ApiModelProperty("发料时间")
private Date issuanceDate;
@ApiModelProperty("楼层")
private String floor;
}
......@@ -8,6 +8,7 @@ import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Data
......@@ -203,6 +204,22 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
private boolean isManualUpload = false;
/**
* 楼层
*/
private String floor = "";
/**
* 预警时间
*/
private long preWarningTime;
/**
* 发料时间
*/
private Date issuanceDate;
/**
* 出库是否满足要求,已出库数量大于需求数量
*/
public boolean isOutFinished(){
......
......@@ -417,7 +417,7 @@ public class StoragePosController {
for (StoragePosDto storagePosDto : StoragePosDtos) {
BarcodeDto barcode = storagePosDto.getBarcode();
if (barcode.getPutInTime() == -1){
barcode.setFirstPutInDate(barcode.getPutInDate());
barcode.setFirstPutInDate(barcode.getCreateDate());
//storagePosDto.setBarcode(barcode);
}
}
......@@ -619,7 +619,7 @@ public class StoragePosController {
String putInTime = (pos.getBarcode().getPutInTime() == -1) ? "" : dateFormat.format(new Date(pos.getBarcode().getPutInTime()));
if(ObjectUtil.isEmpty(putInTime)){
putInTime=dateFormat.format(pos.getBarcode().getPutInDate());
putInTime=dateFormat.format(pos.getBarcode().getCreateDate());
}
List<Object> data = new ArrayList<>();
......
......@@ -343,6 +343,16 @@ public class DataLog extends BasePo implements Serializable {
*/
private String inventoryBatch;
/**
* 物料描述
*/
private String describe;
/**
* 首次入库时间
*/
private Date fristPutInDate;
public String getBarcode() {
if(barcode == null){
return "";
......
......@@ -563,17 +563,22 @@ public class LizhenApi extends DefaultSmfApiListener {
try {
log.info("散料量测接口入参为-----" + JSON.toJSONString(paramMap));
String result = HttpHelper.postJson(checkReelMeasureUrl, paramMap);
log.info("散料量测接口出参为-----" + result);
JSONObject jsonObject = JSON.parseObject(result);
if (jsonObject.getInteger("status") == 200) {
JSONObject data = jsonObject.getJSONObject("data");
if (data.getBoolean("result")) {
return true;
} else {
return false;
}
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return false;
}
......
......@@ -245,6 +245,13 @@ public class OutLineController {
//获取mes数量
Barcode barcodeInfo = lizhenApi.barcodeInfo(barcode);
if (barcodeInfo != null){
//判断返回过来的物料数量与标签上的是否一致,如果不一致,则调用散料量测接口
if (barcodeInfo.getAmount() != barcode.getLabelAmount()) {
boolean check = lizhenApi.checkReelMeasure(barcode);
if (!check) {
return ResultBean.newErrorResult(-1,"",barcode.getBarcode()+"散料未量测");
}
}
barcode = barcodeInfo;
}
barcode.setReelAmount(1);
......@@ -787,6 +794,12 @@ public class OutLineController {
}
}
task.setBoxOut(isBoxOut);
if (barcode.getPutInTime() != -1){
task.setFristPutInDate(new Date(barcode.getPutInTime()));
} else {
task.setFristPutInDate(barcode.getPutInDate());
}
task.setDescribe(barcode.getDescribe());
taskService.updateFinishedTask(task);
return task;
}
......@@ -1173,6 +1186,13 @@ public class OutLineController {
task.setReelPosName(barcode.getPosName());
task.setExtendType(extendType);
task.setWarehouseCode(barcode.getWarehouseCode());
//增加首次入库时间和物料描述
if(barcode.getPutInTime() != -1){
task.setFristPutInDate(new Date(barcode.getPutInTime()));
} else {
task.setFristPutInDate(barcode.getPutInDate());
}
task.setDescribe(barcode.getDescribe());
taskService.updateFinishedTask(task);
return "";
}
......@@ -1187,6 +1207,12 @@ public class OutLineController {
task.setBoxPosName(pos.getPosName());
task.setExtendType(extendType);
task.setWarehouseCode(barcode.getWarehouseCode());
if (barcode.getPutInTime() != -1) {
task.setFristPutInDate(new Date(barcode.getPutInTime()));
} else {
task.setFristPutInDate(barcode.getPutInDate());
}
task.setDescribe(barcode.getDescribe());
taskService.addTaskToExecute(task);
return task;
}
......
......@@ -846,6 +846,12 @@ public class WarehouseController {
task.setOperator(SecurityUtils.getCurrentUsername());
task.setBoxPosName(pos.getPosName());
task.setExtendType(extendType);
if (barcode.getPutInTime() != -1) {
task.setFristPutInDate(new Date(barcode.getPutInTime()));
} else {
task.setFristPutInDate(barcode.getPutInDate());
}
task.setDescribe(barcode.getDescribe());
taskService.addTaskToExecute(task);
return task;
}
......@@ -1300,6 +1306,12 @@ public class WarehouseController {
}
}
task.setBoxOut(isBoxOut);
if (barcode.getPutInTime() != -1) {
task.setFristPutInDate(new Date(barcode.getPutInTime()));
} else {
task.setFristPutInDate(barcode.getPutInDate());
}
task.setDescribe(barcode.getDescribe());
taskService.updateFinishedTask(task);
return task;
}
......
......@@ -131,6 +131,13 @@ public class VirtualRestController {
Barcode barcodeInfo = lizhenApi.barcodeInfo(barcode);
if (barcodeInfo != null){
//判断返回过来的物料数量与标签上的是否一致,如果不一致,则调用散料量测接口
if (barcodeInfo.getAmount() != barcode.getLabelAmount()) {
boolean check = lizhenApi.checkReelMeasure(barcode);
if (!check) {
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "散料未量测");
}
}
barcode = barcodeInfo;
}
//判断是否为禁用料
......
......@@ -194,7 +194,7 @@ public class InnerKanbanController {
@AnonymousAccess
public ResultBean getExpireInfo() throws ParseException {
Long lastSaveTime = expireMap.get("lastSaveTime");
if (lastSaveTime == null || System.currentTimeMillis() - lastSaveTime >= 1000 * 60 * 60) {
if (lastSaveTime == null || System.currentTimeMillis() - lastSaveTime >= 1000 * 60 * 10) {
expireMap.put("noExpire", getNoExpireCount());
expireMap.put("zeroToServen", getZeroToServenExpireCount());
expireMap.put("servenToThirty", getServenToThrityExpireCount());
......
......@@ -175,7 +175,7 @@ public class OuterKanbanController {
@AnonymousAccess
public ResultBean getExpireInfo() throws ParseException {
Long lastSaveTime = expireMap.get("lastSaveTime");
if (lastSaveTime == null || System.currentTimeMillis() - lastSaveTime >= 1000 * 60 * 60) {
if (lastSaveTime == null || System.currentTimeMillis() - lastSaveTime >= 1000 * 60 * 10) {
expireMap.put("noExpire", getNoExpireCount());
expireMap.put("zeroToServen", getZeroToServenExpireCount());
expireMap.put("servenToThirty", getServenToThrityExpireCount());
......
......@@ -43,4 +43,9 @@ public class ExpireDto extends Barcode {
* 隔口数量
*/
private Integer partitionCount;
/**
* 备注
*/
private String remark;
}
......@@ -40,6 +40,7 @@ import com.neotel.smfcore.custom.lizhen.innerBox.service.manager.IVirImportLogMa
import com.neotel.smfcore.custom.lizhen.report.bean.dto.ExpireDto;
import com.neotel.smfcore.custom.lizhen.report.bean.query.ReportQueryCondition;
import com.neotel.smfcore.custom.lizhen.report.merge.utils.FloorUtils;
import com.neotel.smfcore.custom.lizhen.util.ExpireDateUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -232,7 +233,7 @@ public class InnerReportController {
@AnonymousAccess
public PageData inventory(ReportQueryCondition queryCondition, Pageable pageable) {
Query query = QueryHelp.getQuery(queryCondition);
query.addCriteria(Criteria.where("used").is(true));
query.addCriteria(Criteria.where("barcode").exists(true));
PageData resultData = new PageData();
if (pageable != null) {
PageData<StoragePos> page = storagePosManager.findByPage(query, pageable);
......@@ -469,52 +470,98 @@ public class InnerReportController {
@RequestMapping("/lackPicking")
@AnonymousAccess
public PageData lackPicking(ReportQueryCondition queryCondition, Pageable pageable) {
Collection<LiteOrder> liteOrders = liteOrderCache.getAllLiteOrder();
PageData resultData = new PageData();
resultData.setContent(new ArrayList());
if (liteOrders != null && !liteOrders.isEmpty()) {
//先按创建时间进行升序
liteOrders = liteOrders.stream().sorted(Comparator.comparing(LiteOrder::getCreateDate)).collect(Collectors.toList());
//再按优先级进行降序
liteOrders = liteOrders.stream().sorted(Comparator.comparing(LiteOrder::getPriority).reversed()).collect(Collectors.toList());
List<LiteOrderItem> orderItems = getLackItems(liteOrders, queryCondition);
if (orderItems != null && !orderItems.isEmpty()) {
resultData.setTotalElements(orderItems.size());
resultData.setContent(orderItemMapper.toDto(orderItems));
Query query = QueryHelp.getQuery(queryCondition);
PageData<LiteOrderItem> pageData = liteOrderItemManager.findByPage(query, pageable);
List<OrderItemDto> dtoList = new ArrayList<>();
int totalElements = pageData.getTotalElements();
if (totalElements != 0) {
String floor = dataCache.getCache(Constants.CACHE_floor);
List<LiteOrderItem> itemList = pageData.getContent();
for (LiteOrderItem orderItem : itemList) {
orderItem.setFloor(floor);
orderItem.setNeedNum(orderItem.getOutNum());
orderItem.setNeedReelCount(1);
//如果已经出库,则取修改时间为预警时间
if (orderItem.getOutNum() > 0) {
orderItem.setPreWarningTime(DateUtil.between(orderItem.getCreateDate(), orderItem.getUpdateDate(), DateUnit.MINUTE));
orderItem.setIssuanceDate(orderItem.getUpdateDate());
} else {
orderItem.setPreWarningTime(DateUtil.between(orderItem.getCreateDate(), new Date(), DateUnit.MINUTE));
orderItem.setLackNum(orderItem.getNeedNum());
orderItem.setLackReel(orderItem.getNeedReelCount());
}
dtoList.add(orderItemMapper.toDto(orderItem));
}
}
return resultData;
return new PageData(dtoList, totalElements);
}
@ApiOperation("缺料导出")
@RequestMapping("/lackPicking/download")
@AnonymousAccess
public void lackPickingDownload(ReportQueryCondition queryCondition, Pageable pageable, HttpServletResponse response) {
PageData data = lackPicking(queryCondition, null);
List<OrderItemDto> dtos = data.getContent();
List<Map<String, Object>> results = new ArrayList<>();
if (dtos != null && !dtos.isEmpty()) {
for (OrderItemDto dto : dtos) {
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("线别", dto.getLine());
resultMap.put("工单号", dto.getOrderNo());
resultMap.put("料号", dto.getPn());
resultMap.put("机器", dto.getMachineName());
resultMap.put("站点", dto.getTableNo());
resultMap.put("站位", dto.getSlot());
resultMap.put("点位", dto.getSubSlot());
resultMap.put("面别", dto.getSide());
resultMap.put("需求卷", dto.getNeedReelCount());
results.add(resultMap);
public void lackPickingDownload(ReportQueryCondition queryCondition, Pageable pageable, HttpServletResponse response) throws IOException {
String floor = dataCache.getCache(Constants.CACHE_floor);
Query query = QueryHelp.getQuery(queryCondition);
FileUtil.downloadExcel(query, pageable, response, new IExcelDownLoad() {
@Override
public List<List<String>> getHeader() {
List<List<String>> headerList = new ArrayList<>();
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("缺料数量"));
headerList.add(Lists.newArrayList("缺料卷数"));
headerList.add(Lists.newArrayList("累计预警时间"));
return headerList;
}
}
try {
FileUtil.downloadExcel(results, response);
} catch (IOException e) {
e.printStackTrace();
log.info("内仓缺料导出导出失败--" + e.getMessage());
}
@Override
public List<List<Object>> getPageData(Query query, Pageable pageable) {
List<List<Object>> dataList = new ArrayList<>();
PageData<LiteOrderItem> data = liteOrderItemManager.findByPage(query, pageable);
for (LiteOrderItem orderItem : data.getContent()) {
List<Object> result = new ArrayList<>();
orderItem.setNeedNum(orderItem.getOutNum());
orderItem.setNeedReelCount(1);
//如果已经出库,则取修改时间为预警时间
if (orderItem.getOutNum() > 0) {
orderItem.setPreWarningTime(DateUtil.between(orderItem.getCreateDate(), orderItem.getUpdateDate(), DateUnit.MINUTE));
orderItem.setIssuanceDate(orderItem.getUpdateDate());
} else {
orderItem.setPreWarningTime(DateUtil.between(orderItem.getCreateDate(), new Date(), DateUnit.MINUTE));
orderItem.setLackNum(orderItem.getNeedNum());
orderItem.setLackReel(orderItem.getNeedReelCount());
}
result.add(floor);
result.add(orderItem.getLine());
result.add(orderItem.getPn());
result.add(orderItem.getMachineName());
result.add(orderItem.getSide());
result.add(orderItem.getSlot());
result.add(orderItem.getNeedNum());
result.add(orderItem.getNeedReelCount());
result.add(orderItem.getCreateDate());
result.add(orderItem.getOutNum());
result.add(orderItem.getOutReelCount());
result.add(orderItem.getIssuanceDate());
result.add(orderItem.getLackNum());
result.add(orderItem.getLackReel());
result.add(orderItem.getPreWarningTime());
dataList.add(result);
}
return dataList;
}
});
}
......@@ -712,7 +759,7 @@ public class InnerReportController {
@AnonymousAccess
public PageData<ExpireDto> expireInfo(ReportQueryCondition queryCondition, Pageable pageable) {
Query query = QueryHelp.getQuery(queryCondition);
query.addCriteria(Criteria.where("barcode").exists(true).and("barcode.expireDate").lte(new Date()));
query.addCriteria(Criteria.where("barcode").exists(true));
int count = storagePosManager.countByQuery(query);
List<StoragePos> storagePosList = storagePosManager.findByQuery(query, pageable);
PageData<ExpireDto> data = new PageData<>();
......@@ -722,9 +769,16 @@ public class InnerReportController {
Barcode barcode = storagePos.getBarcode();
ExpireDto dto = new ExpireDto();
BeanUtils.copyProperties(barcode, dto);
long betweenDay = DateUtil.between(dto.getExpireDate(), new Date(), DateUnit.DAY) + 1;
dto.setExpireDays(betweenDay);
if (dto.getExpireDate() != null){
long days = ExpireDateUtil.getExpireDays(dto.getExpireDate());
dto.setExpireDays(days);
String reelStatus = ExpireDateUtil.getReelStatus(days);
dto.setRemark(reelStatus);
} else {
dto.setExpireDays(0);
dto.setRemark("");
}
//long betweenDay = DateUtil.between(dto.getExpireDate(), new Date(), DateUnit.DAY) + 1;
dto.setFactory("A5");
dto.setPlant("W337");
dto.setFloor(dataCache.getCache(Constants.CACHE_floor));
......@@ -745,7 +799,7 @@ public class InnerReportController {
@AnonymousAccess
public void expireInfo(ReportQueryCondition queryCondition, Pageable pageable, HttpServletResponse response) throws IOException {
Query query = QueryHelp.getQuery(queryCondition);
query.addCriteria(Criteria.where("barcode").exists(true).and("barcode.expireDate").lte(new Date()));
query.addCriteria(Criteria.where("barcode").exists(true));
FileUtil.downloadExcel(query, pageable, response, new IExcelDownLoad() {
@Override
public List<List<String>> getHeader() {
......@@ -765,6 +819,7 @@ public class InnerReportController {
header.add(Lists.newArrayList("厂商代码"));
header.add(Lists.newArrayList("keeper"));
header.add(Lists.newArrayList("过期天数"));
header.add(Lists.newArrayList("物料状态"));
header.add(Lists.newArrayList("过期日期"));
header.add(Lists.newArrayList("工号"));
header.add(Lists.newArrayList("首次入库时间"));
......@@ -794,7 +849,15 @@ public class InnerReportController {
data.add(barcode.getProvider());
data.add(barcode.getProviderNumber());
data.add(barcode.getKeeperCode());
data.add(DateUtil.between(barcode.getExpireDate(), new Date(), DateUnit.DAY) + 1);
if (barcode.getExpireDate() != null){
long days = ExpireDateUtil.getExpireDays(barcode.getExpireDate());
data.add(days);
String reelStatus = ExpireDateUtil.getReelStatus(days);
data.add(reelStatus);
} else {
data.add(0);
data.add("");
}
data.add(barcode.getExpireDate());
data.add(barcode.getCreator());
data.add(new Date(barcode.getPutInTime()));
......
......@@ -37,6 +37,7 @@ import com.neotel.smfcore.custom.lizhen.innerBox.enums.ExtendType;
import com.neotel.smfcore.custom.lizhen.report.bean.dto.ExpireDto;
import com.neotel.smfcore.custom.lizhen.report.bean.dto.InventoryDto;
import com.neotel.smfcore.custom.lizhen.report.bean.query.ReportQueryCondition;
import com.neotel.smfcore.custom.lizhen.util.ExpireDateUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -161,7 +162,7 @@ public class OuterReportController {
resultMap.put("挑料单号", getData(dataLog.getOrderNo()));
resultMap.put("工单号", getData(dataLog.getMo()));
resultMap.put("料号", getData(dataLog.getPartNumber()));
resultMap.put("物料描述", getData(null));
resultMap.put("物料描述", getData(dataLog.getDescribe()));
resultMap.put("储位", getData(dataLog.getPosName()));
resultMap.put("段别", getData(dataLog.getSide()));
resultMap.put("数量", getData(dataLog.getNum()));
......@@ -436,7 +437,7 @@ public class OuterReportController {
resultMap.put("厂别", getData(dataLog.getPlantCode()));
resultMap.put("厂区", getData(dataLog.getFactory()));
resultMap.put("料号", getData(dataLog.getPartNumber()));
resultMap.put("物料描述", getData(null));
resultMap.put("物料描述", getData(dataLog.getDescribe()));
resultMap.put("隔口码", getData(dataLog.getPosName()));
resultMap.put("异动数量", getData(dataLog.getNum()));
resultMap.put("储位", getData(dataLog.getStoragePosName()));
......@@ -452,6 +453,7 @@ public class OuterReportController {
resultMap.put("Keeper", getData(dataLog.getKeeperCode()));
resultMap.put("原始库别", getData(dataLog.getWarehouseCode()));
resultMap.put("目的库别", getData(null));
resultMap.put("首次入库时间", getData(dataLog.getFristPutInDate()));
resultMap.put("事务日期", getData(dataLog.getCreateDate()));
resultMap.put("工号", getData(dataLog.getOperator()));
resultMap.put("姓名", getData(null));
......@@ -707,7 +709,7 @@ public class OuterReportController {
resultMap.put("厂区", getData(dto.getFactory()));
resultMap.put("库别", getData(dto.getWarehouseCode()));
resultMap.put("料号", getData(dto.getPartNumber()));
resultMap.put("物料描述", getData(null));
resultMap.put("物料描述", getData(dto.getDescribe()));
resultMap.put("隔口码", getData(dto.getPosName()));
resultMap.put("储位", getData(dto.getStoragePosName()));
resultMap.put("Keeper", getData(dto.getKeeperCode()));
......@@ -790,7 +792,7 @@ public class OuterReportController {
@AnonymousAccess
public PageData<ExpireDto> expireInfo(ReportQueryCondition queryCondition, Pageable pageable) {
Query query = QueryHelp.getQuery(queryCondition);
query.addCriteria(Criteria.where("posName").exists(true).ne("").and("expireDate").lt(new Date()));
query.addCriteria(Criteria.where("posName").exists(true).ne("").and("partNumber").nin(Arrays.asList("CS","CM","CB"))/*.and("expireDate").lt(new Date())*/);
int count = barcodeManager.countByQuery(query);
List<Barcode> barcodeList = barcodeManager.findByQuery(query, pageable);
List<ExpireDto> expireDtoList = new ArrayList<>();
......@@ -815,14 +817,20 @@ public class OuterReportController {
//开始赋值
for (Barcode barcode : barcodeList) {
List<Barcode> posNameList = pidBarcodeList.stream().filter(item -> {
return barcode.getHostBarcodeId().equals(item.getId());
return barcode.getPosName().startsWith(item.getBarcode());
}).collect(Collectors.toList());
Barcode pidBarcode = (posNameList != null && !posNameList.isEmpty()) ? posNameList.get(0) : null;
ExpireDto dto = new ExpireDto();
BeanUtils.copyProperties(barcode, dto);
dto.setPutInDate(barcode.getPutInDate());
dto.setExpireDays(DateUtil.between(dto.getExpireDate(),new Date(), DateUnit.DAY) + 1);
if (dto.getExpireDate() != null) {
long expireDays = ExpireDateUtil.getExpireDays(dto.getExpireDate());
dto.setExpireDays(expireDays);
dto.setRemark(ExpireDateUtil.getReelStatus(expireDays));
} else {
dto.setExpireDays(0);
}
dto.setPlant("W337");
dto.setFactory("B15");
dto.setFloor("1F");
......@@ -851,7 +859,7 @@ public class OuterReportController {
@AnonymousAccess
public void expireInfoDownload(ReportQueryCondition queryCondition, Pageable pageable, HttpServletResponse response) throws IOException {
Query query = QueryHelp.getQuery(queryCondition);
query.addCriteria(Criteria.where("posName").exists(true).ne("").and("expireDate").lt(new Date()));
query.addCriteria(Criteria.where("posName").exists(true).ne("").and("partNumber").nin(Arrays.asList("CS","CM","CB"))/*.and("expireDate").lt(new Date())*/);
FileUtil.downloadExcel(query, pageable, response, new IExcelDownLoad() {
@Override
......@@ -874,11 +882,13 @@ public class OuterReportController {
header.add(Lists.newArrayList("厂商代码"));
header.add(Lists.newArrayList("keeper"));
header.add(Lists.newArrayList("过期天数"));
header.add(Lists.newArrayList("物料状态"));
header.add(Lists.newArrayList("过期日期"));
header.add(Lists.newArrayList("工号"));
header.add(Lists.newArrayList("首次入库时间"));
header.add(Lists.newArrayList("当前入库时间"));
header.add(Lists.newArrayList("来源"));
header.add(Lists.newArrayList("备注"));
return header;
}
......@@ -903,14 +913,21 @@ public class OuterReportController {
List<Barcode> pidBarcodeList = barcodeManager.findByQuery(new Query(Criteria.where("barcode").in(boxStrList)));
for (Barcode barcode : barcodeList) {
List<Barcode> posNameList = pidBarcodeList.stream().filter(item -> {
return barcode.getHostBarcodeId().equals(item.getId());
return barcode.getPosName().startsWith(item.getBarcode());
}).collect(Collectors.toList());
Barcode pidBarcode = (posNameList != null && !posNameList.isEmpty()) ? posNameList.get(0) : null;
ExpireDto dto = new ExpireDto();
List<Object> data = new ArrayList<>();
BeanUtils.copyProperties(barcode, dto);
dto.setPutInDate(barcode.getPutInDate());
dto.setExpireDays(DateUtil.between(dto.getExpireDate(), new Date(), DateUnit.DAY) + 1);
if (dto.getExpireDate() != null) {
long expireDays = ExpireDateUtil.getExpireDays(dto.getExpireDate());
dto.setExpireDays(expireDays);
dto.setRemark(ExpireDateUtil.getReelStatus(expireDays));
} else {
dto.setExpireDays(0);
dto.setRemark("");
}
dto.setPlant("W337");
dto.setFactory("B15");
dto.setFloor("1F");
......@@ -947,6 +964,7 @@ public class OuterReportController {
data.add(dto.getFirstPutInDate());
data.add(dto.getPutInDate());
data.add(dto.getSource());
data.add(dto.getRemark());
resultList.add(data);
}
}
......
......@@ -2,6 +2,7 @@ package com.neotel.smfcore.custom.lizhen.util;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import lombok.extern.slf4j.Slf4j;
......@@ -11,6 +12,31 @@ import java.util.Locale;
@Slf4j
public class ExpireDateUtil {
public static long getExpireDays(Date expireDate) {
Date date = new Date();
long days = DateUtil.between(expireDate, date, DateUnit.DAY) + 1;
if (expireDate.getTime() >= date.getTime()) {
days = -days;
}
return days;
}
public static String getReelStatus(long days) {
if (days <= 0 && days > -7) {
return "0-7天过期(未过期)";
}
if (days > -30 && days <= -7) {
return "7-30天过期(未过期)";
}
if (days > 0) {
return "已过期";
}
if (days < 0) {
return "未过期";
}
return "";
}
public static Date getExpireDate(String dateStr, String vendor) {
try {
vendor = vendor.toUpperCase(Locale.ROOT);
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!