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;
}
......@@ -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!