Browse Source

修改拆单问题

dev
陈龙 3 days ago
parent
commit
6567a2ee83
  1. 145
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSplitOrderTaskServiceImpl.java
  2. 5
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/vo/DistributionSplitOrderAllTaskVO.java

145
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSplitOrderTaskServiceImpl.java

@ -24,6 +24,7 @@ import com.logpm.distribution.service.IDistributionSplitOrderLogService;
import com.logpm.distribution.service.IDistributionSplitOrderTaskService;
import com.logpm.distribution.service.IDistributionStockArticleService;
import com.logpm.distribution.vo.DistributionSplitOrderAllTaskVO;
import com.logpm.distribution.vo.DistributionSplitOrderTaskVO;
import com.logpm.distribution.vo.SplitPackageOrderVO;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -33,6 +34,7 @@ import org.springblade.common.constant.order.OrderSplitStateConstant;
import org.springblade.common.constant.order.OrderStatusConstant;
import org.springblade.common.constant.orderpackage.*;
import org.springblade.common.exception.CustomerException;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
@ -87,12 +89,29 @@ public class DistributionSplitOrderTaskServiceImpl extends BaseServiceImpl<Distr
}
IPage<DistributionSplitOrderTaskEntity> page = Condition.getPage(query);
List<DistributionSplitOrderTaskEntity> list = list(page, queryWrapper);
page.setRecords(list);
IPage<DistributionSplitOrderTaskVO> pageRes = Condition.getPage(query);
List<DistributionSplitOrderTaskEntity> list = list(page, queryWrapper);
Map<Long, String> userIdNameMap = getUserIdNameMap(list.stream().map(DistributionSplitOrderTaskEntity::getCreateUser).collect(Collectors.toList()));
pageRes.setRecords(list.stream().map(item -> {
DistributionSplitOrderTaskVO distributionSplitOrderTaskVO = new DistributionSplitOrderTaskVO();
BeanUtil.copyProperties(item, distributionSplitOrderTaskVO);
distributionSplitOrderTaskVO.setCreateUserName(userIdNameMap.get(item.getCreateUser()));
return distributionSplitOrderTaskVO;
}).collect(Collectors.toList()));
pageRes.setPages(page.getPages());
pageRes.setTotal(page.getTotal());
return R.data(page);
}
private Map<Long, String> getUserIdNameMap(List<Long> list) {
String createUserIds = list.stream().map((d) -> d + "").collect(Collectors.joining(","));
List<User> users = iUserClient.userInfoByIds(AuthUtil.getTenantId(), String.join(",", createUserIds)).getData();
return users.stream().collect(Collectors.toMap(User::getId, User::getName));
}
@Transactional
@Override
public R<String> batchCreateTask(List<DistributionSplitOrderTaskEntity> distributionSplitOrderTaskList) {
@ -132,6 +151,15 @@ public class DistributionSplitOrderTaskServiceImpl extends BaseServiceImpl<Distr
return R.fail("订单"+ distributionStockArticle.getOrderCode() +"正在拆单中,不允许重复拆单");
}
int taskNumber = distributionSplitOrderTaskList
.stream()
.map(DistributionSplitOrderTaskEntity::getTaskNumber)
.mapToInt(Integer::intValue)
.sum();
if (packageAllowCount < taskNumber) {
return R.fail("拆单数大于订单包件数量,请重新填写,目前可拆单数量:" + packageAllowCount);
}
taskLock(stockArticleId, () -> {
String allTaskNo = getAllTaskNo();
DistributionSplitOrderAllTaskEntity allTask = new DistributionSplitOrderAllTaskEntity();
@ -141,10 +169,7 @@ public class DistributionSplitOrderTaskServiceImpl extends BaseServiceImpl<Distr
allTask.setNumber(distributionSplitOrderTaskList.size());
allTask.setState(OrderSplitStateConstant.InProgress.getValue());
allTask.setMallName(distributionStockArticle.getMallName());
int taskNumber = distributionSplitOrderTaskList.stream()
.map(DistributionSplitOrderTaskEntity::getTaskNumber)
.mapToInt(Integer::intValue)
.sum();
allTask.setOrderPackageNumber(taskNumber);
distributionSplitOrderAllTaskService.save(allTask);
@ -533,66 +558,25 @@ public class DistributionSplitOrderTaskServiceImpl extends BaseServiceImpl<Distr
if (task == null) {
return R.fail("任务不存在");
}
if (!task.getState().equals(OrderSplitStateConstant.InProgress.getValue())) {
return R.fail("拆单任务不在进行中,无法撤销");
}
DistributionSplitOrderAllTaskEntity allTask = distributionSplitOrderAllTaskService.getById(task.getSplitOrderAllTaskId());
if (allTask == null) {
return R.fail("总任务不存在");
}
DistributionStockArticleEntity oldStockArticle = distributionStockArticleService.getById(task.getStockArticleId());
DistributionStockArticleEntity newStockArticle = distributionStockArticleService.getById(task.getNewStockArticleId());
if (oldStockArticle == null) {
oldStockArticle = distributionStockArticleService.getOne(Wrappers.<DistributionStockArticleEntity>lambdaQuery()
.eq(DistributionStockArticleEntity::getId, task.getStockArticleId())
.eq(DistributionStockArticleEntity::getIsDeleted, 1)
);
if (oldStockArticle == null) {
return R.fail("订单错误,无法删除");
}
oldStockArticle.setIsDeleted(0);
}
List<DistributionParcelListEntity> packageList = distributionParcelListService.list(Wrappers.<DistributionParcelListEntity>lambdaQuery()
.eq(DistributionParcelListEntity::getStockArticleId, task.getNewStockArticleId()));
if (packageList.stream().anyMatch(distributionParcelListEntity -> OrderPackageReservationStatusConstant.yiyueyue.getValue().equals(distributionParcelListEntity.getOrderPackageReservationStatus()))) {
return R.fail("新的订单包件已预约,无法删除");
long count = count(
Wrappers.<DistributionSplitOrderTaskEntity>lambdaQuery()
.eq(DistributionSplitOrderTaskEntity::getSplitOrderAllTaskId, task.getSplitOrderAllTaskId())
.in(DistributionSplitOrderTaskEntity::getState, Arrays.asList(OrderSplitStateConstant.InProgress.getValue(), OrderSplitStateConstant.finish.getValue()))
);
if (count == 1) {
return R.fail("总任务下只有一条任务,无法撤销");
}
try {
distributionParcelListService.update(Wrappers.<DistributionParcelListEntity>lambdaUpdate()
.eq(DistributionParcelListEntity::getStockArticleId, task.getNewStockArticleId())
.set(DistributionParcelListEntity::getStockArticleId, task.getStockArticleId())
.set(DistributionParcelListEntity::getOrderCode, task.getOrderCode())
);
if (newStockArticle != null) {
newStockArticle.setTotalNumber(0);
newStockArticle.setHandQuantity(0);
distributionStockArticleService.updateById(newStockArticle);
oldStockArticle.setTotalNumber(oldStockArticle.getTotalNumber() + newStockArticle.getTotalNumber());
oldStockArticle.setHandQuantity(oldStockArticle.getHandQuantity() + newStockArticle.getHandQuantity());
}
distributionStockArticleService.updateById(oldStockArticle);
distributionSplitOrderDetailService.update(Wrappers.<DistributionSplitOrderDetailEntity>lambdaUpdate()
.eq(DistributionSplitOrderDetailEntity::getSplitOrderTaskId, taskId)
.set(DistributionSplitOrderDetailEntity::getState, OrderPackageSplitStateConstant.cancel.getValue())
.set(DistributionSplitOrderDetailEntity::getCancelUser, AuthUtil.getUser().getUserId())
.set(DistributionSplitOrderDetailEntity::getCancelUsername, AuthUtil.getUser().getUserName())
);
distributionSplitOrderLogService.record(task, "取消拆单任务", AuthUtil.getUser().getUserName());
allTask.setNumber(allTask.getNumber() - 1);
allTask.setOrderPackageNumber(allTask.getOrderPackageNumber() - task.getTaskNumber());
distributionSplitOrderAllTaskService.updateById(allTask);
task.setIsDeleted(1);
task.setNumber(0);
updateById(task);
cancelTask(task);
return R.success("success");
} catch (Exception e) {
log.error("取消拆单任务系统错误", e);
@ -607,6 +591,9 @@ public class DistributionSplitOrderTaskServiceImpl extends BaseServiceImpl<Distr
if (task == null) {
return R.fail("拆单任务不存在");
}
if (!task.getState().equals(OrderSplitStateConstant.InProgress.getValue())) {
return R.fail("拆单任务不在进行中,无法取消");
}
long count = distributionSplitOrderDetailService.count(Wrappers.<DistributionSplitOrderDetailEntity>lambdaQuery()
.in(DistributionSplitOrderDetailEntity::getOrderPackageCode, packageCodes)
@ -621,11 +608,6 @@ public class DistributionSplitOrderTaskServiceImpl extends BaseServiceImpl<Distr
msg += "等" + packageCodes.size() + "个包件";
}
if (task.getNumber() == packageCodes.size()) {
distributionSplitOrderLogService.record(task, String.format("取消包件:%s", msg), AuthUtil.getUser().getUserName());
return deleteTask(taskId);
}
try{
distributionSplitOrderDetailService.update(Wrappers.<DistributionSplitOrderDetailEntity>lambdaUpdate()
@ -702,6 +684,10 @@ public class DistributionSplitOrderTaskServiceImpl extends BaseServiceImpl<Distr
newOrder.setTotalNumber(packageList.size());
newOrder.setHandQuantity(packageList.size());
newOrder.setIncomingNum(packageList.size());
newOrder.setCustomerAddress(task.getCustomerAddress());
newOrder.setCustomerName(task.getCustomerName());
newOrder.setCustomerTelephone(task.getCustomerTelephone());
if (newOrder.getId() != null) {
distributionStockArticleService.updateById(newOrder);
}else{
@ -739,19 +725,22 @@ public class DistributionSplitOrderTaskServiceImpl extends BaseServiceImpl<Distr
}
try {
cancelTask(task);
task.setState(OrderSplitStateConstant.InProgress.getValue());
updateById(task);
} catch (Exception e) {
if (e instanceof CustomerException) {
throw new CustomerException(e.getMessage());
}
log.error("撤消拆单任务系统错误", e);
log.error("拆单任务取消完成系统错误", e);
throw new CustomerException("系统错误");
}
return R.success("操作成功");
}
/**
* 撤销任务
*/
public void cancelTask(DistributionSplitOrderTaskEntity task){
task.setState(OrderSplitStateConstant.cancel.getValue());
updateById(task);
@ -915,13 +904,13 @@ public class DistributionSplitOrderTaskServiceImpl extends BaseServiceImpl<Distr
List<DistributionSplitOrderAllTaskEntity> list = distributionSplitOrderAllTaskService.list(page, queryWrapper);
String createUserIds = list.stream().map((d) -> d.getCreateUser() + "").collect(Collectors.joining(","));
List<User> users = iUserClient.userInfoByIds(AuthUtil.getTenantId(), String.join(",", createUserIds)).getData();
Map<Long, User> userMap = users.stream().collect(Collectors.toMap(User::getId, u -> u));
Map<Long, String> userMap = getUserIdNameMap(list.stream().map(DistributionSplitOrderAllTaskEntity::getCreateUser).collect(Collectors.toList()));
Map<Long, Long> allTaskIdPackageNumber = getAllTaskIdPackageNumber(list.stream().map(DistributionSplitOrderAllTaskEntity::getId).collect(Collectors.toList()));
List<DistributionSplitOrderAllTaskVO> listVo = list.stream().map(d -> {
DistributionSplitOrderAllTaskVO vo = new DistributionSplitOrderAllTaskVO();
BeanUtil.copyProperties(d, vo);
vo.setCreateUserName(userMap.get(d.getCreateUser()).getName());
vo.setCreateUserName(userMap.get(d.getCreateUser()));
vo.setSplitPackageNumber(allTaskIdPackageNumber.get(d.getId()));
return vo;
}).collect(Collectors.toList());
@ -932,6 +921,22 @@ public class DistributionSplitOrderTaskServiceImpl extends BaseServiceImpl<Distr
return R.data(pageResult);
}
private Map<Long, Long> getAllTaskIdPackageNumber(List<Long> taskIds){
List<Map<String, Object>> maps = baseMapper.selectMaps(
Wrappers.<DistributionSplitOrderTaskEntity>query()
.select("split_order_all_task_id", "SUM(number) as number")
.eq("split_order_all_task_id", taskIds)
.in("state", OrderSplitStateConstant.InProgress.getValue(), OrderSplitStateConstant.finish.getValue())
.groupBy("split_order_all_task_id")
);
return maps.stream().collect(Collectors.toMap(
m -> Long.valueOf(m.get("split_order_all_task_id").toString()),
m -> Long.valueOf(m.get("number").toString())
));
}
@Override
public R<Object> getTaskDetail(Long taskId) {
R<List<SplitPackageOrderVO>> PackageOrderList = getPackageCodeByTaskId(taskId);

5
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/vo/DistributionSplitOrderAllTaskVO.java

@ -7,5 +7,10 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class DistributionSplitOrderAllTaskVO extends DistributionSplitOrderAllTaskEntity {
private String createUserName;
/**
* 已拆单包件数量
*/
private Long splitPackageNumber;
}

Loading…
Cancel
Save