This commit is contained in:
赵辉
2026-02-13 16:54:16 +08:00
parent cb773d1cc8
commit 9793c0fd71
8 changed files with 128 additions and 25 deletions
@@ -701,4 +701,9 @@ public class ReservationOrder {
@ApiModelProperty("业务单号")
private String businessOrderNumber;
@ApiModelProperty("起运时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date departureTime;
}
@@ -36,4 +36,6 @@ public interface IOmsAddressMultiService {
* @return 批量处理结果
*/
Result<?> batchConfirmReservationOrder(List<String> goodsNumbers);
Result<?> batchRejectReservationOrder(List<String> goodsNumbers);
}
@@ -2,12 +2,14 @@ package com.mhd.oms.domain.reservationOrder.repository.po;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
import com.mhd.oms.domain.reservationOrder.entity.ReservationCargoInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* @author: brb
@@ -164,6 +166,26 @@ public class ReservationOrderPO {
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private String carType;
@ApiModelProperty("$column.columnComment")
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private BigDecimal cargoNum;
@ApiModelProperty("$column.columnComment")
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private BigDecimal cargoWeight;
@ApiModelProperty("$column.columnComment")
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private String cargoUnitName;
@ApiModelProperty("$column.columnComment")
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private String cargoContent;
@ApiModelProperty("$column.columnComment")
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private List<ReservationCargoInfo> reservationCargoInfoList;
@ApiModelProperty("$column.columnComment")
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private String carTypeName;
@@ -708,4 +730,9 @@ public class ReservationOrderPO {
@ApiModelProperty("预约单类型")
private String orderType;
@ApiModelProperty("起运时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date departureTime;
}
@@ -237,6 +237,8 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
resevationOrder.setAuditStatus(0);//未审核
resevationOrder.setSzwlUserId(Long.valueOf(swzlUserId));
resevationOrder.setTransitPlace(tmsOrderAddDTO.getTransitPlace());
resevationOrder.setOrderShippingType(tmsOrderAddDTO.getOrderShippingType());
resevationOrder.setDepartureTime(tmsOrderAddDTO.getDepartureTime());
if (resevationOrder.getLoadingDate() != null && resevationOrder.getUnloadingData() != null) {
if (resevationOrder.getUnloadingData().before(resevationOrder.getLoadingDate())) {
throw new ServiceException("装货日期不能大于卸货日期!");
@@ -283,6 +285,7 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
resevationOrder.setAppointShipper(userShipperPoInfo.getShipperEnterpriseName());//20250-07-29修改:订单表委托方保存公司名字,而不是姓名
resevationOrder.setUpdateTime(new Date());
resevationOrder.setUpdateBy(String.valueOf(userShipperPoInfo.getShipperId()));
resevationOrder.setOrderType(0);
String salesmanCodeNc = tmsOrderAddDTO.getSalesmanId();
if (salesmanCodeNc != null) {
String makerCodeNc = tmsOrderServiceImpl.selectByMakerCodeNc(salesmanCodeNc);
@@ -881,9 +884,19 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
}
List<ReservationOrderPO> reservationOrderPOS = reservationOrderDomainService.queryList(omsOrderDTO);
for (ReservationOrderPO reservationOrderPO : reservationOrderPOS){
List<ReservationCargoInfo> reservationCargoInfoList = reservationCargoInfoMapper.selectList(new LambdaQueryWrapper<ReservationCargoInfo>().eq(ReservationCargoInfo::getOrderId, reservationOrderPO.getId()));
if (reservationCargoInfoList != null) {
// reservationOrderPO.setGoodsName(reservationCargoInfo.getGoodsName());
// reservationOrderPO.setCargoNum(reservationCargoInfo.getCargoNum());
// reservationOrderPO.setCargoWeight(reservationCargoInfo.getCargoWeight());
// reservationOrderPO.setCargoContent(reservationCargoInfo.getCargoContent());
// reservationOrderPO.setCargoUnitName(reservationCargoInfo.getCargoUnitName());
reservationOrderPO.setReservationCargoInfoList(reservationCargoInfoList);
}
String route = reservationOrderPO.getRoute();
if (route != null && !route.isEmpty()){
String routeName = reservationAddressMultiMapper.selectRouteNameByRouteId(route);
reservationOrderPO.setRoute(routeName);
}
}
@@ -1066,7 +1079,7 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
@Override
public BusinessDocumentOrderPO confirmReservationOrder(String goodsNumber) {
// 1. 根据预约单号查询预约单信息
LambdaQueryWrapper<ReservationOrder> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ReservationOrder::getGoodsNumber, goodsNumber);
ReservationOrder reservationOrder = resevationOrderMapper.selectOne(queryWrapper);
@@ -1075,18 +1088,18 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
throw new ServiceException("未找到对应的预约单信息");
}
// 2. 检查预约单状态,确保未被确认过
if (reservationOrder.getOrderType() != null && reservationOrder.getOrderType() == 1) {
throw new ServiceException("该预约单已被确认,不能重复确认");
}
// 3. 获取当前登录用户信息
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser == null) {
throw new ServiceException("用户未登录");
}
// 4. 构造业务单数据
BusinessDocumentOrderDO businessDocumentOrderDO = new BusinessDocumentOrderDO();
// 基本信息映射
@@ -1095,19 +1108,16 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
businessDocumentOrderDO.setReviewStatus(0L); // 审核状态:0-未审核
businessDocumentOrderDO.setExecuteStatus(0L); // 执行状态:0-无状态
// 预约单信息映射
businessDocumentOrderDO.setReservationOrderId(reservationOrder.getId());
businessDocumentOrderDO.setReservationOrderNumber(reservationOrder.getGoodsNumber());
// 货物信息映射
businessDocumentOrderDO.setGoodsName(reservationOrder.getGoodsName());
businessDocumentOrderDO.setGoodsTypeId(reservationOrder.getGoodsTypeId());
businessDocumentOrderDO.setWeightMin(reservationOrder.getWeightMin());
businessDocumentOrderDO.setWeightMax(reservationOrder.getWeightMax());
businessDocumentOrderDO.setGoodsUntis(reservationOrder.getGoodsUntis());
businessDocumentOrderDO.setGoodsUntisId(reservationOrder.getGoodsUntisId());
// 地址信息映射
businessDocumentOrderDO.setLoadingName(reservationOrder.getLoadingName());
businessDocumentOrderDO.setLoadingAreaId(reservationOrder.getLoadingAreaId());
businessDocumentOrderDO.setLoadingAddress(reservationOrder.getLoadingAddress());
@@ -1123,8 +1133,6 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
businessDocumentOrderDO.setUnloadLatitude(reservationOrder.getUnloadLatitude());
businessDocumentOrderDO.setUnloadPhone(reservationOrder.getUnloadPhone());
businessDocumentOrderDO.setUnloadingData(reservationOrder.getUnloadingData());
// 其他信息映射
businessDocumentOrderDO.setFreighterName(reservationOrder.getFreighterName());
businessDocumentOrderDO.setDischargerName(reservationOrder.getDischargerName());
businessDocumentOrderDO.setRemarks(reservationOrder.getRemarks());
@@ -1139,29 +1147,27 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
businessDocumentOrderDO.setAppointShipper(reservationOrder.getAppointShipper());
businessDocumentOrderDO.setReceivableType(reservationOrder.getReceivableType() != null ?
reservationOrder.getReceivableType().longValue() : 2L);
// 添加订单类型映射
businessDocumentOrderDO.setOrderShippingType(reservationOrder.getOrderShippingType() != null ?
reservationOrder.getOrderShippingType().longValue() : 1L);
// 组织信息
businessDocumentOrderDO.setOrganizationId(reservationOrder.getOrganizationId());
businessDocumentOrderDO.setOrganizationName(reservationOrder.getOrganizationName());
businessDocumentOrderDO.setTopOrganizationId(reservationOrder.getTopOrganizationId());
businessDocumentOrderDO.setOrgId(reservationOrder.getOrgId());
businessDocumentOrderDO.setOrgName(reservationOrder.getOrgName());
// 创建人信息
businessDocumentOrderDO.setRealCreateBy(String.valueOf(loginUser.getUserid()));
businessDocumentOrderDO.setRealCreateName(loginUser.getUsername());
businessDocumentOrderDO.setCreateBy(loginUser.getUserid());
businessDocumentOrderDO.setCreateByName(loginUser.getUsername());
// 时间信息
businessDocumentOrderDO.setCreateTime(new Date());
businessDocumentOrderDO.setUpdateTime(new Date());
businessDocumentOrderDO.setDocumentDate(new Date());
// 设置默认值,避免空指针异常
if (businessDocumentOrderDO.getOrderShippingType() == null) {
businessDocumentOrderDO.setOrderShippingType(1L); // 默认设置为1
}
@@ -1169,7 +1175,6 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
businessDocumentOrderDO.setInfoFeePayeeType(0L); // 默认设置为0
}
// 5. 直接创建业务单记录(不使用ApplicationService
BusinessDocumentOrder businessDocumentOrder = new BusinessDocumentOrder();
BeanUtils.copyProperties(businessDocumentOrderDO, businessDocumentOrder);
businessDocumentOrder.setId(null); // 确保是新记录
@@ -1184,8 +1189,7 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
throw new ServiceException("创建业务单失败");
}
// 6. 处理货物和地址信息(借鉴BusinessDocumentOrderDomainService的方法)
// 先查询刚创建的业务单ID
LambdaQueryWrapper<BusinessDocumentOrder> orderQueryWrapper = new LambdaQueryWrapper<>();
orderQueryWrapper.eq(BusinessDocumentOrder::getGoodsNumber, businessDocumentOrderDO.getGoodsNumber());
BusinessDocumentOrder createdOrder = businessDocumentOrderService.getOne(orderQueryWrapper);
@@ -1199,7 +1203,7 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
// 处理地址信息(从预约单获取)
handleAddressInfoFromReservation(createdOrder.getId(), reservationOrder.getId());
// 7. 更新预约单状态
// 更新预约单状态
reservationOrder.setOrderType(1); // 设置为业务单类型
reservationOrder.setBusinessOrderId(businessDocumentOrder.getId()); // 关联业务单ID
reservationOrder.setBusinessOrderNumber(businessDocumentOrder.getGoodsNumber()); // 关联业务单号
@@ -1211,7 +1215,7 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
throw new ServiceException("更新预约单状态失败");
}
// 8. 转换并返回业务单PO
BusinessDocumentOrderPO businessDocumentOrderPO = new BusinessDocumentOrderPO();
BeanUtils.copyProperties(businessDocumentOrder, businessDocumentOrderPO);
@@ -1239,8 +1243,9 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
tmsCargoInfo.setOrderId(id);
tmsCargoInfo.setCargoWeight(tmsCargoInfoDTO.getWeight()==null ? BigDecimal.ZERO: tmsCargoInfoDTO.getWeight());
tmsCargoInfo.setCargoVolume(tmsCargoInfoDTO.getMaterialVolume()==null ? BigDecimal.ZERO: tmsCargoInfoDTO.getMaterialVolume());
tmsCargoInfo.setCargoContent(tmsCargoInfoDTO.getMaterialContent());
tmsCargoInfo.setCargoContent(tmsCargoInfoDTO.getCargoContent());
tmsCargoInfo.setCargoNum(tmsCargoInfoDTO.getCargoNum()==null ? BigDecimal.ZERO: tmsCargoInfoDTO.getCargoNum());
tmsCargoInfo.setGoodsName(tmsCargoInfoDTO.getGoodsName());
tmsCargoInfo.setRemark(tmsCargoInfoDTO.getRemark());
tmsCargoInfoList.add(tmsCargoInfo);
}
@@ -1383,7 +1388,43 @@ public class OmsAddressMultiService implements IOmsAddressMultiService {
return errorResult;
}
}
@Override
public Result<?> batchRejectReservationOrder(List<String> goodsNumbers) {
BatchConfirmResult result = new BatchConfirmResult();
result.setTotal(goodsNumbers.size());
result.setSuccessList(new ArrayList<>());
result.setFailList(new ArrayList<>());
// 同步处理,避免线程池问题
for (String goodsNumber : goodsNumbers) {
try {
ReservationOrder reservationOrder = resevationOrderMapper.selectOne(new LambdaQueryWrapper<ReservationOrder>().eq(ReservationOrder::getGoodsNumber, goodsNumber));
reservationOrder.setOrderType(2);
int i = resevationOrderMapper.updateById(reservationOrder);
result.setSuccessCount(result.getSuccessCount() + 1);
} catch (Exception e) {
result.getFailList().add(new BatchConfirmResult.FailItem(goodsNumber, e.getMessage()));
result.setFailCount(result.getFailCount() + 1);
}
}
// 返回成功结果,包含详细的统计信息
if (result.getFailCount() == 0) {
Result<Object> successResult = new Result<>();
successResult.success("批量取消成功");
successResult.setResult(result);
return successResult;
} else {
// 如果有失败项,返回错误状态,包含成功和失败的信息
Result<Object> errorResult = new Result<>();
errorResult.error500("部分取消失败,成功: " + result.getSuccessCount() + ", 失败: " + result.getFailCount());
errorResult.setResult(result);
return errorResult;
}
}
/**
* 从预约单处理货物信息到业务单
*/
@@ -63,7 +63,7 @@ public class OmsCargoInfoDTO implements Serializable {
private BigDecimal materialVolume;
@ApiModelProperty("内容")
private String materialContent;
private String cargoContent;
@ApiModelProperty("是否为库存")
private boolean stockFlag;
@@ -470,6 +470,11 @@ public class OmsOrderAddDTO implements Serializable {
@ApiModelProperty("业务员编码nc")
private String salesmanCodeNc;
@ApiModelProperty("起运时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date departureTime;
@ApiModelProperty(value = "单据日期")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@@ -82,7 +82,7 @@ public class ResevationOrderApi extends BaseController{
}
/**
* 分页查询业务列表
* 分页查询预约列表
*/
@ApiOperation("查询【预约单】列表")
@GetMapping("/list")
@@ -118,5 +118,26 @@ public class ResevationOrderApi extends BaseController{
return result;
}
/**
* 批量驳回预约单
*/
@ApiOperation("批量驳回预约单")
@PostMapping("/batchReject")
public Result<?> batchReject(@RequestBody List<String> goodsNumbers) {
Result<?> result = new Result<>();
try {
if (goodsNumbers == null || goodsNumbers.isEmpty()) {
result.error500("预约单号列表不能为空");
return result;
}
return omsAddressMultiService.batchRejectReservationOrder(goodsNumbers);
} catch (ServiceException e) {
result.error500("批量驳回失败: " + e.getErrorMessage());
} catch (Exception e) {
result.error500("批量驳回失败: " + e.getMessage());
}
return result;
}
}
@@ -7,6 +7,8 @@
<select id="queryList" resultType="com.mhd.oms.domain.reservationOrder.repository.po.ReservationOrderPO">
select * from reservation_order
<include refid="findAll"></include>
order by create_time desc
</select>
<sql id="findAll">