fix(erp): 修复采购计划到货统计准确性问题
- 直接从到货明细重新计算到货/在途统计数据,避免数据库缓存导致的数据不准确 - 更新在途状态判断逻辑,在途等于所有已上传但尚未到货的卷,不论WMS中是否有记录 - 移除未到货状态,未到货的全部计入在途状态 - 立即加载详情而不等待WMS刷新,提升用户体验 - 在WMS钢卷导出功能中添加钢卷ID字段支持
This commit is contained in:
@@ -94,6 +94,28 @@ public class ErpPurchasePlanServiceImpl implements IErpPurchasePlanService {
|
||||
if (vo.getContractCodes() != null && !vo.getContractCodes().isEmpty()) {
|
||||
vo.setContractInfos(baseMapper.selectContractsByOrderCodes(vo.getContractCodes()));
|
||||
}
|
||||
// 直接从到货明细重新计算到货/在途统计,避免 DB 缓存导致数据不准
|
||||
List<ErpPurchasePlanDelivery> deliveries = deliveryMapper.selectList(
|
||||
Wrappers.lambdaQuery(ErpPurchasePlanDelivery.class)
|
||||
.eq(ErpPurchasePlanDelivery::getPlanId, planId));
|
||||
int arrivedCount = 0;
|
||||
int transitCount = 0;
|
||||
BigDecimal arrivedWeight = BigDecimal.ZERO;
|
||||
BigDecimal transitWeight = BigDecimal.ZERO;
|
||||
for (ErpPurchasePlanDelivery d : deliveries) {
|
||||
BigDecimal w = d.getCoilWeight() == null ? BigDecimal.ZERO : d.getCoilWeight();
|
||||
if (d.getArrived() != null && d.getArrived() == 1) {
|
||||
arrivedCount++;
|
||||
arrivedWeight = arrivedWeight.add(w);
|
||||
} else {
|
||||
transitCount++;
|
||||
transitWeight = transitWeight.add(w);
|
||||
}
|
||||
}
|
||||
vo.setArrivedCount(arrivedCount);
|
||||
vo.setArrivedWeight(arrivedWeight);
|
||||
vo.setInTransitCount(transitCount);
|
||||
vo.setInTransitWeight(transitWeight);
|
||||
fillProgress(vo);
|
||||
// 审核历史(含每次驳回理由)
|
||||
vo.setAuditLogs(queryAuditLogs(planId));
|
||||
@@ -372,7 +394,8 @@ public class ErpPurchasePlanServiceImpl implements IErpPurchasePlanService {
|
||||
}
|
||||
String coil = normCoil(row.getCoilNo());
|
||||
boolean arrived = !coil.isEmpty() && arrivedSet.contains(coil);
|
||||
boolean transit = !arrived && !coil.isEmpty() && inTransitSet.contains(coil);
|
||||
// 在途 = 所有已上传但尚未到货的卷(不论 WMS 中是否有记录)
|
||||
boolean transit = !arrived && !coil.isEmpty();
|
||||
ErpPurchasePlanDelivery d = new ErpPurchasePlanDelivery();
|
||||
d.setPlanId(planId);
|
||||
d.setArrived(arrived ? 1 : 0);
|
||||
@@ -537,7 +560,8 @@ public class ErpPurchasePlanServiceImpl implements IErpPurchasePlanService {
|
||||
for (ErpPurchasePlanDelivery d : deliveries) {
|
||||
String coil = normCoil(d.getCoilNo());
|
||||
int nowArrived = !coil.isEmpty() && arrivedSet.contains(coil) ? 1 : 0;
|
||||
int nowTransit = nowArrived == 0 && !coil.isEmpty() && inTransitSet.contains(coil) ? 1 : 0;
|
||||
// 在途 = 所有已上传但尚未到货的卷(不论 WMS 中是否有记录)
|
||||
int nowTransit = nowArrived == 0 && !coil.isEmpty() ? 1 : 0;
|
||||
if (d.getArrived() == null || d.getArrived() != nowArrived
|
||||
|| d.getInTransit() == null || d.getInTransit() != nowTransit) {
|
||||
d.setArrived(nowArrived);
|
||||
@@ -548,7 +572,8 @@ public class ErpPurchasePlanServiceImpl implements IErpPurchasePlanService {
|
||||
if (nowArrived == 1) {
|
||||
arrivedCount++;
|
||||
arrivedWeight = arrivedWeight.add(w);
|
||||
} else if (nowTransit == 1) {
|
||||
} else {
|
||||
// 未到货的全部计入在途
|
||||
transitCount++;
|
||||
transitWeight = transitWeight.add(w);
|
||||
}
|
||||
|
||||
@@ -209,7 +209,9 @@ export default {
|
||||
this.activeTab = 'all'
|
||||
this.current = { ...p }
|
||||
this.deliveryList = []
|
||||
// 打开即静默按钢卷表复核一次到货状态
|
||||
// 立即加载详情,不等待 WMS 刷新
|
||||
this.refreshDetail()
|
||||
// 后台静默按钢卷表复核一次到货状态
|
||||
const planId = p.planId
|
||||
refreshArrival(planId).catch(() => {}).finally(() => {
|
||||
if (this.current.planId === planId) this.refreshDetail()
|
||||
@@ -238,13 +240,11 @@ export default {
|
||||
},
|
||||
statusText(row) {
|
||||
if (row.arrived === 1) return '已到货'
|
||||
if (row.inTransit === 1) return '在途'
|
||||
return '未到'
|
||||
return '在途'
|
||||
},
|
||||
statusClass(row) {
|
||||
if (row.arrived === 1) return 'yes'
|
||||
if (row.inTransit === 1) return 'transit'
|
||||
return 'no'
|
||||
return 'transit'
|
||||
},
|
||||
handleUploadSuccess(res) {
|
||||
if (res.code === 200) {
|
||||
|
||||
@@ -212,6 +212,7 @@ public class WmsMaterialCoilController extends BaseController {
|
||||
columns.put("rawMaterialThickness", "原料厚度");
|
||||
columns.put("chromePlateCoilNo", "工序卷号");
|
||||
columns.put("thicknessDifference", "厚度差");
|
||||
columns.put("coilId", "钢卷ID");
|
||||
return R.ok(columns);
|
||||
}
|
||||
|
||||
|
||||
@@ -190,6 +190,7 @@ public class WmsMaterialCoilExportVo {
|
||||
/**
|
||||
* 钢卷ID 此处不展示在报表只是方便set值
|
||||
*/
|
||||
@ExcelProperty(value = "钢卷ID")
|
||||
private Long coilId;
|
||||
|
||||
/**
|
||||
|
||||
@@ -322,6 +322,7 @@ public class WmsCoilWarehouseOperationLogServiceImpl implements IWmsCoilWarehous
|
||||
exportVo.setManufacturer(coil.getManufacturer());
|
||||
exportVo.setSurfaceTreatmentDesc(coil.getSurfaceTreatmentDesc());
|
||||
exportVo.setZincLayer(coil.getZincLayer());
|
||||
exportVo.setCoilId(coil.getCoilId());
|
||||
exportVo.setCreateTime(coil.getCreateTime());
|
||||
exportVo.setLogicalWarehouseName(coil.getWarehouseName());
|
||||
exportVo.setActualWarehouseName(coil.getActualWarehouseName());
|
||||
|
||||
Reference in New Issue
Block a user