Commit 8b434640 zshaohui

1.增加散料仓量测接口

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