完善收货状态随着流程变化,确保在采购审批后通过后才出现收货状态,添加支付状态和收获状态字段

This commit is contained in:
Mr.j 2025-08-14 15:22:28 +08:00
parent bcb9ce7014
commit f57fe26166
7 changed files with 201 additions and 21 deletions

View File

@ -180,6 +180,12 @@ public class EquipmentEntity extends AuditableEntity implements Serializable {
@ApiModelProperty("采购状态NOT_STARTED-未开始PENDING_APPROVAL-待审批APPROVED-已通过REJECTED-已拒绝COMPLETED-已完成")
private String procurementStatus;
@ApiModelProperty("收货状态NOT_RECEIVED-未收货PARTIALLY_RECEIVED-部分收货RECEIVED-已收货")
private String receiptStatus;
@ApiModelProperty("支付状态NOT_PAID-未支付PARTIALLY_PAID-部分支付PAID-已支付")
private String paymentStatus;
@ApiModelProperty("附件")
private String attachments;

View File

@ -157,6 +157,15 @@ public class EquipmentResp implements Serializable {
@ApiModelProperty("采购状态NOT_STARTED-未开始PENDING_APPROVAL-待审批APPROVED-已通过REJECTED-已拒绝COMPLETED-已完成")
private String procurementStatus;
@ApiModelProperty("收货状态NOT_RECEIVED-未收货PARTIALLY_RECEIVED-部分收货RECEIVED-已收货")
private String receiptStatus;
@ApiModelProperty("支付状态NOT_PAID-未支付PARTIALLY_PAID-部分支付PAID-已支付")
private String paymentStatus;
@ApiModelProperty("审批状态PENDING-待审批APPROVED-已通过REJECTED-已拒绝")
private String approvalStatus;
// 移除备用状态字段使用现有的 location_status 字段
// @ApiModelProperty("备用状态")
// private String spareStatus;

View File

@ -18,6 +18,12 @@ import java.math.BigDecimal;
@ApiModel(value = "收货请求参数", description = "收货请求参数,包含收货信息和设备信息")
public class ReceiptRequest {
@ApiModelProperty("设备序列号(收货时自动生成)")
private String equipmentSn;
@ApiModelProperty("库存条码(收货时自动生成)")
private String inventoryBarcode;
// 收货特有信息
@NotBlank(message = "收货时间不能为空")
@ApiModelProperty("收货时间")
@ -75,9 +81,6 @@ public class ReceiptRequest {
@ApiModelProperty("设备类型")
private String equipmentType;
@ApiModelProperty("设备序列号")
private String equipmentSn;
@ApiModelProperty("品牌")
private String brand;
@ -122,9 +125,6 @@ public class ReceiptRequest {
@ApiModelProperty("负责人")
private String responsiblePerson;
@ApiModelProperty("库存条码")
private String inventoryBarcode;
// 状态信息
@ApiModelProperty("设备状态")
private String equipmentStatus;

View File

@ -0,0 +1,52 @@
package com.dite.znpt.enums;
import cn.hutool.json.JSONObject;
import lombok.Getter;
import java.util.ArrayList;
import java.util.List;
/**
* 支付状态枚举
*
* @author system
* @date 2025-01-08
*/
@Getter
public enum PaymentStatusEnum {
NOT_PAID("NOT_PAID", "未支付"),
PARTIALLY_PAID("PARTIALLY_PAID", "部分支付"),
PAID("PAID", "已支付");
private final String code;
private final String desc;
PaymentStatusEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
public static PaymentStatusEnum getByCode(String code) {
for (PaymentStatusEnum e : PaymentStatusEnum.values()) {
if (e.code.equals(code)) {
return e;
}
}
return null;
}
public static String getDescByCode(String code) {
PaymentStatusEnum e = getByCode(code);
return null == e ? null : e.desc;
}
public static List<JSONObject> listAll() {
List<JSONObject> list = new ArrayList<>(PaymentStatusEnum.values().length);
for (PaymentStatusEnum e : PaymentStatusEnum.values()) {
JSONObject jsonObject = new JSONObject();
jsonObject.set(e.code, e.desc);
list.add(jsonObject);
}
return list;
}
}

View File

@ -0,0 +1,52 @@
package com.dite.znpt.enums;
import cn.hutool.json.JSONObject;
import lombok.Getter;
import java.util.ArrayList;
import java.util.List;
/**
* 收货状态枚举
*
* @author system
* @date 2025-01-08
*/
@Getter
public enum ReceiptStatusEnum {
NOT_RECEIVED("NOT_RECEIVED", "未收货"),
PARTIALLY_RECEIVED("PARTIALLY_RECEIVED", "部分收货"),
RECEIVED("RECEIVED", "已收货");
private final String code;
private final String desc;
ReceiptStatusEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
public static ReceiptStatusEnum getByCode(String code) {
for (ReceiptStatusEnum e : ReceiptStatusEnum.values()) {
if (e.code.equals(code)) {
return e;
}
}
return null;
}
public static String getDescByCode(String code) {
ReceiptStatusEnum e = getByCode(code);
return null == e ? null : e.desc;
}
public static List<JSONObject> listAll() {
List<JSONObject> list = new ArrayList<>(ReceiptStatusEnum.values().length);
for (ReceiptStatusEnum e : ReceiptStatusEnum.values()) {
JSONObject jsonObject = new JSONObject();
jsonObject.set(e.code, e.desc);
list.add(jsonObject);
}
return list;
}
}

View File

@ -478,6 +478,15 @@ public class EquipmentServiceImpl extends ServiceImpl<EquipmentMapper, Equipment
// 设置采购状态字段
resp.setProcurementStatus(entity.getProcurementStatus());
// 设置收货状态和支付状态字段
resp.setReceiptStatus(entity.getReceiptStatus());
resp.setPaymentStatus(entity.getPaymentStatus());
// 设置审批状态根据采购状态推断
// 这里需要注入 EquipmentApprovalService 来获取审批状态
// 暂时根据采购状态推断后续通过关联查询获取
resp.setApprovalStatus(getApprovalStatus(entity.getEquipmentId(), entity.getProcurementStatus()));
// 新增字段转换
resp.setUsingDepartment(entity.getUsingDepartment());
resp.setBorrowingTime(entity.getBorrowingTime());
@ -504,6 +513,34 @@ public class EquipmentServiceImpl extends ServiceImpl<EquipmentMapper, Equipment
return resp;
}
/**
* 获取设备的审批状态
*/
private String getApprovalStatus(String equipmentId, String procurementStatus) {
try {
// 根据采购状态推断审批状态
if (procurementStatus == null) {
return "PENDING_APPROVAL";
}
switch (procurementStatus) {
case "PENDING_APPROVAL":
return "PENDING";
case "APPROVED":
return "APPROVED";
case "REJECTED":
return "REJECTED";
case "COMPLETED":
return "APPROVED"; // 已完成表示之前已审批通过
default:
return "PENDING_APPROVAL";
}
} catch (Exception e) {
log.warn("获取设备审批状态失败设备ID: {}, 错误: {}", equipmentId, e.getMessage());
return "PENDING_APPROVAL"; // 出错时返回待审批状态
}
}
// 采购管理相关方法实现
@Override
@ -866,7 +903,7 @@ public class EquipmentServiceImpl extends ServiceImpl<EquipmentMapper, Equipment
// 设置收货相关信息
if (StringUtils.hasText(req.getReceiptTime())) {
try {
equipment.setInStockTime(LocalDateTime.parse(req.getReceiptTime()));
equipment.setInStockTime(LocalDateTime.parse(req.getReceiptTime().replace(" ", "T")));
} catch (Exception e) {
log.warn("解析收货时间失败,使用当前时间: {}", req.getReceiptTime());
equipment.setInStockTime(LocalDateTime.now());
@ -875,7 +912,17 @@ public class EquipmentServiceImpl extends ServiceImpl<EquipmentMapper, Equipment
equipment.setInStockTime(LocalDateTime.now());
}
// 设置入库位置信息
// 设置收货状态为已收货
equipment.setReceiptStatus("RECEIVED");
// 设置采购状态为已完成而不是已收货
equipment.setProcurementStatus("COMPLETED");
// 设置设备状态为库存中
equipment.setLocationStatus("in_stock");
equipment.setUseStatus("0"); // 空闲中
// 设置其他收货相关字段
if (StringUtils.hasText(req.getStorageLocation())) {
equipment.setPhysicalLocation(req.getStorageLocation());
}
@ -883,30 +930,44 @@ public class EquipmentServiceImpl extends ServiceImpl<EquipmentMapper, Equipment
equipment.setResponsiblePerson(req.getStorageManager());
}
// 设置状态信息
equipment.setLocationStatus("in_stock");
equipment.setEquipmentStatus("normal");
equipment.setUseStatus("0");
equipment.setHealthStatus("good");
// 记录收货人信息到资产备注中
if (StringUtils.hasText(req.getReceiptPerson())) {
String currentRemark = procurementRecord.getAssetRemark();
String receiptInfo = String.format("收货人:%s收货时间%s",
req.getReceiptPerson(),
req.getReceiptTime() != null ? req.getReceiptTime() : LocalDateTime.now().toString());
if (StringUtils.hasText(currentRemark)) {
equipment.setAssetRemark(currentRemark + "" + receiptInfo);
} else {
equipment.setAssetRemark(receiptInfo);
}
}
// 设置设备序列号如果收货时生成了新的
if (StringUtils.hasText(req.getEquipmentSn())) {
equipment.setEquipmentSn(req.getEquipmentSn());
}
// 设置库存条码
if (StringUtils.hasText(req.getInventoryBarcode())) {
equipment.setInventoryBarcode(req.getInventoryBarcode());
} else if (StringUtils.hasText(procurementRecord.getInventoryBarcode())) {
equipment.setInventoryBarcode(procurementRecord.getInventoryBarcode());
}
// 设置系统字段
// 设置更新时间和操作人
equipment.setUpdateTime(LocalDateTime.now());
equipment.setUpdateBy(StpUtil.getLoginIdAsString());
log.info("准备更新设备记录设备ID: {}, 收货状态: {}, 采购状态: {}",
equipmentId, equipment.getReceiptStatus(), equipment.getProcurementStatus());
// 3. 更新设备记录
boolean success = this.updateById(equipment);
if (!success) {
boolean updateResult = this.updateById(equipment);
if (!updateResult) {
throw new ServiceException("更新设备记录失败");
}
log.info("设备收货和入库完成设备ID: {}, 入库时间: {}, 位置: {}",
equipmentId, equipment.getInStockTime(), equipment.getPhysicalLocation());
log.info("设备收货和入库成功设备ID: {}, 收货状态: {}, 采购状态: {}",
equipmentId, equipment.getReceiptStatus(), equipment.getProcurementStatus());
}
}

View File

@ -14,7 +14,7 @@ spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://39.99.201.243:3306/znpt_dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
url: jdbc:mysql://39.99.201.243:3306/test01?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: BUw8YW6%@^8q
druid: