用车需求合并,拆分

This commit is contained in:
王帅 2025-06-10 10:20:58 +08:00
parent f4717672de
commit d81634f69d
21 changed files with 640 additions and 34 deletions

View File

@ -8,6 +8,6 @@
and a.car_long = b.car_long and a.car_long = b.car_long
where a.start_city = #{pickUpHub} where a.start_city = #{pickUpHub}
and a.target_city = #{deliveryAddress} and a.target_city = #{deliveryAddress}
and a.failureTime >= TRUNC(SYSDATE) and a.failure_time >= TRUNC(SYSDATE)
</select> </select>
</mapper> </mapper>

View File

@ -15,4 +15,5 @@ import org.jeecg.modules.tms.basicdata.logisticsroute.entity.LogisticsRoute;
*/ */
public interface LogisticsRouteMapper extends BaseMapper<LogisticsRoute> { public interface LogisticsRouteMapper extends BaseMapper<LogisticsRoute> {
Integer getDistance(String pickUpHub, String deliveryAddress);
} }

View File

@ -2,4 +2,9 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.tms.basicdata.logisticsroute.mapper.LogisticsRouteMapper"> <mapper namespace="org.jeecg.modules.tms.basicdata.logisticsroute.mapper.LogisticsRouteMapper">
<select id="getDistance" resultType="java.lang.Integer">
SELECT kilometers FROM tms_logistics_route WHERE
start_city = #{pickUpHub}
AND target_city = #{deliveryAddress}
</select>
</mapper> </mapper>

View File

@ -25,6 +25,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.tms.constant.TmsConstants;
import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ExportParams;
@ -185,9 +186,9 @@ public class VehicleInOutController extends JeecgController<VehicleInOut, IVehic
if (vehicleInOut.getCurrentStatus() != null && Integer.parseInt(vehicleInOut.getCurrentStatus()) <= Integer.parseInt(byId.getCurrentStatus())) { if (vehicleInOut.getCurrentStatus() != null && Integer.parseInt(vehicleInOut.getCurrentStatus()) <= Integer.parseInt(byId.getCurrentStatus())) {
return Result.error("操作失败,请按照流程操作!"); return Result.error("操作失败,请按照流程操作!");
} }
if ("3".equals(vehicleInOut.getCurrentStatus())) { if (TmsConstants.currentStatus_3.equals(vehicleInOut.getCurrentStatus())) {
vehicleInOut.setAtaTime(new Date()); vehicleInOut.setAtaTime(new Date());
} else if ("4".equals(vehicleInOut.getCurrentStatus())) { } else if (TmsConstants.currentStatus_4.equals(vehicleInOut.getCurrentStatus())) {
vehicleInOut.setAtdTime(new Date()); vehicleInOut.setAtdTime(new Date());
} }
vehicleInOutService.updateById(vehicleInOut); vehicleInOutService.updateById(vehicleInOut);
@ -214,7 +215,7 @@ public class VehicleInOutController extends JeecgController<VehicleInOut, IVehic
vehicleInOut.setId(null) vehicleInOut.setId(null)
.setCreateTime(null) .setCreateTime(null)
.setCreateBy(null) .setCreateBy(null)
.setCurrentStatus("1") .setCurrentStatus(TmsConstants.currentStatus_1)
.setPo(vehicleInOut.getPo()) .setPo(vehicleInOut.getPo())
.setVehicleDemandCountId(vehicleInOut.getId()); .setVehicleDemandCountId(vehicleInOut.getId());
vehicleInOutService.save(vehicleInOut); vehicleInOutService.save(vehicleInOut);

View File

@ -0,0 +1,18 @@
package org.jeecg.modules.tms.constant;
/**
* @Description
* @Author admin
* @Date 2025/6/10 8:41
*/
public class TmsConstants {
public static String currentStatus_0 = "0";
public static String currentStatus_1 = "1";
public static String currentStatus_2 = "2";
public static String currentStatus_3 = "3";
public static String currentStatus_4 = "4";
public static String shipType_0 = "0";
public static String shipType_1 = "1";
public static String shipType_2 = "2";
}

View File

@ -129,11 +129,14 @@ public class DeliveryDemandController extends JeecgController<DeliveryDemand, ID
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody DeliveryDemand deliveryDemand) { public Result<String> edit(@RequestBody DeliveryDemand deliveryDemand) {
deliveryDemandService.updateById(deliveryDemand); deliveryDemandService.updateById(deliveryDemand);
LambdaQueryWrapper<DeliveryDemandDetail> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(DeliveryDemandDetail::getDeliveryDemandId, deliveryDemand.getId());
deliveryDemandDetailService.remove(lambdaQueryWrapper);
List<DeliveryDemandDetail> deliveryDemandDetailList = deliveryDemand.getDeliveryDemandDetailList(); List<DeliveryDemandDetail> deliveryDemandDetailList = deliveryDemand.getDeliveryDemandDetailList();
deliveryDemandDetailList.forEach(item ->{ deliveryDemandDetailList.forEach(item ->{
item.setDeliveryDemandId(deliveryDemand.getId()); item.setDeliveryDemandId(deliveryDemand.getId());
}); });
deliveryDemandDetailService.saveOrUpdateBatch(deliveryDemandDetailList); deliveryDemandDetailService.saveBatch(deliveryDemandDetailList);
return Result.OK("编辑成功!"); return Result.OK("编辑成功!");
} }

