|
|
|
|
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;
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
|
|
@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;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|