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