View File

@ -16,7 +16,6 @@ import org.jeecg.modules.tms.outbound.deliverydemanddetail.entity.DeliveryDemand
*/ */
public interface DeliveryDemandMapper extends BaseMapper<DeliveryDemand> { public interface DeliveryDemandMapper extends BaseMapper<DeliveryDemand> {
void updateCurrentStatus(@Param("shipType") String shipType, void updateCurrentStatus(@Param("shipType") String shipType,
@Param("pn") String pn,
@Param("deliveryAddress") String deliveryAddress, @Param("deliveryAddress") String deliveryAddress,
@Param("pickUpHub") String pickUpHub, @Param("pickUpHub") String pickUpHub,
@Param("shipDate") Date shipDate, @Param("shipDate") Date shipDate,

View File

@ -6,7 +6,6 @@
update tms_delivery_demand update tms_delivery_demand
set current_status = '1', vd_no = #{sequence} set current_status = '1', vd_no = #{sequence}
where ship_type = #{shipType} where ship_type = #{shipType}
and pn = #{pn}
and delivery_address = #{deliveryAddress} and delivery_address = #{deliveryAddress}
and pick_up_hub = #{pickUpHub} and pick_up_hub = #{pickUpHub}
and ship_date = #{shipDate} and ship_date = #{shipDate}

View File

@ -22,6 +22,12 @@ public interface IDeliveryDemandService extends IService<DeliveryDemand> {
*/ */
Result<?> handleMerge(List<String> ids); Result<?> handleMerge(List<String> ids);
/**
* 定时合并
* @return
*/
void timedMerge();
/** /**
* 根据料号规格发货数量计算托盘数 * 根据料号规格发货数量计算托盘数
* @param deliveryDemands * @param deliveryDemands

View File

@ -10,6 +10,7 @@ import org.jeecg.modules.tms.basicdata.constant.GeneralSequenceConstant;
import org.jeecg.modules.tms.basicdata.generalsequence.service.IGeneralSequenceService; import org.jeecg.modules.tms.basicdata.generalsequence.service.IGeneralSequenceService;
import org.jeecg.modules.tms.basicdata.vehicleproduct.entity.TmsVehicleProduct; import org.jeecg.modules.tms.basicdata.vehicleproduct.entity.TmsVehicleProduct;
import org.jeecg.modules.tms.basicdata.vehicleproduct.mapper.TmsVehicleProductMapper; import org.jeecg.modules.tms.basicdata.vehicleproduct.mapper.TmsVehicleProductMapper;
import org.jeecg.modules.tms.constant.TmsConstants;
import org.jeecg.modules.tms.outbound.deliverydemand.entity.DeliveryDemand; import org.jeecg.modules.tms.outbound.deliverydemand.entity.DeliveryDemand;
import org.jeecg.modules.tms.outbound.deliverydemand.mapper.DeliveryDemandMapper; import org.jeecg.modules.tms.outbound.deliverydemand.mapper.DeliveryDemandMapper;
import org.jeecg.modules.tms.outbound.deliverydemand.service.IDeliveryDemandService; import org.jeecg.modules.tms.outbound.deliverydemand.service.IDeliveryDemandService;
@ -45,32 +46,32 @@ public class DeliveryDemandServiceImpl extends ServiceImpl<DeliveryDemandMapper,
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result<?> handleMerge(List<String> ids) { public Result<?> handleMerge(List<String> ids) {
List<DeliveryDemand> deliveryDemands = deliveryDemandMapper.selectBatchIds(ids); List<DeliveryDemand> deliveryDemands = deliveryDemandMapper.selectBatchIds(ids);
boolean hasEven = deliveryDemands.stream().anyMatch(item -> "0".equals(item.getShipType())); boolean hasEven = deliveryDemands.stream().anyMatch(item -> TmsConstants.shipType_2.equals(item.getShipType()));
if (hasEven) { if (hasEven) {
return Result.error("数据中含有整车数据!"); return Result.error("数据中含有快递数据!");
} }
boolean hasEven1 = deliveryDemands.stream().anyMatch(item -> !"0".equals(item.getCurrentStatus())); boolean hasEven1 = deliveryDemands.stream().anyMatch(item -> !TmsConstants.currentStatus_0.equals(item.getCurrentStatus()));
if (hasEven1) { if (hasEven1) {
return Result.error("数据中含有当前状态不是创建的数据!"); return Result.error("数据中含有当前状态不是创建的数据!");
} }
// 将需要合并的数据进行分组 shipType, pn, deliveryAddress, pickUpHub 为key // 将需要合并的数据进行分组 shipType, deliveryAddress, pickUpHub, shipDate 为key
Map<String, VehicleDemand> mergedMap = deliveryDemands.stream() Map<String, VehicleDemand> mergedMap = deliveryDemands.stream()
.collect(Collectors.toMap( .collect(Collectors.toMap(
demand -> String.format("%s|%s|%s|%s|%s", demand -> String.format("%s|%s|%s|%s",
demand.getShipType(), demand.getShipType(),
demand.getPn(),
demand.getDeliveryAddress(), demand.getDeliveryAddress(),
demand.getPickUpHub(), demand.getPickUpHub(),
demand.getShipDate()), demand.getShipDate()),
demand -> { demand -> {
VehicleDemand merged = new VehicleDemand(); VehicleDemand merged = new VehicleDemand();
merged.setShipType(demand.getShipType()); merged.setShipType(demand.getShipType());
merged.setPn(demand.getPn());
merged.setDeliveryAddress(demand.getDeliveryAddress()); merged.setDeliveryAddress(demand.getDeliveryAddress());
merged.setPickUpHub(demand.getPickUpHub()); merged.setPickUpHub(demand.getPickUpHub());
merged.setShipDate(demand.getShipDate()); merged.setShipDate(demand.getShipDate());
merged.setTotalPallets(demand.getPalletsNum()); merged.setTotalPallets(demand.getPalletsNum());
merged.setPreTotalPallets(demand.getPalletsNum());
merged.setTotalShips(demand.getShipNumber()); merged.setTotalShips(demand.getShipNumber());
merged.setDeliveryDate(demand.getDeliveryDate());
return merged; return merged;
}, (merged1, merged2) -> { }, (merged1, merged2) -> {
merged1.setTotalPallets( merged1.setTotalPallets(
@ -90,24 +91,83 @@ public class DeliveryDemandServiceImpl extends ServiceImpl<DeliveryDemandMapper,
VehicleDemand value = entry.getValue(); // 合并后的值 VehicleDemand value = entry.getValue(); // 合并后的值
String[] parts = key.split("\\|"); String[] parts = key.split("\\|");
String shipType = parts[0]; String shipType = parts[0];
String pn = parts[1]; String deliveryAddress = parts[1];
String deliveryAddress = parts[2]; String pickUpHub = parts[2];
String pickUpHub = parts[3]; Date shipDate = DateUtil.parse(parts[3], "EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
Date shipDate = DateUtil.parse(parts[4], "EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
String sequence = generalSequenceService.getSequence(GeneralSequenceConstant.VEHICLE_DEMAND_NO); String sequence = generalSequenceService.getSequence(GeneralSequenceConstant.VEHICLE_DEMAND_NO);
deliveryDemandMapper.updateCurrentStatus(shipType, pn, deliveryAddress, pickUpHub, shipDate, sequence); deliveryDemandMapper.updateCurrentStatus(shipType, deliveryAddress, pickUpHub, shipDate, sequence);
value.setShipType(shipType) value.setShipType(shipType)
.setPn(pn)
.setDeliveryAddress(deliveryAddress) .setDeliveryAddress(deliveryAddress)
.setPickUpHub(pickUpHub) .setPickUpHub(pickUpHub)
.setShipDate(shipDate) .setShipDate(shipDate)
.setVdNo(sequence); .setVdNo(sequence)
.setCurrentStatus(TmsConstants.currentStatus_0);
vehicleDemands.add(value); vehicleDemands.add(value);
} }
vehicleDemandService.saveBatch(vehicleDemands); vehicleDemandService.saveBatch(vehicleDemands);
return Result.OK("合并成功!"); return Result.OK("合并成功!");
} }
@Override
@Transactional(rollbackFor = Exception.class)
public void timedMerge() {
LambdaQueryWrapper<DeliveryDemand> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(DeliveryDemand::getCurrentStatus, TmsConstants.currentStatus_0);
lambdaQueryWrapper.ne(DeliveryDemand::getShipType, TmsConstants.shipType_2);
List<DeliveryDemand> deliveryDemands = deliveryDemandMapper.selectList(lambdaQueryWrapper);
// 将需要合并的数据进行分组 shipType, deliveryAddress, pickUpHub, shipDate 为key
Map<String, VehicleDemand> mergedMap = deliveryDemands.stream()
.collect(Collectors.toMap(
demand -> String.format("%s|%s|%s|%s",
demand.getShipType(),
demand.getDeliveryAddress(),
demand.getPickUpHub(),
demand.getShipDate()),
demand -> {
VehicleDemand merged = new VehicleDemand();
merged.setShipType(demand.getShipType());
merged.setDeliveryAddress(demand.getDeliveryAddress());
merged.setPickUpHub(demand.getPickUpHub());
merged.setShipDate(demand.getShipDate());
merged.setTotalPallets(demand.getPalletsNum());
merged.setPreTotalPallets(demand.getPalletsNum());
merged.setTotalShips(demand.getShipNumber());
merged.setDeliveryDate(demand.getDeliveryDate());
return merged;
}, (merged1, merged2) -> {
merged1.setTotalPallets(
(merged1.getTotalPallets() == null ? 0 : merged1.getTotalPallets()) +
(merged2.getTotalPallets() == null ? 0 : merged2.getTotalPallets())
);
merged1.setTotalShips(
(merged1.getTotalShips() == null ? 0 : merged1.getTotalShips()) +
(merged2.getTotalShips() == null ? 0 : merged2.getTotalShips())
);
return merged1;
}
));
List<VehicleDemand> vehicleDemands = new ArrayList<>();
for (Map.Entry<String, VehicleDemand> entry : mergedMap.entrySet()) {
String key = entry.getKey(); // 拼接的键
VehicleDemand value = entry.getValue(); // 合并后的值
String[] parts = key.split("\\|");
String shipType = parts[0];
String deliveryAddress = parts[1];
String pickUpHub = parts[2];
Date shipDate = DateUtil.parse(parts[3], "EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
String sequence = generalSequenceService.getSequence(GeneralSequenceConstant.VEHICLE_DEMAND_NO);
deliveryDemandMapper.updateCurrentStatus(shipType, deliveryAddress, pickUpHub, shipDate, sequence);
value.setShipType(shipType)
.setDeliveryAddress(deliveryAddress)
.setPickUpHub(pickUpHub)
.setShipDate(shipDate)
.setVdNo(sequence)
.setCurrentStatus(TmsConstants.currentStatus_0);
vehicleDemands.add(value);
}
vehicleDemandService.saveBatch(vehicleDemands);
}
@Override @Override
public Result<?> getPalletsNum(List<DeliveryDemand> deliveryDemands) { public Result<?> getPalletsNum(List<DeliveryDemand> deliveryDemands) {
BigDecimal results = BigDecimal.ZERO; BigDecimal results = BigDecimal.ZERO;

View File

@ -1,5 +1,6 @@
package org.jeecg.modules.tms.outbound.vehicledemand.controller; package org.jeecg.modules.tms.outbound.vehicledemand.controller;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -10,9 +11,15 @@ import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils; import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.tms.basicdata.constant.GeneralSequenceConstant;
import org.jeecg.modules.tms.basicdata.generalsequence.service.IGeneralSequenceService;
import org.jeecg.modules.tms.basicdata.logisticsroute.mapper.LogisticsRouteMapper;
import org.jeecg.modules.tms.constant.TmsConstants;
import org.jeecg.modules.tms.outbound.deliverydemand.service.IDeliveryDemandService; import org.jeecg.modules.tms.outbound.deliverydemand.service.IDeliveryDemandService;
import org.jeecg.modules.tms.outbound.vehicledemand.entity.VehicleDemand; import org.jeecg.modules.tms.outbound.vehicledemand.entity.VehicleDemand;
import org.jeecg.modules.tms.outbound.vehicledemand.service.IVehicleDemandService; import org.jeecg.modules.tms.outbound.vehicledemand.service.IVehicleDemandService;
@ -23,6 +30,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.tms.outbound.vehicledemandcount.service.IVehicleDemandCountService; import org.jeecg.modules.tms.outbound.vehicledemandcount.service.IVehicleDemandCountService;
import org.jeecg.modules.tms.outbound.vehicledemandhis.entity.VehicleDemandHis;
import org.jeecg.modules.tms.outbound.vehicledemandhis.service.IVehicleDemandHisService;
import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ExportParams;
@ -57,6 +66,12 @@ public class VehicleDemandController extends JeecgController<VehicleDemand, IVeh
private IVehicleDemandCountService vehicleDemandCountService; private IVehicleDemandCountService vehicleDemandCountService;
@Autowired @Autowired
private IDeliveryDemandService deliveryDemandService; private IDeliveryDemandService deliveryDemandService;
@Autowired
private IVehicleDemandHisService vehicleDemandHisService;
@Autowired
private IGeneralSequenceService generalSequenceService;
@Autowired
private LogisticsRouteMapper logisticsRouteMapper;
/** /**
* 分页列表查询 * 分页列表查询
@ -204,4 +219,117 @@ public class VehicleDemandController extends JeecgController<VehicleDemand, IVeh
public Result<?> carCount(@RequestBody VehicleDemand vehicleDemand) { public Result<?> carCount(@RequestBody VehicleDemand vehicleDemand) {
return vehicleDemandService.carCount(vehicleDemand); return vehicleDemandService.carCount(vehicleDemand);
} }
/**
* 手动合并
* @param ids
* @return
*/
@Transactional(rollbackFor = Exception.class)
@PostMapping("/handleMerge")
public Result<?> handleMerge(@RequestBody List<String> ids) {
List<VehicleDemand> vehicleDemands = vehicleDemandService.listByIds(ids);
boolean hasEven = vehicleDemands.stream().anyMatch(item -> !TmsConstants.currentStatus_0.equals(item.getCurrentStatus()));
if (hasEven) {
return Result.error("数据中含有不是创建状态的数据!");
}
List<VehicleDemandHis> vehicleDemandHisList = BeanUtil.copyToList(vehicleDemands, VehicleDemandHis.class);
Map<String, VehicleDemand> collect = vehicleDemands.stream()
.collect(Collectors.toMap(
vehicleDemand -> String.format("%s|%s",
vehicleDemand.getShipDate(),
vehicleDemand.getShipType()),
vehicleDemand -> {
VehicleDemand merged = new VehicleDemand();
merged.setShipType(vehicleDemand.getShipType());
merged.setDeliveryAddress(vehicleDemand.getDeliveryAddress());
merged.setPickUpHub(vehicleDemand.getPickUpHub());
Integer distance = logisticsRouteMapper.getDistance(vehicleDemand.getPickUpHub(),
vehicleDemand.getDeliveryAddress());
merged.setDistance(distance);
merged.setShipDate(vehicleDemand.getShipDate());
merged.setTotalPallets(vehicleDemand.getTotalPallets());
merged.setPreTotalPallets(vehicleDemand.getPreTotalPallets());
merged.setTotalShips(vehicleDemand.getTotalShips());
merged.setDeliveryDate(vehicleDemand.getDeliveryDate());
return merged;
}, (merged1, merged2) -> {
// 默认策略保留距离更长的那个对象的 pickupHub / deliveryAddress
VehicleDemand longer;
if (merged1.getDistance() == null && merged2.getDistance() == null) {
longer = merged1; // 都为 null默认选 merged1
} else if (merged1.getDistance() == null) {
longer = merged2;
} else if (merged2.getDistance() == null) {
longer = merged1;
} else {
longer = merged1.getDistance() >= merged2.getDistance() ? merged1 : merged2;
}
// 保留距离大的那组 pickupHub/deliveryAddress
merged1.setPickUpHub(longer.getPickUpHub());
merged1.setDeliveryAddress(longer.getDeliveryAddress());
merged1.setTotalPallets(
(merged1.getTotalPallets() == null ? 0 : merged1.getTotalPallets()) +
(merged2.getTotalPallets() == null ? 0 : merged2.getTotalPallets())
);
merged1.setPreTotalPallets(
(merged1.getPreTotalPallets() == null ? 0 : merged1.getPreTotalPallets()) +
(merged2.getPreTotalPallets() == null ? 0 : merged2.getPreTotalPallets())
);
merged1.setTotalShips(
(merged1.getTotalShips() == null ? 0 : merged1.getTotalShips()) +
(merged2.getTotalShips() == null ? 0 : merged2.getTotalShips())
);
return merged1;
}
));
List<VehicleDemand> vehicleDemandList = new ArrayList<>();
for (Map.Entry<String, VehicleDemand> entry : collect.entrySet()) {
String key = entry.getKey();
VehicleDemand value = entry.getValue(); // 合并后的值
String sequence = generalSequenceService.getSequence(GeneralSequenceConstant.VEHICLE_DEMAND_NO);
value.setVdNo(sequence)
.setCurrentStatus(TmsConstants.currentStatus_1);
vehicleDemandList.add(value);
vehicleDemandHisList.forEach(item -> {
if (key.equals(String.format("%s|%s",
item.getShipDate(),
item.getShipType()))) {
item.setVdNoNew(sequence);
}
});
}
// 生成新的用车需求
vehicleDemandService.saveBatch(vehicleDemandList);
// 删除旧的用车需求
vehicleDemandService.removeBatchByIds(vehicleDemands);
// 保存旧的用车需求到历史记录
vehicleDemandHisService.saveBatch(vehicleDemandHisList);
return Result.OK("合并成功!");
}
/**
* 解绑
* @param ids
* @return
*/
@PostMapping("/handleUnbind")
public Result<?> handleUnbind(@RequestBody List<String> ids) {
List<VehicleDemand> vehicleDemands = vehicleDemandService.listByIds(ids);
List<String> vdNoNews = vehicleDemands.stream()
.map(VehicleDemand::getVdNo)
.collect(Collectors.toList());
LambdaQueryWrapper<VehicleDemandHis> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(VehicleDemandHis::getVdNoNew, vdNoNews);
List<VehicleDemandHis> list = vehicleDemandHisService.list(lambdaQueryWrapper);
List<VehicleDemand> vehicleDemandList = BeanUtil.copyToList(list, VehicleDemand.class);
// 恢复原来合并删除的数据
vehicleDemandService.saveBatch(vehicleDemandList);
// 删除合并的数据
vehicleDemandService.removeBatchByIds(ids);
// 删除历史记录
vehicleDemandHisService.removeByIds(list);
return Result.OK("解绑成功!");
}
} }

View File

@ -4,10 +4,8 @@ import java.io.Serializable;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.util.Date; import java.util.Date;
import java.math.BigDecimal; import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data; import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@ -61,6 +59,12 @@ public class VehicleDemand implements Serializable {
@DateTimeFormat(pattern="yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "发货日期") @ApiModelProperty(value = "发货日期")
private Date shipDate; private Date shipDate;
/**到货日期*/
@Excel(name = "到货日期", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "到货日期")
private Date deliveryDate;
/**发货类型*/ /**发货类型*/
@Excel(name = "发货类型", width = 15, dicCode = "ship_type") @Excel(name = "发货类型", width = 15, dicCode = "ship_type")
@Dict(dicCode = "ship_type") @Dict(dicCode = "ship_type")
@ -72,6 +76,10 @@ public class VehicleDemand implements Serializable {
/**预计装车总托数*/ /**预计装车总托数*/
@Excel(name = "预计装车总托数", width = 15) @Excel(name = "预计装车总托数", width = 15)
@ApiModelProperty(value = "预计装车总托数") @ApiModelProperty(value = "预计装车总托数")
private Integer preTotalPallets;
/**实际装车总托数*/
@Excel(name = "实际装车总托数", width = 15)
@ApiModelProperty(value = "实际装车总托数")
private Integer totalPallets; private Integer totalPallets;
/**总发货数量*/ /**总发货数量*/
@Excel(name = "总发货数量", width = 15) @Excel(name = "总发货数量", width = 15)
@ -81,16 +89,24 @@ public class VehicleDemand implements Serializable {
// @Excel(name = "送货区域", width = 15) // @Excel(name = "送货区域", width = 15)
@ApiModelProperty(value = "送货区域") @ApiModelProperty(value = "送货区域")
private String deliveryArea; private String deliveryArea;
/**取货地点*/
@Excel(name = "取货地点", width = 15, dicCode = "pick_up_hub")
@Dict(dicCode = "pick_up_hub")
private String pickUpHub;
/**送货地点*/ /**送货地点*/
@Excel(name = "送货地点", width = 15, dicCode = "delivery_address") @Excel(name = "送货地点", width = 15, dicCode = "delivery_address")
@Dict(dicCode = "delivery_address") @Dict(dicCode = "delivery_address")
private String deliveryAddress; private String deliveryAddress;
/**取货仓库*/
@Excel(name = "取货仓库", width = 15, dicCode = "pick_up_hub")
@Dict(dicCode = "pick_up_hub")
private String pickUpHub;
/**用车需求编号*/ /**用车需求编号*/
@Excel(name = "用车需求编号", width = 15) @Excel(name = "用车需求编号", width = 15)
@ApiModelProperty(value = "用车需求编号") @ApiModelProperty(value = "用车需求编号")
private String vdNo; private String vdNo;
/**当前状态 0-创建, 1-已合并需求, 2-计算车辆需求中, 3-发送车辆需求, 4-等待装车,
* 5-车辆离厂完成, 6-取消, 7-超期无效*/
@Excel(name = "当前状态", width = 15, dicCode = "current_status")
@Dict(dicCode = "current_status")
@ApiModelProperty(value = "当前状态")
private java.lang.String currentStatus;
@TableField(exist = false)
private Integer distance;
} }

View File

@ -4,6 +4,8 @@ import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.tms.outbound.vehicledemand.entity.VehicleDemand; import org.jeecg.modules.tms.outbound.vehicledemand.entity.VehicleDemand;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/** /**
* @Description: 用车需求 * @Description: 用车需求
* @Author: jeecg-boot * @Author: jeecg-boot

View File

@ -5,8 +5,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.tms.basicdata.constant.GeneralSequenceConstant;
import org.jeecg.modules.tms.basicdata.generalsequence.service.IGeneralSequenceService;
import org.jeecg.modules.tms.basicdata.iogisticsprice.entity.TmsIogisticsPrice; import org.jeecg.modules.tms.basicdata.iogisticsprice.entity.TmsIogisticsPrice;
import org.jeecg.modules.tms.basicdata.iogisticsprice.mapper.TmsIogisticsPriceMapper; import org.jeecg.modules.tms.basicdata.iogisticsprice.mapper.TmsIogisticsPriceMapper;
import org.jeecg.modules.tms.basicdata.logisticsroute.mapper.LogisticsRouteMapper;
import org.jeecg.modules.tms.basicdata.vehiclepallet.entity.VehiclePallet; import org.jeecg.modules.tms.basicdata.vehiclepallet.entity.VehiclePallet;
import org.jeecg.modules.tms.basicdata.vehiclepallet.mapper.VehiclePalletMapper; import org.jeecg.modules.tms.basicdata.vehiclepallet.mapper.VehiclePalletMapper;
import org.jeecg.modules.tms.outbound.deliverydemand.mapper.DeliveryDemandMapper; import org.jeecg.modules.tms.outbound.deliverydemand.mapper.DeliveryDemandMapper;
@ -16,6 +19,8 @@ import org.jeecg.modules.tms.outbound.vehicledemand.mapper.VehicleDemandMapper;
import org.jeecg.modules.tms.outbound.vehicledemand.service.IVehicleDemandService; import org.jeecg.modules.tms.outbound.vehicledemand.service.IVehicleDemandService;
import org.jeecg.modules.tms.outbound.vehicledemandcount.entity.VehicleDemandCount; import org.jeecg.modules.tms.outbound.vehicledemandcount.entity.VehicleDemandCount;
import org.jeecg.modules.tms.outbound.vehicledemandcount.service.IVehicleDemandCountService; import org.jeecg.modules.tms.outbound.vehicledemandcount.service.IVehicleDemandCountService;
import org.jeecg.modules.tms.outbound.vehicledemandhis.entity.VehicleDemandHis;
import org.jeecg.modules.tms.outbound.vehicledemandhis.service.IVehicleDemandHisService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -23,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* @Description: 用车需求 * @Description: 用车需求
@ -164,9 +170,9 @@ public class VehicleDemandServiceImpl extends ServiceImpl<VehicleDemandMapper, V
/** /**
* 拼凑一个用车需求计算的集合 * 拼凑一个用车需求计算的集合
* @param vehicleDemand * @param
* @param vehiclePallet * @param
* @param vehicleDemandCounts * @param
*/ */
/*private void insertVehicleDemandCount(VehicleDemand vehicleDemand, VehiclePallet vehiclePallet, List<VehicleDemandCount> vehicleDemandCounts) { /*private void insertVehicleDemandCount(VehicleDemand vehicleDemand, VehiclePallet vehiclePallet, List<VehicleDemandCount> vehicleDemandCounts) {
VehicleDemandCount vehicleDemandCount = new VehicleDemandCount(); VehicleDemandCount vehicleDemandCount = new VehicleDemandCount();

View File

@ -0,0 +1,173 @@
package org.jeecg.modules.tms.outbound.vehicledemandhis.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.tms.outbound.deliverydemand.entity.DeliveryDemand;
import org.jeecg.modules.tms.outbound.vehicledemandcount.entity.VehicleDemandCount;
import org.jeecg.modules.tms.outbound.vehicledemandhis.entity.VehicleDemandHis;
import org.jeecg.modules.tms.outbound.vehicledemandhis.service.IVehicleDemandHisService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
/**
* @Description: 用车需求历史
* @Author: jeecg-boot
* @Date: 2025-06-09
* @Version: V1.0
*/
@Api(tags="tms_vehicle_demand_his")
@RestController
@RequestMapping("/vehicledemanddetail/vehicleDemandDetail")
@Slf4j
public class VehicleDemandHisController extends JeecgController<VehicleDemandHis, IVehicleDemandHisService> {
@Autowired
private IVehicleDemandHisService vehicleDemandDetailService;
/**
* 分页列表查询
*
* @param vehicleDemandDetail
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "tms_vehicle_demand_his-分页列表查询")
@ApiOperation(value="tms_vehicle_demand_his -分页列表查询", notes="tms_vehicle_demand_his -分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<VehicleDemandHis>> queryPageList(VehicleDemandHis vehicleDemandDetail,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<VehicleDemandHis> queryWrapper = QueryGenerator.initQueryWrapper(vehicleDemandDetail, req.getParameterMap());
Page<VehicleDemandHis> page = new Page<VehicleDemandHis>(pageNo, pageSize);
IPage<VehicleDemandHis> pageList = vehicleDemandDetailService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param vehicleDemandDetail
* @return
*/
@AutoLog(value = "tms_vehicle_demand_his -添加")
@ApiOperation(value="tms_vehicle_demand_his -添加", notes="tms_vehicle_demand_his -添加")
//@RequiresPermissions("org.jeecg.modules.tms:tms_vehicle_demand_his:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody VehicleDemandHis vehicleDemandDetail) {
vehicleDemandDetailService.save(vehicleDemandDetail);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param vehicleDemandDetail
* @return
*/
@AutoLog(value = "tms_vehicle_demand_his -编辑")
@ApiOperation(value="tms_vehicle_demand_his -编辑", notes="tms_vehicle_demand_his -编辑")
//@RequiresPermissions("org.jeecg.modules.tms:tms_vehicle_demand_his:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody VehicleDemandHis vehicleDemandDetail) {
vehicleDemandDetailService.updateById(vehicleDemandDetail);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "tms_vehicle_demand_his -通过id删除")
@ApiOperation(value="tms_vehicle_demand_his -通过id删除", notes="tms_vehicle_demand_his -通过id删除")
//@RequiresPermissions("org.jeecg.modules.tms:tms_vehicle_demand_his:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
vehicleDemandDetailService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "tms_vehicle_demand_his -批量删除")
@ApiOperation(value="tms_vehicle_demand_his -批量删除", notes="tms_vehicle_demand_his -批量删除")
//@RequiresPermissions("org.jeecg.modules.tms:tms_vehicle_demand_his:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.vehicleDemandDetailService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "tms_vehicle_demand_his-通过id查询")
@ApiOperation(value="tms_vehicle_demand_his -通过id查询", notes="tms_vehicle_demand_his -通过id查询")
@GetMapping(value = "/queryById")
public Result<VehicleDemandHis> queryById(@RequestParam(name="id",required=true) String id) {
VehicleDemandHis vehicleDemandDetail = vehicleDemandDetailService.getById(id);
if(vehicleDemandDetail==null) {
return Result.error("未找到对应数据");
}
return Result.OK(vehicleDemandDetail);
}
/**
* 导出excel
*
* @param request
* @param vehicleDemandDetail
*/
//@RequiresPermissions("org.jeecg.modules.tms:tms_vehicle_demand_his:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, VehicleDemandHis vehicleDemandDetail) {
return super.exportXls(request, vehicleDemandDetail, VehicleDemandHis.class, "tms_vehicle_demand_his");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
//@RequiresPermissions("tms_vehicle_demand_his:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, VehicleDemandHis.class);
}
@GetMapping(value = "/getByVdNo")
public Result<?> getByVdNo(@RequestParam(name="vdNo",required=true) String vdNo) {
List<VehicleDemandHis> vdNos = vehicleDemandDetailService.query().eq("vd_no_new", vdNo).list();
IPage<VehicleDemandHis> page = new Page<>(1, vdNos.size());
page.setRecords(vdNos);
page.setTotal(vdNos.size());
return Result.OK(page);
}
}

View File

@ -0,0 +1,112 @@
package org.jeecg.modules.tms.outbound.vehicledemandhis.entity;
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.jeecg.common.aspect.annotation.Dict;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 用车需求历史
* @Author: jeecg-boot
* @Date: 2025-06-09
* @Version: V1.0
*/
@Data
@TableName("tms_vehicle_demand_his")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="tms_vehicle_demand_his对象", description="tms_vehicle_demand_his")
public class VehicleDemandHis implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private Date updateTime;
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private String sysOrgCode;
/**发货日期*/
@Excel(name = "发货日期", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "发货日期")
private Date shipDate;
/**到货日期*/
@Excel(name = "到货日期", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "到货日期")
private Date deliveryDate;
/**发货类型*/
@Excel(name = "发货类型", width = 15, dicCode = "ship_type")
@Dict(dicCode = "ship_type")
private String shipType;
/**料号*/
@Excel(name = "料号", width = 15)
@ApiModelProperty(value = "料号")
private String pn;
/**预计装车总托数*/
@Excel(name = "预计装车总托数", width = 15)
@ApiModelProperty(value = "预计装车总托数")
private Integer preTotalPallets;
/**实际装车总托数*/
@Excel(name = "实际装车总托数", width = 15)
@ApiModelProperty(value = "实际装车总托数")
private Integer totalPallets;
/**总发货数量*/
@Excel(name = "总发货数量", width = 15)
@ApiModelProperty(value = "总发货数量")
private Integer totalShips;
/**送货区域*/
// @Excel(name = "送货区域", width = 15)
@ApiModelProperty(value = "送货区域")
private String deliveryArea;
/**取货地点*/
@Excel(name = "取货地点", width = 15, dicCode = "pick_up_hub")
@Dict(dicCode = "pick_up_hub")
private String pickUpHub;
/**送货地点*/
@Excel(name = "送货地点", width = 15, dicCode = "delivery_address")
@Dict(dicCode = "delivery_address")
private String deliveryAddress;
/**用车需求编号*/
@Excel(name = "用车需求编号", width = 15)
@ApiModelProperty(value = "用车需求编号")
private String vdNo;
/**当前状态 0-创建, 1-已合并需求, 2-计算车辆需求中, 3-发送车辆需求, 4-等待装车,
* 5-车辆离厂完成, 6-取消, 7-超期无效*/
@Excel(name = "当前状态", width = 15, dicCode = "current_status")
@Dict(dicCode = "current_status")
@ApiModelProperty(value = "当前状态")
private java.lang.String currentStatus;
/**新的用车需求编号*/
private String vdNoNew;
}

