parent
3857b0c162
commit
48cef0447a
@ -0,0 +1,21 @@
|
||||
package com.chanko.yunxi.mes.module.heli.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 项目订单状态枚举
|
||||
* @author chenxi
|
||||
* @date 2024-01-18 01:19
|
||||
*/
|
||||
@Getter
|
||||
public enum DeliverSubCategoryEnum {
|
||||
DELIVER_LIST("发货清单"),
|
||||
OTHER_LIST("其他清单")
|
||||
;
|
||||
|
||||
private String description;
|
||||
|
||||
DeliverSubCategoryEnum(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.chanko.yunxi.mes.module.heli.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 项目订单状态枚举
|
||||
* @author chenxi
|
||||
* @date 2024-01-18 01:19
|
||||
*/
|
||||
@Getter
|
||||
public enum ProjectOrderDeliverStatusEnum {
|
||||
NOT(1, "未发货"),
|
||||
PART(2, "部分发货"),
|
||||
ALL(3, "全部发货")
|
||||
;
|
||||
|
||||
private int code;
|
||||
private String description;
|
||||
|
||||
ProjectOrderDeliverStatusEnum(int code, String description) {
|
||||
this.code = code;
|
||||
this.description = description;
|
||||
}
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
package com.chanko.yunxi.mes.module.heli.manager;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverordersub.DeliverOrderSubDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverordersub.DeliverOrderSubMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.enums.DeliverOrderStatusEnum;
|
||||
import com.chanko.yunxi.mes.module.heli.enums.ProjectOrderDeliverStatusEnum;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 跨订单状态交互管理器
|
||||
*
|
||||
* @author chenxi
|
||||
* @date 2024-01-31 10:03
|
||||
*/
|
||||
@Component
|
||||
public class CrossOrderStatusManager {
|
||||
|
||||
@Resource
|
||||
private ProjectOrderMapper projectOrderMapper;
|
||||
@Resource
|
||||
private ProjectOrderSubMapper projectOrderSubMapper;
|
||||
@Resource
|
||||
private DeliverOrderSubMapper deliverOrderSubMapper;
|
||||
|
||||
/**
|
||||
* 刷新项目订单发货状态
|
||||
* @param projectOrderIds
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void refreshProjectOrderDeliverStatus(String... projectOrderIds) {
|
||||
// 锁定订单
|
||||
for (String projectOrderId : projectOrderIds) {
|
||||
ProjectOrderDO projectOrderDO = projectOrderMapper.selectOne(new LambdaQueryWrapper<ProjectOrderDO>() {{
|
||||
eq(ProjectOrderDO::getId, projectOrderId);
|
||||
last("LIMIT 1 FOR UPDATE");
|
||||
}});
|
||||
|
||||
// 查询关联子项
|
||||
List<ProjectOrderSubDO> projectOrderSubDOList = projectOrderSubMapper.selectListByProjectOrderId(projectOrderDO.getId());
|
||||
|
||||
// 查询发货记录
|
||||
MPJLambdaWrapper<DeliverOrderSubDO> historyDeliveredSubQuery = new MPJLambdaWrapper<>();
|
||||
historyDeliveredSubQuery.selectAll(DeliverOrderSubDO.class)
|
||||
.leftJoin(DeliverOrderDO.class, DeliverOrderDO::getId, DeliverOrderSubDO::getDeliveryOrderId)
|
||||
.eq(DeliverOrderDO::getDeliverStatus, DeliverOrderStatusEnum.DELIVER.getCode())
|
||||
.in(DeliverOrderSubDO::getSaleOrderSubId, projectOrderSubDOList.stream().map(ProjectOrderSubDO::getId).collect(Collectors.toSet()));
|
||||
List<DeliverOrderSubDO> historyDeliveredSubList = deliverOrderSubMapper.selectList(historyDeliveredSubQuery);
|
||||
if(historyDeliveredSubList.isEmpty()) return;
|
||||
Map<Long, List<DeliverOrderSubDO>> historyDeliveredSubsGroupBySaleSubId = historyDeliveredSubList.stream().collect(Collectors.groupingBy(DeliverOrderSubDO::getSaleOrderSubId));
|
||||
|
||||
// 考虑变更订单情况 只需判断历史发货是否大于等于订单子项数量
|
||||
boolean allDone = projectOrderSubDOList.stream().allMatch(projectOrderSubDO -> {
|
||||
List<DeliverOrderSubDO> historySubList = historyDeliveredSubsGroupBySaleSubId.get(projectOrderSubDO.getId());
|
||||
int historyDeliveredAmount = historySubList == null || historySubList.isEmpty() ? 0 : historySubList.stream().mapToInt(DeliverOrderSubDO::getAmount).sum();
|
||||
return historyDeliveredAmount >= projectOrderSubDO.getAmount();
|
||||
});
|
||||
|
||||
if(allDone){
|
||||
projectOrderDO.setDeliveryStatus(ProjectOrderDeliverStatusEnum.ALL.getCode());
|
||||
}else{
|
||||
projectOrderDO.setDeliveryStatus(ProjectOrderDeliverStatusEnum.PART.getCode());
|
||||
}
|
||||
projectOrderMapper.updateById(projectOrderDO);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in new issue