Commit 333058fb LN

增加工单详情功能。增加看板接口。

1 个父辈 8d51c0f7
...@@ -197,6 +197,9 @@ public class DataInitManager { ...@@ -197,6 +197,9 @@ public class DataInitManager {
List<Menu> menus=new ArrayList<Menu>(); List<Menu> menus=new ArrayList<Menu>();
//料架分组 //料架分组
Menu menukanban = new Menu(new ArrayList<Menu>(), 1, "boxkanban", "锁定物料", 1, "lockMaterial", "lockMaterial/material/index", "", 0, "app");
menus.addAll(createMenus(menukanban ));
//料架分组
Menu menuShelf = new Menu(new ArrayList<Menu>(), 1, "menu:list", "料架分组", 1, "lightGroup", "neolight/lightGroup/index", "", 0, "list"); Menu menuShelf = new Menu(new ArrayList<Menu>(), 1, "menu:list", "料架分组", 1, "lightGroup", "neolight/lightGroup/index", "", 0, "list");
menus.addAll(createMenus(menuShelf )); menus.addAll(createMenus(menuShelf ));
......
package com.neotel.smfcore.core.kanban.rest;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.device.bean.BoxStatusBean;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.kanban.rest.bean.dto.BoxKanbanDto;
import com.neotel.smfcore.core.kanban.rest.bean.dto.BoxStatusDto;
import com.neotel.smfcore.core.kanban.rest.bean.dto.BoxTaskDto;
import com.neotel.smfcore.core.kanban.rest.bean.dto.GroupStatusDto;
import com.neotel.smfcore.core.kanban.rest.bean.mapstruct.BoxTaskMapper;
import com.neotel.smfcore.core.kanban.rest.bean.query.BoxTaskQueryCriter;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.system.service.manager.impl.DataLogManagerImpl;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.service.po.Humiture;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.security.service.manager.IGroupManager;
import com.neotel.smfcore.security.service.manager.impl.GroupManagerImpl;
import com.neotel.smfcore.security.service.manager.impl.UserManagerImpl;
import com.neotel.smfcore.security.service.po.Group;
import com.neotel.smfcore.security.service.po.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import javafx.concurrent.Task;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
@Slf4j
@RestController
@RequiredArgsConstructor
@Api(tags = "BOX看板")
@RequestMapping("api/boxkanban")
public class BoxKanbanController {
@Autowired
TaskService taskService;
@Autowired
DataCache dataCache;
@Autowired
DataLogManagerImpl dataLogManager;
@Autowired
BoxTaskMapper boxTaskMapper;
@Autowired
UserManagerImpl userManager;
@Autowired
IGroupManager groupManager;
@ApiOperation("获取看板数据")
@GetMapping
@PreAuthorize("@el.check('boxkanban:info')")
public BoxKanbanDto info() {
List<DataLog> allTasks=taskService.getAllTasks();
BoxKanbanDto boxKanbanDto = getKanBan(allTasks);
String userId = SecurityUtils.getCurrentUserId();
User user = userManager.get(userId);
Set<String> mygroups = user.getGroups();
ArrayList<GroupStatusDto> groupStatusDtos = new ArrayList<>();
for (String groupid : mygroups) {
Group group = groupManager.get(groupid);
if (group == null) {
continue;
}
List<BoxStatusDto> boxStatusDtos = new ArrayList<>();
List<String> cidList = getCidsByGroupId(groupid, false);
for (String cid : cidList) {
Storage storage=dataCache.getStorage(cid);
if(storage==null){
continue;
}
boxStatusDtos.add(getBoxDto(storage,allTasks));
}
GroupStatusDto groupStatusDto = new GroupStatusDto(group.getId(),group.getGroupName(),boxStatusDtos);
groupStatusDtos.add(groupStatusDto);
}
boxKanbanDto.setGroupList(groupStatusDtos);
return boxKanbanDto;
}
@ApiOperation("查询看板任务列表")
@GetMapping("/task")
@PreAuthorize("@el.check('boxkanban:list')")
public PageData<BoxTaskDto> info(BoxTaskQueryCriter criteria, Pageable pageable) {
Query query = QueryHelp.getQuery(criteria);
String groupId = criteria.getGroupId();
List<String> cidList = getCidsByGroupId(groupId,true);
query.addCriteria(Criteria.where("cid").in(cidList));
PageData<DataLog> dataLogPageData=dataLogManager.findByPage(query,pageable);
List<BoxTaskDto> boxTaskDtos=boxTaskMapper.toDto(dataLogPageData.getContent());
//正常
if(criteria.getStatus()==1){
Date lastUpdateTime=new Date((new Date().getTime())-10 * 60 * 1000);
query.addCriteria(Criteria.where("updateDate").gt(lastUpdateTime).and("status").is(OP_STATUS.EXECUTING));
}//异常
else if(criteria.getStatus()==2){
Date lastUpdateTime=new Date((new Date().getTime())-10 * 60 * 1000);
query.addCriteria(Criteria.where("updateDate").lte(lastUpdateTime).and("status").is(OP_STATUS.EXECUTING));
}else{
List<String> sList=new ArrayList<>();
sList.add(OP_STATUS.WAIT.toString());
sList.add(OP_STATUS.EXECUTING.toString());
query.addCriteria(Criteria.where("status").in(sList));
}
return new PageData(boxTaskDtos, boxTaskDtos.size());
}
private List<String> getCidsByGroupId(String groupId,boolean nullReturnAll){
List<String> cidList = Lists.newArrayList();
for (Storage storage : dataCache.getAllStorage().values()) {
if (!ObjectUtils.isEmpty(groupId)) {
String storageGroupId = storage.getGroupId();
if(ObjectUtils.isEmpty(storageGroupId)){
storageGroupId="1";
}
if ( storageGroupId.equals(groupId)) {
cidList.add(storage.getCid());
}
} else if(nullReturnAll){
cidList.add(storage.getCid());
}
}
return cidList;
}
private BoxKanbanDto getKanBan(List<DataLog> allTasks) {
int allCount = allTasks.size();
int abnormal = 0;
int normal = 0;
for (DataLog data : allTasks) {
//超过10分钟未更新为异常
if (data.isAbnormal()) {
abnormal++;
} else if (data.getStatus().equals(OP_STATUS.EXECUTING)) {
normal++;
}
}
BoxKanbanDto kanbanDto = new BoxKanbanDto(allCount, normal, abnormal, new ArrayList<>());
return kanbanDto;
}
private BoxStatusDto getBoxDto(Storage storage,List<DataLog> allTasks){
int inTask=0;
int outTask=0;
for (DataLog data : allTasks) {
if(data.getStorageId().equals(storage.getId())){
if(data.getType()==1){
inTask++;
}else if(data.getType()==2){
outTask++;
}
}
}
int allCount=inTask+outTask;
BoxStatusDto boxDto=new BoxStatusDto(storage.getId(),storage.getCid(),storage.getName(),false,0,
"11.11","22.22","",allCount,inTask,outTask,
1,OP_STATUS.EXECUTING.toString(),"库位号","条码","PN","工单名称");
//获取设备状态,设置状态和当前任务信息
StatusBean bean= DevicesStatusUtil.getStatusBean(storage.getCid());
if(bean==null||bean.getBoxStatus()==null){
boxDto.setOnLine(false);
}else {
boxDto.setOnLine(true);
for (BoxStatusBean boxStatus : bean.getBoxStatus().values()) {
String humidity = boxStatus.getHumidity();
String temperature = boxStatus.getTemperature();
boxDto.setHumidity(humidity);
boxDto.setTemperature(temperature);
boxDto.setStatus(bean.getStatus());
boxDto.setMsg(bean.getMsg());
break;
}
}
return boxDto;
}
}
package com.neotel.smfcore.core.kanban.rest.bean.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BoxKanbanDto {
@ApiModelProperty("全部任务数")
private int taskCount;
@ApiModelProperty("正常任务数")
private int normalTaskCount;
@ApiModelProperty("异常任务数")
private int abnormalTtaskCount;
@ApiModelProperty("组列表")
private List<GroupStatusDto> groupList;
}
package com.neotel.smfcore.core.kanban.rest.bean.dto;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BoxStatusDto {
@ApiModelProperty("ID")
private String id;
@ApiModelProperty("名称")
private String name;
@ApiModelProperty("CID")
private String cid;
@ApiModelProperty("是否在线")
private boolean onLine=false;
/// <summary>
/// 单台BOX状态
///1=正常运行中
/// 2=急停,3=故障,4=警告,5=调试中
/// 6入库执行中,7入仓位完成,8入库失败
/// 9出库执行中,10出仓位完成,11出库失败
/// </summary>
@ApiModelProperty("单台BOX状态,0=离线,1=正常运行中, 2=急停,3=故障,4=警告,5=调试中,6入库执行中,7入仓位完成,8入库失败, 9出库执行中,10出仓位完成,11出库失败")
private int status=0;
@ApiModelProperty("温度")
private String temperature;
@ApiModelProperty("湿度")
private String humidity;
@ApiModelProperty("文字显示")
private String msg = "";
@ApiModelProperty("总任务数")
private int taskCount=0;
@ApiModelProperty("入库任务数")
private int inTaskCount=0;
@ApiModelProperty("出库任务数")
private int outTaskCount=0;
@ApiModelProperty("当前执行任务的,0=无,1=入库,2=出库")
private int currTaskType=0;
/**
* 当前执行任务的 任务状态:OP_STATUS:NONE,WAIT=等待,EXECUTING=正在执行,PAUSE=已暂停,FINISHED=已完成,CANCEL=已取消,END=已结束
*/
@ApiModelProperty("当前执行任务的 任务状态:OP_STATUS:NONE,WAIT=等待,EXECUTING=正在执行,PAUSE=已暂停,FINISHED=已完成,CANCEL=已取消,END=已结束")
private String currTaskStatus;
@ApiModelProperty("当前执行任务的:库位号")
private String posName;
@ApiModelProperty("当前执行任务的:条码")
private String barcode;
@ApiModelProperty("当前执行任务的:Pn")
private String partNumber;
@ApiModelProperty("当前执行任务的:来源名称")
private String sourceName;
}
package com.neotel.smfcore.core.kanban.rest.bean.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class BoxTaskDto {
@ApiModelProperty("是否是单盘出库(联电指出库项目,默认为false即默认批量出库)")
private boolean singleOut = false;
@ApiModelProperty("所属料仓")
private String storageName;
@ApiModelProperty(value="料仓 cid")
private String cid;
@ApiModelProperty("料仓 ID")
private String storageId;
@ApiModelProperty("料仓 ID")
private String posId;
@ApiModelProperty("仓位名称")
private String posName;
@ApiModelProperty("二维码(Reel ID)")
private String barcode;
@ApiModelProperty("物料编号")
private String partNumber;
/**
*数量(从 barCode 中读取)
*/
@ApiModelProperty("物料编号")
private int num;
/**
* 类型:入库OP.PUT_IN,出库OP.CHECKOUT
*/
@ApiModelProperty("出入库类型")
private int type;
/**
* 状态:OP_STATUS
*/
private String status;
/**
* 指定批次Id
*/
private String batchId;
/**
* 批次显示内容
*/
private String batchInfo;
/**
* 指令来源:站位列表 指定订单工单 MES
*/
private String sourceType;
/**
* 来源 id,
*/
private String sourceId;
/**
* 来源名称
*/
private String sourceName;
/**
* 子来源 ID(单个站位)
*/
private String subSourceId;
/**
* 子来源名称
*/
private String subSourceInfo;
/**
* 创建人
*/
private String creator;
/**
* 操作人
*/
private String operator;
/**
* 关联条码,夹具时关联相关的物料,用于入库完成时插入相关物料
*/
private List<String> relationCodes;
private String memo;
/**
* 搅拌时间(锡膏搅拌任务使用)
*/
private int mixTime;
/**
* 亮灯料架颜色
*/
private String lightColor = "";
}
package com.neotel.smfcore.core.kanban.rest.bean.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
@AllArgsConstructor
public class GroupStatusDto {
@ApiModelProperty("ID")
private String groupId;
@ApiModelProperty("组名称")
private String groupName;
@ApiModelProperty("料仓列表")
private List<BoxStatusDto> boxList;
}
package com.neotel.smfcore.core.kanban.rest.bean.mapstruct;
import com.neotel.smfcore.common.base.BaseMapper;
import com.neotel.smfcore.core.kanban.rest.bean.dto.BoxTaskDto;
import com.neotel.smfcore.core.system.service.po.DataLog;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring" ,unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface BoxTaskMapper extends BaseMapper<BoxTaskDto, DataLog> {
}
package com.neotel.smfcore.core.kanban.rest.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
public class BoxTaskQueryCriter {
@QueryCondition(blurry = "storageName,cid,posName,partNumber,barcode,sourceName")
private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private BetweenData<Date> createDate;
@ApiModelProperty("组ID")
private String groupId;
@ApiModelProperty("料仓CID")
@QueryCondition
private String cid;
@ApiModelProperty("料仓ID")
@QueryCondition
private String storageId;
@ApiModelProperty("库位号")
@QueryCondition
private String posName;
@ApiModelProperty("条码")
@QueryCondition
private String barcode;
@ApiModelProperty("PN")
@QueryCondition
private String partNumber;
@ApiModelProperty("来源")
@QueryCondition
private String sourceName;
@ApiModelProperty("任务状态:0=所有,1=正常,2=异常")
private int status=0 ;
@ApiModelProperty("任务类型:0=所有,1=入库,2=出库")
@QueryCondition
private Integer type;
}
package com.neotel.smfcore.core.order.rest; package com.neotel.smfcore.core.order.rest;
import cn.hutool.db.sql.Order;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.neotel.smfcore.common.annotation.QueryCondition; import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
...@@ -15,6 +16,7 @@ import com.neotel.smfcore.common.utils.SecurityUtils; ...@@ -15,6 +16,7 @@ import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS; import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.rest.bean.dto.OrderDto; import com.neotel.smfcore.core.order.rest.bean.dto.OrderDto;
import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderItemMapper;
import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderMapper; import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderMapper;
import com.neotel.smfcore.core.order.rest.bean.query.OrderQueryCondition; import com.neotel.smfcore.core.order.rest.bean.query.OrderQueryCondition;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager; import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager;
...@@ -80,6 +82,9 @@ public class OrderController { ...@@ -80,6 +82,9 @@ public class OrderController {
private final OrderMapper orderMapper; private final OrderMapper orderMapper;
@Autowired @Autowired
private final OrderItemMapper orderItemMapper;
@Autowired
private LiteOrderCache liteOrderCache; private LiteOrderCache liteOrderCache;
@Autowired @Autowired
...@@ -99,14 +104,14 @@ public class OrderController { ...@@ -99,14 +104,14 @@ public class OrderController {
String image = "csv"; String image = "csv";
String fileType = FileUtil.getExtensionName(orderFile.getOriginalFilename()); String fileType = FileUtil.getExtensionName(orderFile.getOriginalFilename());
if (fileType != null && !image.contains(fileType)) { if (fileType != null && !image.contains(fileType)) {
throw new BadRequestException("smfcode.feleFormatError","文件格式错误!, 仅支持{0}格式",new String[]{image}); throw new BadRequestException("smfcode.feleFormatError", "文件格式错误!, 仅支持{0}格式", new String[]{image});
} }
File folder = new File(properties.getPath(), "pos"); File folder = new File(properties.getPath(), "pos");
File localFile = FileUtil.upload(orderFile, folder.getAbsolutePath()); File localFile = FileUtil.upload(orderFile, folder.getAbsolutePath());
List<LiteOrderItem> liteOrderItems = handleOrderCsv(localFile.getAbsolutePath()); List<LiteOrderItem> liteOrderItems = handleOrderCsv(localFile.getAbsolutePath());
if (liteOrderItems == null || liteOrderItems.size() <= 0) { if (liteOrderItems == null || liteOrderItems.size() <= 0) {
throw new BadRequestException("smfcode.fileError","文件解析失败"); throw new BadRequestException("smfcode.fileError", "文件解析失败");
} }
...@@ -122,7 +127,7 @@ public class OrderController { ...@@ -122,7 +127,7 @@ public class OrderController {
} else { } else {
log.info("数据库中已存在工单号为[" + liteOrder.getOrderNo() + "],忽略文件:" + localFile.getAbsolutePath()); log.info("数据库中已存在工单号为[" + liteOrder.getOrderNo() + "],忽略文件:" + localFile.getAbsolutePath());
throw new BadRequestException("smfcode.valueAlreadyExist","{0}[{1}]已存在",new String[]{"orderNo",liteOrder.getOrderNo()}); throw new BadRequestException("smfcode.valueAlreadyExist", "{0}[{1}]已存在", new String[]{"orderNo", liteOrder.getOrderNo()});
// throw new BadRequestException("工单号[" + liteOrder.getOrderNo() + "]已存在"); // throw new BadRequestException("工单号[" + liteOrder.getOrderNo() + "]已存在");
} }
...@@ -132,15 +137,15 @@ public class OrderController { ...@@ -132,15 +137,15 @@ public class OrderController {
@ApiOperation("工单出库") @ApiOperation("工单出库")
@PostMapping(value = "/out") @PostMapping(value = "/out")
@PreAuthorize("@el.check('order:out')") @PreAuthorize("@el.check('order:out')")
public ResultBean delete(@RequestBody Map<String,String> mapValues) { public ResultBean delete(@RequestBody Map<String, String> mapValues) {
String orderNo = mapValues.get("orderNo"); String orderNo = mapValues.get("orderNo");
if (orderNo == null) { if (orderNo == null) {
// throw new BadRequestException("工单号不能为空"); // throw new BadRequestException("工单号不能为空");
throw new BadRequestException("smfcode.valueCanotNull","{0}不能为空",new String[]{"orderNo"} ); throw new BadRequestException("smfcode.valueCanotNull", "{0}不能为空", new String[]{"orderNo"});
} }
LiteOrder liteOrder = liteOrderManager.findByOrderNo(orderNo); LiteOrder liteOrder = liteOrderManager.findByOrderNo(orderNo);
if (liteOrder == null) { if (liteOrder == null) {
throw new BadRequestException("smfcode.valueNotFind","未找到{0}[{1}]" ,new String[]{"orderNo", orderNo}); throw new BadRequestException("smfcode.valueNotFind", "未找到{0}[{1}]", new String[]{"orderNo", orderNo});
} }
// ResultBean resultBean = liteOrderCache.checkOutOrder(liteOrder); // ResultBean resultBean = liteOrderCache.checkOutOrder(liteOrder);
String result = liteOrderCache.checkOutLiteOrder(orderNo, false); String result = liteOrderCache.checkOutLiteOrder(orderNo, false);
...@@ -235,4 +240,29 @@ public class OrderController { ...@@ -235,4 +240,29 @@ public class OrderController {
} }
return null; return null;
} }
@ApiOperation("工单详情")
@GetMapping("/detial")
@PreAuthorize("@el.check('order:detial')")
@AnonymousAccess
public OrderDto detial(@RequestParam(required = false) String id, @RequestParam(required = false) String orderNo) {
if (!ObjectUtils.isEmpty(id)) {
LiteOrder liteOrder = liteOrderManager.get(id);
if (liteOrder != null) {
OrderDto dto= orderMapper.toDto(liteOrder);
dto.setOrderItems(orderItemMapper.toDto(liteOrder.getOrderItems()));
return dto;
}
} else if (!ObjectUtils.isEmpty(orderNo)) {
LiteOrder liteOrder = liteOrderManager.findByOrderNo(orderNo);
if (liteOrder != null) {
OrderDto dto= orderMapper.toDto(liteOrder);
dto.setOrderItems(orderItemMapper.toDto(liteOrder.getOrderItems()));
return dto;
}
}
throw new BadRequestException("smfcode.valueCanotNull", "{0}不能为空", new String[]{"orderNo"});
}
} }
package com.neotel.smfcore.core.order.rest.bean.dto; package com.neotel.smfcore.core.order.rest.bean.dto;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS; import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
...@@ -69,4 +70,11 @@ public class OrderDto implements Serializable { ...@@ -69,4 +70,11 @@ public class OrderDto implements Serializable {
@ApiModelProperty("套(倍)数") @ApiModelProperty("套(倍)数")
private float orderTimes = 1f; private float orderTimes = 1f;
/**
* 订单的详细信息
*/
@Transient
@ApiModelProperty("订单的详细信息")
private List<OrderItemDto> orderItems;
} }
package com.neotel.smfcore.core.order.rest.bean.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Transient;
@Getter
@Setter
public class OrderItemDto {
@ApiModelProperty(value = "ID")
private String id;
@ApiModelProperty("物料编号")
private String pn;
@ApiModelProperty("需求数量")
private int needNum = 0;
@ApiModelProperty("需求料盘数")
private int needReelCount = 0;
@ApiModelProperty("已出数量")
private int outNum = 0;
@ApiModelProperty("已出盘数")
private int outReelCount = 0;
@ApiModelProperty("订单信息")
private String orderNo = "";
@ApiModelProperty("站位信息")
private String feederInfo = "";
@ApiModelProperty("库存信息")
@Transient
private int inventoryNum = 0;
}
package com.neotel.smfcore.core.order.rest.bean.mapstruct;
import com.neotel.smfcore.common.base.BaseMapper;
import com.neotel.smfcore.core.order.rest.bean.dto.OrderItemDto;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface OrderItemMapper extends BaseMapper<OrderItemDto, LiteOrderItem> {
}
...@@ -32,7 +32,6 @@ public class LiteOrderManagerImpl implements ILiteOrderManager { ...@@ -32,7 +32,6 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
@Override @Override
public LiteOrder findByOrderNo(String orderNo) { public LiteOrder findByOrderNo(String orderNo) {
LiteOrder order= liteOrderDao.findOneByCondition(new String[] {"orderNo"}, new String[] {orderNo}); LiteOrder order= liteOrderDao.findOneByCondition(new String[] {"orderNo"}, new String[] {orderNo});
if(order!=null&& order.getOrderItems()==null){ if(order!=null&& order.getOrderItems()==null){
List<LiteOrderItem> items=liteOrderItemManager.findOrderItems(orderNo); List<LiteOrderItem> items=liteOrderItemManager.findOrderItems(orderNo);
order.setOrderItems(items); order.setOrderItems(items);
...@@ -42,7 +41,12 @@ public class LiteOrderManagerImpl implements ILiteOrderManager { ...@@ -42,7 +41,12 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
@Override @Override
public LiteOrder get(String id) { public LiteOrder get(String id) {
return liteOrderDao.findOneById(id); LiteOrder order= liteOrderDao.findOneById(id);
if(order!=null&& order.getOrderItems()==null){
List<LiteOrderItem> items=liteOrderItemManager.findOrderItems(order.getOrderNo());
order.setOrderItems(items);
}
return order;
} }
@Override @Override
......
...@@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; ...@@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date; import java.util.Date;
@Data @Data
public class StoragePosQueryCriteria { public class StoragePosQueryCriteria {
@QueryCondition(blurry = "barcode,posName") @QueryCondition(blurry = "barcode.barcode,posName")
private String blurry; private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate") @QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
...@@ -18,7 +18,7 @@ public class StoragePosQueryCriteria { ...@@ -18,7 +18,7 @@ public class StoragePosQueryCriteria {
@QueryCondition @QueryCondition
private String storageId; private String storageId;
@QueryCondition @QueryCondition(blurry = "barcode.barcode")
private String barcode; private String barcode;
@QueryCondition @QueryCondition
private String posName; private String posName;
......
...@@ -324,5 +324,15 @@ public class DataLog extends BasePo implements Serializable { ...@@ -324,5 +324,15 @@ public class DataLog extends BasePo implements Serializable {
} }
relationCodes.add(relationCode); relationCodes.add(relationCode);
} }
/**
* 判断任务是否异常,执行中,且10分钟未更新的认为异常
*/
public boolean isAbnormal(){
if(isExecuting() ){
if(System.currentTimeMillis() - super.getUpdateDate().getTime() > 10 * 60 * 1000){
return true;
}
}
return false;
}
} }
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!