合并功能调整

This commit is contained in:
王帅 2025-06-13 08:36:35 +08:00
parent 66da2e471a
commit da468a0af5
5 changed files with 130 additions and 12 deletions

View File

@ -134,7 +134,7 @@ spring:
# username: root
# password: 123456
# driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:oracle:thin:@123.57.206.181:1521/ORCLPDB1
url: jdbc:oracle:thin:@172.22.10.236:1521/mesdb
username: SDKTMS
password: SDKTMS
driver-class-name: oracle.jdbc.OracleDriver
@ -189,9 +189,9 @@ jeecg:
app: http://localhost:8051
path:
#文件上传根目录 设置
upload: /opt/upFiles
upload: ../opt/upFiles
#webapp文件路径
webapp: /opt/webapp
webapp: ../opt/webapp
shiro:
excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**
#阿里云oss存储和大鱼短信秘钥配置

View File

@ -17,6 +17,7 @@ import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.tms.carinout.vehicleinout.entity.VehicleParam;
import org.jeecg.modules.tms.constant.TmsConstants;
import org.jeecg.modules.tms.outbound.deliverydemand.entity.DeliveryDemand;
import org.jeecg.modules.tms.outbound.deliverydemand.entity.DeliveryDemandExcel;
import org.jeecg.modules.tms.outbound.deliverydemand.service.IDeliveryDemandService;
@ -28,6 +29,8 @@ import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.tms.outbound.deliverydemanddetail.entity.DeliveryDemandDetail;
import org.jeecg.modules.tms.outbound.deliverydemanddetail.service.IDeliveryDemandDetailService;
import org.jeecg.modules.tms.outbound.vehicledemand.entity.VehicleDemand;
import org.jeecg.modules.tms.outbound.vehicledemand.service.IVehicleDemandService;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
@ -60,6 +63,8 @@ public class DeliveryDemandController extends JeecgController<DeliveryDemand, ID
private IDeliveryDemandService deliveryDemandService;
@Autowired
private IDeliveryDemandDetailService deliveryDemandDetailService;
@Autowired
private IVehicleDemandService vehicleDemandService;
/**
* 分页列表查询
@ -109,6 +114,15 @@ public class DeliveryDemandController extends JeecgController<DeliveryDemand, ID
@Transactional(rollbackFor = Exception.class)
public Result<String> add(@RequestBody DeliveryDemand deliveryDemand) {
deliveryDemandService.save(deliveryDemand);
if (!TmsConstants.shipType_2.equals(deliveryDemand.getShipType())) {
VehicleDemand vehicleDemand = BeanUtil.toBean(deliveryDemand, VehicleDemand.class);
vehicleDemand.setDeliveryDemandId(deliveryDemand.getId())
.setTotalShips(deliveryDemand.getShipNumber())
.setTotalPallets(deliveryDemand.getPalletsNum())
.setPreTotalPallets(deliveryDemand.getPalletsNum())
.setCurrentStatus(TmsConstants.currentStatus_0);
vehicleDemandService.save(vehicleDemand);
}
List<DeliveryDemandDetail> deliveryDemandDetailList = deliveryDemand.getDeliveryDemandDetailList();
deliveryDemandDetailList.forEach(item ->{
item.setDeliveryDemandId(deliveryDemand.getId());

View File

@ -114,7 +114,81 @@ public class DeliveryDemandServiceImpl extends ServiceImpl<DeliveryDemandMapper,
return Result.OK("合并成功!");
}
@Override
@Transactional(rollbackFor = Exception.class)
public void timedMerge() {
LambdaQueryWrapper<VehicleDemand> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(VehicleDemand::getCurrentStatus, TmsConstants.currentStatus_0, TmsConstants.currentStatus_1)
.ne(VehicleDemand::getShipType, TmsConstants.shipType_2);
List<VehicleDemand> list = vehicleDemandService.list(lambdaQueryWrapper);
// 以发货日期运输类型取货地点送货地点为key
Map<String, VehicleDemand> mergedMap = list.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.getTotalPallets());
merged.setPreTotalPallets(demand.getPreTotalPallets());
merged.setTotalShips(demand.getTotalShips());
merged.setDeliveryDate(demand.getDeliveryDate());
merged.setDeliveryDemandId(demand.getDeliveryDemandId());
return merged;
}, (merged1, merged2) -> {
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(
Optional.ofNullable(merged1.getTotalShips()).orElse(BigDecimal.ZERO)
.add(Optional.ofNullable(merged2.getTotalShips()).orElse(BigDecimal.ZERO))
);
merged1.setDeliveryDemandId(merged1.getDeliveryDemandId()+","+merged2.getDeliveryDemandId());
return merged1;
}
));
// 合并之后的用车需求集合
List<VehicleDemand> vehicleDemandList = new ArrayList<>();
for (Map.Entry<String, VehicleDemand> entry : mergedMap.entrySet()) {
String key = entry.getKey();
VehicleDemand value = entry.getValue();
String deliveryDemandId = value.getDeliveryDemandId();
String sequence = generalSequenceService.getSequence(GeneralSequenceConstant.VEHICLE_DEMAND_NO);
value.setVdNo(sequence).setCurrentStatus(TmsConstants.currentStatus_1);
vehicleDemandList.add(value);
String[] split = deliveryDemandId.split(",");
LambdaUpdateWrapper<DeliveryDemand> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.in(DeliveryDemand::getId, split);
DeliveryDemand deliveryDemand = new DeliveryDemand();
deliveryDemand.setVdNo(sequence).setCurrentStatus(TmsConstants.currentStatus_1);
deliveryDemandMapper.update(deliveryDemand, lambdaUpdateWrapper);
/*list.forEach(item -> {
if (key.equals(String.format("%s|%s",
item.getShipDate(),
item.getShipType()))) {
item.setVdNo(sequence);
}
});*/
}
// 删除合并前的数据
vehicleDemandService.removeBatchByIds(list);
// 新增合并的数据
vehicleDemandService.saveBatch(vehicleDemandList);
}
// 原定时合并以发货需求信息合并
/*@Override
@Transactional(rollbackFor = Exception.class)
public void timedMerge() {
LambdaQueryWrapper<DeliveryDemand> lambdaQueryWrapper = new LambdaQueryWrapper<>();
@ -150,8 +224,8 @@ public class DeliveryDemandServiceImpl extends ServiceImpl<DeliveryDemandMapper,
(merged2.getPreTotalPallets() == null ? 0 : merged2.getPreTotalPallets())
);
merged1.setTotalShips(
/*(merged1.getTotalShips() == null ? 0 : merged1.getTotalShips()) +
(merged2.getTotalShips() == null ? 0 : merged2.getTotalShips())*/
*//*(merged1.getTotalShips() == null ? 0 : merged1.getTotalShips()) +
(merged2.getTotalShips() == null ? 0 : merged2.getTotalShips())*//*
Optional.ofNullable(merged1.getTotalShips()).orElse(BigDecimal.ZERO)
.add(Optional.ofNullable(merged2.getTotalShips()).orElse(BigDecimal.ZERO))
);
@ -178,7 +252,7 @@ public class DeliveryDemandServiceImpl extends ServiceImpl<DeliveryDemandMapper,
vehicleDemands.add(value);
}
vehicleDemandService.saveBatch(vehicleDemands);
}
}*/
@Override
public Result<?> getPalletsNum(List<DeliveryDemand> deliveryDemands) {

View File

@ -11,6 +11,7 @@ import javax.servlet.http.HttpServletResponse;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
@ -18,6 +19,7 @@ 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.entity.DeliveryDemand;
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.service.IVehicleDemandService;
@ -227,9 +229,9 @@ public class VehicleDemandController extends JeecgController<VehicleDemand, IVeh
@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()));
boolean hasEven = vehicleDemands.stream().anyMatch(item -> TmsConstants.currentStatus_2.equals(item.getCurrentStatus()));
if (hasEven) {
return Result.error("数据中含有不是创建状态的数据!");
return Result.error("数据中含有计算车辆需求完成的数据!");
}
List<VehicleDemandHis> vehicleDemandHisList = BeanUtil.copyToList(vehicleDemands, VehicleDemandHis.class);
Map<String, VehicleDemand> collect = vehicleDemands.stream()
@ -250,6 +252,7 @@ public class VehicleDemandController extends JeecgController<VehicleDemand, IVeh
merged.setPreTotalPallets(vehicleDemand.getPreTotalPallets());
merged.setTotalShips(vehicleDemand.getTotalShips());
merged.setDeliveryDate(vehicleDemand.getDeliveryDate());
merged.setDeliveryDemandId(vehicleDemand.getDeliveryDemandId());
return merged;
}, (merged1, merged2) -> {
// 默认策略保留距离更长的那个对象的 pickupHub / deliveryAddress
@ -281,6 +284,7 @@ public class VehicleDemandController extends JeecgController<VehicleDemand, IVeh
Optional.ofNullable(merged1.getTotalShips()).orElse(BigDecimal.ZERO)
.add(Optional.ofNullable(merged2.getTotalShips()).orElse(BigDecimal.ZERO))
);
merged1.setDeliveryDemandId(merged1.getDeliveryDemandId()+","+merged2.getDeliveryDemandId());
return merged1;
}
));
@ -299,6 +303,13 @@ public class VehicleDemandController extends JeecgController<VehicleDemand, IVeh
item.setVdNoNew(sequence);
}
});
String[] split = value.getDeliveryDemandId().split(",");
LambdaUpdateWrapper<DeliveryDemand> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.in(DeliveryDemand::getId, split)
.set(DeliveryDemand::getVdNo, sequence)
.set(DeliveryDemand::getCurrentStatus, TmsConstants.currentStatus_1);
// 更新发货需求状态为创建用车需求编号
deliveryDemandService.update(lambdaUpdateWrapper);
}
// 生成新的用车需求
vehicleDemandService.saveBatch(vehicleDemandList);
@ -324,16 +335,34 @@ public class VehicleDemandController extends JeecgController<VehicleDemand, IVeh
if (hasEven) {
return Result.error("数据中含有不是已合并需求的数据!");
}
LambdaQueryWrapper<VehicleDemandHis> lambdaQueryWrapper = new LambdaQueryWrapper<>();
List<String> deliveryDemandIds = vehicleDemands.stream()
.map(VehicleDemand::getDeliveryDemandId)
.filter(Objects::nonNull)
.flatMap(idStr -> Arrays.stream(idStr.split(",")))
.collect(Collectors.toList());
List<DeliveryDemand> deliveryDemands = deliveryDemandService.listByIds(deliveryDemandIds);
List<VehicleDemand> vehicleDemandList = new ArrayList<>();
deliveryDemands.forEach(item -> {
item.setCurrentStatus(TmsConstants.currentStatus_0);
VehicleDemand vehicleDemand = BeanUtil.toBean(item, VehicleDemand.class);
vehicleDemand.setTotalPallets(item.getPalletsNum())
.setPreTotalPallets(item.getPalletsNum())
.setTotalShips(item.getShipNumber())
.setDeliveryDemandId(item.getId());
vehicleDemandList.add(vehicleDemand);
});
deliveryDemandService.updateBatchById(deliveryDemands);
/*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.saveBatch(vehicleDemandList);*/
// 删除合并的数据
vehicleDemandService.removeBatchByIds(ids);
vehicleDemandService.saveBatch(vehicleDemandList);
// 删除历史记录
vehicleDemandHisService.removeByIds(list);
// vehicleDemandHisService.removeByIds(list);
return Result.OK("解绑成功!");
}
}

View File

@ -109,4 +109,5 @@ public class VehicleDemand implements Serializable {
private java.lang.String currentStatus;
@TableField(exist = false)
private Integer distance;
private String deliveryDemandId;
}