View File

@ -0,0 +1,14 @@
package org.jeecg.modules.tms.outbound.vehicledemandhis.mapper;
import org.jeecg.modules.tms.outbound.vehicledemandhis.entity.VehicleDemandHis;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 用车需求历史
* @Author: jeecg-boot
* @Date: 2025-06-09
* @Version: V1.0
*/
public interface VehicleDemandHisMapper extends BaseMapper<VehicleDemandHis> {
}

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.tms.outbound.vehicledemandhis.mapper.VehicleDemandHisMapper">
</mapper>

View File

@ -0,0 +1,14 @@
package org.jeecg.modules.tms.outbound.vehicledemandhis.service;
import org.jeecg.modules.tms.outbound.vehicledemandhis.entity.VehicleDemandHis;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 用车需求历史
* @Author: jeecg-boot
* @Date: 2025-06-09
* @Version: V1.0
*/
public interface IVehicleDemandHisService extends IService<VehicleDemandHis> {
}

View File

@ -0,0 +1,19 @@
package org.jeecg.modules.tms.outbound.vehicledemandhis.service.impl;
import org.jeecg.modules.tms.outbound.vehicledemandhis.entity.VehicleDemandHis;
import org.jeecg.modules.tms.outbound.vehicledemandhis.mapper.VehicleDemandHisMapper;
import org.jeecg.modules.tms.outbound.vehicledemandhis.service.IVehicleDemandHisService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 用车需求历史
* @Author: jeecg-boot
* @Date: 2025-06-09
* @Version: V1.0
*/
@Service
public class VehicleDemandHisServiceImpl extends ServiceImpl<VehicleDemandHisMapper, VehicleDemandHis> implements IVehicleDemandHisService {
}

View File

@ -0,0 +1,25 @@
package org.jeecg.modules.tms.quartz.jobs;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.tms.outbound.deliverydemand.service.IDeliveryDemandService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @Description
* @Author admin
* @Date 2025/6/9 15:59
*/
@Slf4j
public class DeliveryDemandJob implements Job {
@Autowired
private IDeliveryDemandService deliveryDemandService;
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
log.info("========发货需求自动合并开始=======");
deliveryDemandService.timedMerge();
log.info("========发货需求自动合并结束=======");
}
}