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

636 lines
16 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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.fasterxml.jackson.annotation.JsonFormat;
import com.glxp.api.constant.Constant;
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.GennerOrderUtils;
import com.glxp.api.util.OrderNoTypeBean;
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.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 设备变更单
*/
@Data
public class DeviceChangeOrderParam {
/**
* 变更单类型
*/
@NotNull(message = "类型不能为空")
DeviceChangeTypeEnum type;
/**
* 单据号
*/
@TableField(value = "billNo")
private String billNo;
/**
* 目标部门
*/
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;
/**
* 移除类型
*/
private Integer destroyType;
@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 String productionDate;
/**
* 失效日期
*/
private String expireDate;
private String ggxh;
private String manufactory;
private String measname;
private String nameCode;
private String productName;
private String zczbhhzbapzbh;
/**
* 来源类型
*/
private String sourceType;
/**
* 供应商ID
*/
@TableField(value = "supId")
private String supId;
/**
* 供应商名称
*/
@TableField(value = "supName")
private String supName;
/**
* 备注
*/
@TableField(value = "remark")
private String remark;
/**
* 资产分类
*/
@TableField(value = "assetType")
private String assetType;
/**
* 国资分类
*/
@TableField(value = "sasacType")
private String sasacType;
/**
* 资产助记码
*/
@TableField(value = "assetMnemonicCode")
private String assetMnemonicCode;
/**
* 数量
*/
@TableField(value = "number")
private Integer number;
/**
* 取得方式
*/
@TableField(value = "acquisitionMethod")
private String acquisitionMethod;
/**
* 用途
*/
@TableField(value = "purpose")
private String purpose;
/**
* 折旧年
*/
@TableField(value = "depreciationYear")
private Integer depreciationYear;
/**
* 折旧月
*/
@TableField(value = "depreciationMonth")
private Integer depreciationMonth;
/**
* 存储仓库
*/
@TableField(value = "invCode")
private String invCode;
/**
* 预计总工时
*/
@TableField(value = "estimatedTotalHour")
private Integer estimatedTotalHour;
/**
* 单日工时
*/
@TableField(value = "dayHour")
private Integer dayHour;
/**
* 单个资产价值
*/
@TableField(value = "assetValue")
private BigDecimal assetValue;
/**
* 自有资金
*/
@TableField(value = "ownFund")
private BigDecimal ownFund;
/**
* 财政拨款
*/
@TableField(value = "financialAppropriation")
private BigDecimal financialAppropriation;
/**
* 科教基金
*/
@TableField(value = "educationFund")
private BigDecimal educationFund;
/**
* 其他资金
*/
@TableField(value = "otherFund")
private BigDecimal otherFund;
/**
* 非同级财政拨款
*/
@TableField(value = "nonPeerFinancialAppropriation")
private BigDecimal nonPeerFinancialAppropriation;
/**
* 医疗器械分类编码
*/
@TableField(value = "ybbm")
private String ybbm;
/**
* 一级分类名称(学科,品名)
*/
@TableField(value = "catalogname1")
private String catalogname1;
/**
* 二级分类名称(用途、品目)
*/
@TableField(value = "catalogname2")
private String catalogname2;
/**
* 三级分类名称(部位、功能、品种)
*/
@TableField(value = "catalogname3")
private String catalogname3;
/**
* 编码
*/
@TableField(value = "catalogCode")
private String catalogCode;
/**
* 编码
*/
@TableField(value = "catalogCode1")
private Integer catalogCode1;
/**
* 编码
*/
@TableField(value = "catalogCode2")
private Integer catalogCode2;
/**
* 编码
*/
@TableField(value = "catalogCode3")
private Integer catalogCode3;
/**
* 管理类别
*/
@TableField(value = "managementCategory")
private String managementCategory;
/**
* 使用人
*/
@TableField(value = "endUser")
private String endUser;
/**
* 预计残值
*/
@TableField(value = "estimatedResidualValue")
private BigDecimal estimatedResidualValue;
/**
* 币种
*/
@TableField(value = "currencyType")
private String currencyType;
/**
* 采购类型
*/
@TableField(value = "purType")
private String purType;
/**
* 购置日期
*/
@TableField(value = "purchaseDate")
@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
private Date purchaseDate;
/**
* 添加日期
*/
@TableField(value = "addDate")
@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
private Date addDate;
/**
* 资产品名
*/
@TableField(value = "assetName")
private String assetName;
/**
* 是否强检
*/
@TableField(value = "isImperative")
private Boolean isImperative;
/**
* 是否保养
*/
@TableField(value = "isMaintain")
private Boolean isMaintain;
/**
* 检定周期(月)
*/
@TableField(value = "imperativeCycle")
private Integer imperativeCycle;
/**
* 保养周期(月)
*/
@TableField(value = "maintainCycle")
private Integer maintainCycle;
/**
* 开始检定日期
*/
@TableField(value = "startImperativeDate")
@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
private Date startImperativeDate;
/**
* 开始保养日期
*/
@TableField(value = "startMaintainDate")
@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
private Date startMaintainDate;
/**
* 维修组
*/
@TableField(value = "serviceType")
private String serviceType;
/**
* 保养组
*/
@TableField(value = "maintainType")
private String maintainType;
/**
* 管理人
*/
@TableField(value = "managerUser")
private String managerUser;
/**
* 审核人
*/
@TableField(value = "approveUser")
private String approveUser;
/**
* 对应会计科目
*/
@TableField(value = "ledgerAccount")
private String ledgerAccount;
/**
* 减值准备
*/
@TableField(value = "impairmentProvision")
private String impairmentProvision;
/**
* 预计工作量
*/
@TableField(value = "estimatedWorkload")
private String estimatedWorkload;
/**
* 已完成工作量
*/
@TableField(value = "completedWorkload")
private String completedWorkload;
/**
* 维保类型
*/
@TableField(value = "maintenanceType")
private String maintenanceType;
/**
* 维保周期
*/
@TableField(value = "maintenanceCycle")
private Integer maintenanceCycle;
/**
* 维保开始日期
*/
@TableField(value = "startMaintenancDate")
@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
private Date startMaintenancDate;
/**
* 维保结束日期
*/
@TableField(value = "endMaintenancDate")
@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
private Date endMaintenancDate;
/**
* 内外网
*/
@TableField(value = "networkType")
private Integer networkType;
/**
* 使用角色
*/
@TableField(value = "userRole")
private Integer userRole;
/**
* 是否加域
*/
@TableField(value = "isAddDomain")
private Boolean isAddDomain;
/**
* u盘是否禁用
*/
@TableField(value = "isUDisc")
private Boolean isUDisc;
/**
* 设备归类
*/
@TableField(value = "ascriptionType")
private Integer ascriptionType;
/**
* 资产备用类型
*/
@TableField(value = "assetReserveType")
private String assetReserveType;
/**
* 申购订单id外键
*/
@TableField(value = "purApplyBillNo")
private String purApplyBillNo;
/**
* 采购订单id外键
*/
@TableField(value = "purOrderBillNo")
private String purOrderBillNo;
/**
* 采购合同id外键
*/
@TableField(value = "purContractBillNo")
private String purContractBillNo;
/**
* 采购计划id外键
*/
@TableField(value = "purPlanBillNo")
private String purPlanBillNo;
}
public void valid(AuthAdmin user) {
if (StrUtil.isBlank(this.deptCode)) {
throw new JsonException("请选择操作部门");
}
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 (billNo != 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(deptCode)
.toDeptCode(toDeptCode)
.remark(remark)
.destroyType(destroyType)
.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());
}
}