package com.vincent.rsf.server.manager.entity; import com.baomidou.mybatisplus.annotation.*; import java.text.SimpleDateFormat; import java.util.Date; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.server.manager.utils.AreasDeserializer; import com.vincent.rsf.server.manager.utils.AreasSerializer; import com.vincent.rsf.server.manager.utils.AreasTypeHandler; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.vincent.rsf.server.system.entity.DictData; import com.vincent.rsf.server.system.service.DictDataService; import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.SpringUtils; import com.vincent.rsf.server.system.service.UserService; import com.vincent.rsf.server.system.entity.User; import java.io.Serializable; import java.util.List; import java.util.Map; import java.util.ArrayList; import java.util.stream.Collectors; @Data @Accessors(chain = true) @TableName(value = "man_bas_container", autoResultMap = true) public class BasContainer implements Serializable { private static final long serialVersionUID = 1L; /** * id */ @ApiModelProperty(value = "id") @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty("唯一编码") private String code; /** * 容器类型 */ @ApiModelProperty(value = "容器类型") private Long containerType; /** * 容器条码类型 */ @ApiModelProperty(value = "容器条码类型") private String codeType; /** * 可入库区(包含排序信息) * 格式: [{"id": 1, "sort": 1}, {"id": 2, "sort": 2}] */ @ApiModelProperty(value = "可入库区(包含排序信息)") @TableField(typeHandler = AreasTypeHandler.class) @JsonDeserialize(using = AreasDeserializer.class) @JsonSerialize(using = AreasSerializer.class) private List> areas; /** * 是否删除 1: 是 0: 否 */ @ApiModelProperty(value = "是否删除 1: 是 0: 否 ") private Integer deleted; /** * 状态 */ @ApiModelProperty(value = "状态") private Integer status; /** * 租户 */ @ApiModelProperty(value = "租户") private Integer tenantId; /** * 添加人员 */ @ApiModelProperty(value = "添加人员") private Long createBy; /** * 添加时间 */ @ApiModelProperty(value = "添加时间") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; /** * 修改人员 */ @ApiModelProperty(value = "修改人员") private Long updateBy; /** * 修改时间 */ @ApiModelProperty(value = "修改时间") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; /** * 备注 */ @ApiModelProperty(value = "备注") private String memo; public BasContainer() { } public BasContainer(Long containerType, String codeType, List> areas, Integer deleted, Integer status, Integer tenantId, Long createBy, Date createTime, Long updateBy, Date updateTime, String memo) { this.containerType = containerType; this.codeType = codeType; this.areas = areas; this.deleted = deleted; this.status = status; this.tenantId = tenantId; this.createBy = createBy; this.createTime = createTime; this.updateBy = updateBy; this.updateTime = updateTime; this.memo = memo; } // BasContainer basContainer = new BasContainer( // null, // 容器类型 // null, // 容器条码类型 // null, // 可入库区 // null, // 是否删除 // null, // 状态 // null, // 租户 // null, // 添加人员 // null, // 添加时间[非空] // null, // 修改人员 // null, // 修改时间[非空] // null // 备注 // ); public String getContainerType$(){ if (Cools.isEmpty(this.containerType)){ return ""; } DictDataService service = SpringUtils.getBean(DictDataService.class); DictData dictData = service.getOne(new LambdaQueryWrapper() .eq(DictData::getDictTypeCode, "sys_container_type") .eq(DictData::getValue, this.containerType)); if (!Cools.isEmpty(dictData)) { return String.valueOf(dictData.getLabel()); } return ""; } public String getCreateBy$() { UserService service = SpringUtils.getBean(UserService.class); User user = service.getById(this.createBy); if (!Cools.isEmpty(user)) { return String.valueOf(user.getNickname()); } return null; } public String getCreateTime$() { if (Cools.isEmpty(this.createTime)) { return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); } public String getUpdateBy$() { UserService service = SpringUtils.getBean(UserService.class); User user = service.getById(this.updateBy); if (!Cools.isEmpty(user)) { return String.valueOf(user.getNickname()); } return null; } public String getUpdateTime$() { if (Cools.isEmpty(this.updateTime)) { return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); } public Boolean getStatusBool() { if (null == this.status) { return null; } switch (this.status) { case 1: return true; case 0: return false; default: return null; } } /** * 获取排序后的库区ID列表(向后兼容方法) * @return 排序后的库区ID列表 */ public List getAreasIds() { if (Cools.isEmpty(this.areas)) { return new ArrayList<>(); } return this.areas.stream() .sorted((a, b) -> { Integer sortA = a.get("sort") != null ? ((Number) a.get("sort")).intValue() : Integer.MAX_VALUE; Integer sortB = b.get("sort") != null ? ((Number) b.get("sort")).intValue() : Integer.MAX_VALUE; return sortA.compareTo(sortB); }) .map(area -> { Object id = area.get("id"); if (id instanceof Number) { return ((Number) id).intValue(); } return null; }) .filter(id -> id != null) .collect(Collectors.toList()); } /** * 对areas按sort字段进行排序 */ public void sortAreas() { if (this.areas != null && !this.areas.isEmpty()) { this.areas.sort((a, b) -> { Integer sortA = a.get("sort") != null ? ((Number) a.get("sort")).intValue() : Integer.MAX_VALUE; Integer sortB = b.get("sort") != null ? ((Number) b.get("sort")).intValue() : Integer.MAX_VALUE; return sortA.compareTo(sortB); }); } } }