You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
udi-wms-java/src/main/java/com/glxp/api/req/dev/DeviceChangeOrderParam.java

243 lines
6.5 KiB
Java

2 years ago
package com.glxp.api.req.dev;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
2 years ago
import com.glxp.api.entity.auth.AuthAdmin;
import com.glxp.api.entity.dev.DeviceChangeOrderEntity;
import com.glxp.api.entity.dev.DeviceChangeOrderItemEntity;
import com.glxp.api.enums.dev.DeviceChangeStatusEnum;
import com.glxp.api.enums.dev.DeviceChangeTypeEnum;
import com.glxp.api.exception.JsonException;
import com.glxp.api.util.SnowflakeUtil;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
*/
@Data
public class DeviceChangeOrderParam {
/**
*
*/
@NotNull(message = "类型不能为空")
DeviceChangeTypeEnum type;
/**
*
*/
String toDeptCode;
/**
*
*/
@Length(max = 500, message = "备注最多500个字")
String remark;
@Valid
@NotEmpty(message = "明细不能为空")
List<Item> items;
/**
*
*/
@TableId(value = "orderId")
private Long orderId;
/**
* 1. 2.() 3.4.
*/
private DeviceChangeStatusEnum status;
/**
*
*/
private String deptCode;
/**
* id
*/
private Long confirmUser;
/**
*
*/
private String confirmUserName;
/**
*
*/
private LocalDateTime confirmTime;
/**
*
*/
private String confirmRemark;
/**
*
*/
@TableField(value = "createUserName")
private String createUserName;
/**
* id
*/
@TableField(value = "createUser")
private Long createUser;
/**
*
*/
@TableField(value = "createTime")
private LocalDateTime createTime;
2 years ago
@Data
public static class Item {
/**
*
*/
@NotBlank(message = "设备编码不能为空")
@Pattern(regexp = "^[A-Za-z0-9]{1,20}$", message = "设备编码只能为(大小写字母、数字)组合或其中一项最多20个字符")
private String deviceCode;
/**
* id
*/
// @NotNull(message = "产品id不能为空")
private Long productId;
/**
* UDI
*/
private String udi;
/**
*
*/
private String batchNo;
/**
*
*/
private String serialNo;
/**
*
*/
private LocalDate productionDate;
/**
*
*/
private LocalDate expireDate;
private String ggxh;
private String manufactory;
private String measname;
private String nameCode;
private String productName;
private String zczbhhzbapzbh;
/**
*
*/
private String sourceType;
2 years ago
}
public void valid(AuthAdmin user) {
if (this.type == DeviceChangeTypeEnum.CHANGE) {
if (StrUtil.isBlank(this.toDeptCode)) {
throw new JsonException("请选择目标部门");
} else if (this.toDeptCode.equals(user.getLocDeptCode())) {
throw new JsonException("目标部门不能为当前部门");
}
} else {
this.toDeptCode = user.getLocDeptCode();
items.stream().forEach(i -> {
if (i.getProductId() == null) {
throw new JsonException("产品id不能为空");
}
});
}
Map<String, List<Item>> map = items.stream().collect(Collectors.groupingBy(Item::getDeviceCode));
map.entrySet().stream().forEach(i -> {
if (i.getValue().size() > 1) {
throw new JsonException(500, String.format("设备编码[%s]重复请检查", i.getKey()));
}
});
}
public DeviceChangeOrderEntity getOrderEntity(AuthAdmin user) {
if (orderId != null) {
DeviceChangeOrderEntity deviceChangeOrderEntity = new DeviceChangeOrderEntity();
BeanUtil.copyProperties(this, deviceChangeOrderEntity);
return deviceChangeOrderEntity;
}
2 years ago
DeviceChangeOrderEntity order = DeviceChangeOrderEntity.builder()
.orderId(SnowflakeUtil.getId())
.type(type)
.status(DeviceChangeStatusEnum.WAIT_CONFIRM)
.deptCode(user.getLocDeptCode())
.toDeptCode(toDeptCode)
.remark(remark)
.createUser(user.getId())
.createUserName(user.getEmployeeName())
.createTime(LocalDateTime.now())
.build();
// 新增时状态直接为完成
if (type == DeviceChangeTypeEnum.ADD || type == DeviceChangeTypeEnum.DESTROY) {
order.setStatus(DeviceChangeStatusEnum.FINISH)
.setConfirmTime(order.getCreateTime())
.setConfirmUser(order.getCreateUser())
.setConfirmUserName(order.getCreateUserName())
;
}
return order;
}
public List<DeviceChangeOrderItemEntity> getOrderItemList(Long orderId, AuthAdmin user) {
return items.stream().map(i -> {
DeviceChangeOrderItemEntity itemEntity = new DeviceChangeOrderItemEntity();
if (type == DeviceChangeTypeEnum.ADD) {
BeanUtil.copyProperties(i, itemEntity);
} else {
itemEntity.setDeviceCode(i.getDeviceCode());
}
itemEntity.setOrderId(orderId);
return itemEntity;
}).collect(Collectors.toList());
}
public List<DeviceChangeOrderItemEntity> getDraftOrderItemList(Long orderId, AuthAdmin user) {
return items.stream().map(i -> {
DeviceChangeOrderItemEntity itemEntity = new DeviceChangeOrderItemEntity();
BeanUtil.copyProperties(i, itemEntity);
itemEntity.setOrderId(orderId);
return itemEntity;
}).collect(Collectors.toList());
}
2 years ago
}